[28767] in Perl-Users-Digest

home help back first fref pref prev next nref lref last post

Perl-Users Digest, Issue: 11 Volume: 11

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Jan 10 18:06:02 2007

Date: Wed, 10 Jan 2007 15:05:07 -0800 (PST)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)

Perl-Users Digest           Wed, 10 Jan 2007     Volume: 11 Number: 11

Today's topics:
    Re: Accessing Public Folders of Exchange 2003/2007 usin <usenet@fkspam.org>
    Re: Accessing Public Folders of Exchange 2003/2007 usin <notvalid@cox.net.invalid>
        Fine grained time <Mark.Seger@hp.com>
    Re: incorrect behaviour in use clause specifying Class: <julien.ollivier@gmail.com>
    Re: incorrect behaviour in use clause specifying Class: <julien.ollivier@gmail.com>
        Parsing an XML file and adding another tag, if the tag  <pannbu79@gmail.com>
    Re: Parsing an XML file and adding another tag, if the  <john@castleamber.com>
    Re: Parsing an XML file and adding another tag, if the  <pannbu79@gmail.com>
    Re: Parsing an XML file and adding another tag, if the  <john@castleamber.com>
    Re: Parsing an XML file and adding another tag, if the  <xmltwig@gmail.com>
    Re: Perl inline function <uri@stemsystems.com>
        regexp problem <bpatton@ti.com>
    Re: regexp problem <john@castleamber.com>
    Re: regexp problem <bpatton@ti.com>
    Re: regexp problem <DJStunks@gmail.com>
    Re: regexp problem <bpatton@ti.com>
    Re: regexp problem <wahab@chemie.uni-halle.de>
        using no strict "refs" <bpatton@ti.com>
    Re: using no strict "refs" <mritty@gmail.com>
        Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)

----------------------------------------------------------------------

Date: Wed, 10 Jan 2007 16:49:48 +0000
From: Ben Tisdall <usenet@fkspam.org>
Subject: Re: Accessing Public Folders of Exchange 2003/2007 using Perl Scripts
Message-Id: <GfmdnYeJv5WwhDjYnZ2dnUVZ8q-mnZ2d@bt.com>

v_n_satwik@yahoo.co.in wrote:
> How to access Public Folders of Exchange 2003 or 2007 using Perl
> Scripts?
> 
At best a question framed this way is likely to draw a blank here, at 
worst... if you've lurked, you'll already know.

I suggest you read the FAQ for the group & come back with a specific 
question, making sure to demonstrate you've already done some homework.

-- 
Ben Tisdall


------------------------------

Date: Wed, 10 Jan 2007 14:14:29 -0500
From: John Mason Jr <notvalid@cox.net.invalid>
Subject: Re: Accessing Public Folders of Exchange 2003/2007 using Perl Scripts
Message-Id: <12qaeoci8l6hv3a@news.supernews.com>

v_n_satwik@yahoo.co.in wrote:
> How to access Public Folders of Exchange 2003 or 2007 using Perl
> Scripts?
> 

If you have Activestate perl installed look in documentation for
ActivePerl FAQ -> windows specific ->modules and samples -> Is there a
way to access MAPI from my Perl script?


John


------------------------------

Date: Wed, 10 Jan 2007 12:06:10 -0500
From: Mark Seger <Mark.Seger@hp.com>
Subject: Fine grained time
Message-Id: <45a51d02$1@usenet01.boi.hp.com>

I have some code I had written awhile back (on perl 5.6 and redhat 9) 
that used ualarm to wake me up every second and it worked really nicely. 
  However I've more recently dug into just how accurate that timer is 
and was disappointed, especially on a cominaction of rhel4/u4 and perl 
5.8.5.  In fact, I see my code waking up almost 0.001 seconds later on 
each subsequent interval.

Going back and rereading the manpage for Time:HiRes I spotted a comment 
that the relationship between sigalarm and sleep are unspecified so I 
changed my code to use setitimer() and it behaves the same way.

So my question is, is this a perl thing or a system thing?  Or am I just 
  doing something silly.  Here's what my code looks like:

use Time::HiRes qw(ITIMER_REAL);

$SIG{"ALRM"}= sub {};
Time::HiRes::setitimer(ITIMER_REAL, 1, 1);
while(1)
{
   ($intSeconds, $intUsecs)=Time::HiRes::gettimeofday();
   printf("%d.%06d\n", $intSeconds, $intUsecs);
   sleep 2;
}

and here's what it produces:

[root@cag-dl145-02 collectl]# ./alarm2-test.pl
1168452960.360707
1168452961.361269
1168452962.362297
1168452963.363291

I also tried using "select(undef, undef, undef, 2)" instead of the sleep 
but that didn't make any difference.

-mark


------------------------------

Date: 10 Jan 2007 13:28:45 -0800
From: "Julien" <julien.ollivier@gmail.com>
Subject: Re: incorrect behaviour in use clause specifying Class::Std version in perl 5.8.8
Message-Id: <1168464524.913735.38580@77g2000hsv.googlegroups.com>

Paul Lalli wrote:
> I can't duplicate your results with my perl, v5.8.4 solaris:

Hi Paul,

Then this is evidence that the problem occurs starting with perl 5.8.8.

Julien



------------------------------

Date: 10 Jan 2007 13:40:21 -0800
From: "Julien" <julien.ollivier@gmail.com>
Subject: Re: incorrect behaviour in use clause specifying Class::Std version in perl 5.8.8
Message-Id: <1168465221.323122.7520@i56g2000hsf.googlegroups.com>

Sisyphus wrote:
> I think it's conceivable that the problem *could* be a bug in the version
> module. (I'm assuming that you're using different versions of version.pm in
> the respective builds of perl.)

Well, I checked and indeed the version.pm module is different in each
case.  Under perl 5.8.8 I am using version 0.430, and under perl 5.8.6
I am using version 0.670100.   So I have an older version.pm in the
newer perl 5.8.8.  Oops!  (Each perl version in on a different
workstation actually).

>
> Try using the same version of version.pm in both your perl 5.8.6 and perl
> 5.8.8. If perl 5.8.6 and 5.8.8 still produce different results, then I'll
> have to concede that it's probably a bug in perl 5.8.8. Otherwise, it's
> probably a bug in version.pm.
>

Upgrading to version.pm v0.680 fixed the problem under perl 5.8.8 :

user@host ~]$ perl -e 'use version 9.9'
version version 9.900 (v9.900.0) required--this is only version 0.680
(v0.680.0) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
user@host ~]$ perl -e 'use Class::Std 0.000009'
Class::Std version 0.000009 (v0.0.9) required--this is only version
0.000008 (v0.0.8) at -e line 1.
BEGIN failed--compilation aborted at -e line 1.

Thanks guys!

Julien



------------------------------

Date: 10 Jan 2007 07:18:27 -0800
From: "P" <pannbu79@gmail.com>
Subject: Parsing an XML file and adding another tag, if the tag is not available / the value is null
Message-Id: <1168442307.014816.183940@77g2000hsv.googlegroups.com>

Hi

I have a scenario in which we are adding a new tag to the existing
structure of the XML files, some of the new files created might have
the newly added tag with value / just an empty tag, all I need is to
add the new tag if it is not present with the value available in
another tag, or if it is empty have to give the value from the other
tag to this.
For Example:
Old XML file:
<employee>
   <personal_details>
       <fname>Annbu</fname>
       <lname>P</lname>
       <empid>7655</empid>
   </personal_details>
       ......
</employee>

New XML file:
<employee>
    <personal_details>
       <fname>Annbu</fname>
       <lname>P</lname>
       <nickname>Annbu</nickname>
       <empid>7655</empid>
   </personal_details>
       ......
</employee>

in the new file we have added a new field/tag called <nickname> - for
the existing XML files it has to take the value present in the <fname>
tag, (if the tag is empty we need to add the value, else have to add
the new tag with the value).

Kindly let me know, how to do it with perl, I am new to perl.

thank you.

Regards,
Annbu P



------------------------------

Date: 10 Jan 2007 18:13:17 GMT
From: John Bokma <john@castleamber.com>
Subject: Re: Parsing an XML file and adding another tag, if the tag is not available / the value is null
Message-Id: <Xns98B47C51A1CFDcastleamber@130.133.1.4>

"P" <pannbu79@gmail.com> wrote:

> Kindly let me know, how to do it with perl, I am new to perl.

Personally I would say use XSLT for stuff like this. But maybe XML::Simple 
can solve your problem the Perl way.

-- 
John                Experienced Perl programmer: http://castleamber.com/

          Perl help, tutorials, and examples: http://johnbokma.com/perl/


------------------------------

Date: 10 Jan 2007 11:31:15 -0800
From: "P" <pannbu79@gmail.com>
Subject: Re: Parsing an XML file and adding another tag, if the tag is not available / the value is null
Message-Id: <1168457475.841944.241810@p59g2000hsd.googlegroups.com>

Thanks John,

I can't use the XSLT because, we just need to insert the text / the new
tag with the value in the same file, sine there are so many XPATH
expressions in other files that refer to these files.

can you let me know if there is any sample code, that could help me.

Thanks again.

Regards,
Annbu P

John Bokma wrote:
> "P" <pannbu79@gmail.com> wrote:
>
> > Kindly let me know, how to do it with perl, I am new to perl.
>
> Personally I would say use XSLT for stuff like this. But maybe XML::Simple
> can solve your problem the Perl way.
>
> --
> John                Experienced Perl programmer: http://castleamber.com/
>
>           Perl help, tutorials, and examples: http://johnbokma.com/perl/



------------------------------

Date: 10 Jan 2007 19:50:37 GMT
From: John Bokma <john@castleamber.com>
Subject: Re: Parsing an XML file and adding another tag, if the tag is not available / the value is null
Message-Id: <Xns98B48CD1CF8E9castleamber@130.133.1.4>

"P" <pannbu79@gmail.com> wrote:

> Thanks John,
> 
> I can't use the XSLT because, we just need to insert the text / the
> new tag with the value in the same file,

Uhm, you can transform the current one to a new file, and then copy it 
over the old one. Doesn't sound impossible to me.

> can you let me know if there is any sample code, that could help me.

http://search.cpan.org/~grantm/XML-Simple-2.16/lib/XML/Simple.pm

has examples. 

Other option might be:
XML::DOM::Lite
http://search.cpan.org/~rhundt/XML-DOM-Lite-0.15/lib/XML/DOM/Lite.pm


BTW: please don't top post (if you don't know what that means, google for 
it).

-- 
John                Experienced Perl programmer: http://castleamber.com/

          Perl help, tutorials, and examples: http://johnbokma.com/perl/


------------------------------

Date: 10 Jan 2007 12:00:12 -0800
From: "mirod" <xmltwig@gmail.com>
Subject: Re: Parsing an XML file and adding another tag, if the tag is not available / the value is null
Message-Id: <1168459211.951510.187500@i39g2000hsf.googlegroups.com>

On Jan 10, 10:18 am, "P" <pannb...@gmail.com> wrote:

> I have a scenario in which we are adding a new tag to the existing
> structure of the XML files, some of the new files created might have
> the newly added tag with value / just an empty tag, all I need is to
> add the new tag if it is not present with the value available in
> another tag, or if it is empty have to give the value from the other
> tag to this.

Using XML::Twig here is how you would do it:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

XML::Twig->new( twig_roots => { personal_details => \&add_nick },
                          twig_print_outside_roots => 1,
                          keep_spaces => 1,
                       )
              ->parsefile( "employee.xml");

sub add_nick
  { my( $t, $details)= @_;
    my $fname = $details->first_child( 'fname');
    my $nick    = $details->first_child( 'nickname');

    if( !$nick)
      { $nick = $fname->insert_new_elt( after => nickname =>
$fname->text); }
    elsif( $nick->text=~ m{^\s*$})
      { $nick->set_text( $fname->text); }

    $t->flush; # output the details and frees the memory
  }

A few words of explanation:
twig_roots                     triggers the associated sub every time a
personal_details element is found,
twig_print_outside_roots prints everything outside of the
personal_details elements
keep_spaces                 preserves the non-significant spaces in the
input
flush                             outputs the fragment of the tree
built so far, and frees the memory

OTH

-- 
mirod



------------------------------

Date: Wed, 10 Jan 2007 13:51:00 -0500
From: Uri Guttman <uri@stemsystems.com>
Subject: Re: Perl inline function
Message-Id: <x7hcuy4sx7.fsf@mail.sysarch.com>

>>>>> "h" == howa  <howachen@gmail.com> writes:

  h> are there inline function or macro for Perl, so function's performance
  h> can be optimized for speed?

if sub calling overhead is a real problem then you should not code in
perl. this is likely a case of premature optimization. you will likely
get much better preformance by choosing a better algorithm, data
structure or design. but without code or a reason for this speedup
request there is no way to assist you.

uri

-- 
Uri Guttman  ------  uri@stemsystems.com  -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs  ----------------------------  http://jobs.perl.org


------------------------------

Date: Wed, 10 Jan 2007 13:34:55 -0600
From: Billy Patton <bpatton@ti.com>
Subject: regexp problem
Message-Id: <eo3f4u$qqc$1@home.itg.ti.com>

I'm using regexp coach to assist me but more heads would be helpful

Here is a sample of the data

dogs,10,cats
dogs,[20,30],cats
dogs,[40,[50,60]],cats

I'm looking to validate input data (above) based on reg expression.
To verify legal input.
Ignore the dogs and cats, its just a filler

I currently have 3 different lines that I would like to combine
\d+,?
\[\d+,\d+\],?
[\d+,\[\d+,\d+\]\],?

Here is what I would like to do but regex coach isn't liking it
(\d+,?|\[\d+,\d+\],?|[\d+,\[\d+,\d+\]\],?)

Since the () allows for grouping, I was hoping the | would or it within 
the group.


------------------------------

Date: 10 Jan 2007 19:59:07 GMT
From: John Bokma <john@castleamber.com>
Subject: Re: regexp problem
Message-Id: <Xns98B48E42DAD15castleamber@130.133.1.4>

Billy Patton <bpatton@ti.com> wrote:

> I'm using regexp coach to assist me but more heads would be helpful
> 
> Here is a sample of the data
> 
> dogs,10,cats
> dogs,[20,30],cats
> dogs,[40,[50,60]],cats
> 
> I'm looking to validate input data (above) based on reg expression.
> To verify legal input.

Most of the time when input involves [] (or () or {}) that must match 
(balance) you want to step away from regex and use other options.

I probably would use Parse::RecDescent

-- 
John                Experienced Perl programmer: http://castleamber.com/

          Perl help, tutorials, and examples: http://johnbokma.com/perl/


------------------------------

Date: Wed, 10 Jan 2007 13:59:39 -0600
From: Billy Patton <bpatton@ti.com>
Subject: Re: regexp problem
Message-Id: <eo3gjb$ra4$1@home.itg.ti.com>

Billy Patton wrote:
> I'm using regexp coach to assist me but more heads would be helpful
> 
> Here is a sample of the data
> 
> dogs,10,cats
> dogs,[20,30],cats
> dogs,[40,[50,60]],cats
> 
> I'm looking to validate input data (above) based on reg expression.
> To verify legal input.
> Ignore the dogs and cats, its just a filler
> 
> I currently have 3 different lines that I would like to combine
> \d+,?
> \[\d+,\d+\],?
> [\d+,\[\d+,\d+\]\],?
> 
> Here is what I would like to do but regex coach isn't liking it
> (\d+,?|\[\d+,\d+\],?|[\d+,\[\d+,\d+\]\],?)
> 
> Since the () allows for grouping, I was hoping the | would or it within 
> the group.
Got it,
Had my data wrong in regex coach,  When i entered it in a perl script I 
got it working, then went back to regex coach and it worked then
Here's what I had.

$x = 'dogs,10,cats';
$y = 'dogs,[20,30],cats';
$z = 'dogs,[40,[50,60]],cats';
$x =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
print "$1\n";
$y =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
print "$1\n";
$z =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
print "$1\n";



------------------------------

Date: 10 Jan 2007 12:06:35 -0800
From: "DJ Stunks" <DJStunks@gmail.com>
Subject: Re: regexp problem
Message-Id: <1168459595.553569.296150@77g2000hsv.googlegroups.com>


Billy Patton wrote:
> Here is a sample of the data
>
> dogs,10,cats
> dogs,[20,30],cats
> dogs,[40,[50,60]],cats
>
> I'm looking to validate input data (above) based on reg expression.
> To verify legal input.
> Ignore the dogs and cats, its just a filler

If you're trying to validate, and you want any help at all, then you
need to tell us what input is valid (duh).  Maybe I'm just cranky
today, but it seems like common sense to include this kind of
information when posing a question like this.

does the input have to start with dogs?  does it have to end with cats?
do any numbers in between have to be two digits? do they have to be
multiples of 10?  do the square brackets have to be balanced? does
there have to be at least one two digit number? if there's more than
one number does it have to be bracketed? etcetera etcetera etcetera.

<rant>
sometimes I can't believe people that post questions here are
programmers.  programming means, in essence, a methodical, linear,
step-by-step approach to problem solving.  90% of the questions people
ask here are just nonsense and bely total disorganization.  I'm always
amazed that their scripts work at all.
</rant>

yep: cranky.  sorry(-ish).  hahaha

-jp



------------------------------

Date: Wed, 10 Jan 2007 14:36:15 -0600
From: Billy Patton <bpatton@ti.com>
To: DJ Stunks <DJStunks@gmail.com>
Subject: Re: regexp problem
Message-Id: <45A54E3F.7020808@ti.com>

DJ Stunks wrote:
> Billy Patton wrote:
>> Here is a sample of the data
>>
>> dogs,10,cats
>> dogs,[20,30],cats
>> dogs,[40,[50,60]],cats
>>
>> I'm looking to validate input data (above) based on reg expression.
>> To verify legal input.
>> Ignore the dogs and cats, its just a filler
> 
> If you're trying to validate, and you want any help at all, then you
> need to tell us what input is valid (duh).  Maybe I'm just cranky
> today, but it seems like common sense to include this kind of
> information when posing a question like this.
> 
> does the input have to start with dogs?  does it have to end with cats?
> do any numbers in between have to be two digits? do they have to be
> multiples of 10?  do the square brackets have to be balanced? does
> there have to be at least one two digit number? if there's more than
> one number does it have to be bracketed? etcetera etcetera etcetera.
> 
> <rant>
> sometimes I can't believe people that post questions here are
> programmers.  programming means, in essence, a methodical, linear,
> step-by-step approach to problem solving.  90% of the questions people
> ask here are just nonsense and bely total disorganization.  I'm always
> amazed that their scripts work at all.
> </rant>
> 
> yep: cranky.  sorry(-ish).  hahaha
> 
> -jp
> 

After typing blow, I noticed that i didn't include my regexp witht he 
question  :)  The mind sees what it wants:)
Well cranky :)
Most of the group wants a limited amount, reduced to the smallest amount 
of data.  That is what I provided, data and a regexp, not my validation 
routines and data.  Drastic overkill!  The problem resided with 
combining 3 regexp's into one.
I did solve the problem and the problem only consisted of the data 
between dogs and cats
The main problem was that I didn't know if I could the '|' working 
within the ().  I use the () for grouping not for capturing


------------------------------

Date: Wed, 10 Jan 2007 22:03:41 +0100
From: Mirco Wahab <wahab@chemie.uni-halle.de>
Subject: Re: regexp problem
Message-Id: <eo3kkl$t3h$1@mlucom4.urz.uni-halle.de>

Thus spoke Billy Patton (on 2007-01-10 20:59):

> Billy Patton wrote:
> Had my data wrong in regex coach,  When i entered it in a perl script I 
> got it working, then went back to regex coach and it worked then
> Here's what I had.
> 
> $x = 'dogs,10,cats';
> $y = 'dogs,[20,30],cats';
> $z = 'dogs,[40,[50,60]],cats';
> $x =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
> print "$1\n";
> $y =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
> print "$1\n";
> $z =~ /^dogs,(\d+,?|\[\d+,\d+\],?|\[\d+,\[\d+,\d+\]\],?),?/;
> print "$1\n";

OK, you could extend that to an arbitary number
of parentheses as far as they are balanced, like:

  my $x = 'dogs,10,cats';
  my $y = 'dogs,[20,30],cats';
  my $z = 'dogs,[40,[50,[20,30],60]],cats';

  my $rg;

  $rg = qr/\d+ |
            (?: (?> [^\[\]]+ | . ) | \[ (??{ $rg }) \] )*/xs;

  print "$1\n" if $x =~ /^dogs,(${rg}),cats$/;
  print "$1\n" if $y =~ /^dogs,(${rg}),cats$/;
  print "$1\n" if $z =~ /^dogs,(${rg}),cats$/;


Regards

M.


------------------------------

Date: Wed, 10 Jan 2007 14:59:02 -0600
From: Billy Patton <bpatton@ti.com>
Subject: using no strict "refs"
Message-Id: <eo3k2o$smf$1@home.itg.ti.com>

Here is a very small example of a larger amount of code.
use strict;
use warnings;
my $sub;

Pkg::a();
Pkg::b();
Pkg::c();

foreach $sub ( qw(a b c)) {
   no strict "refs";
   Pkg::${sub}();  <<<<< line 11
}


package Pkg;
use strict;
use warnings;
use Exporter;
sub a { print "a\n";}
sub b { print "b\n";}
sub c { print "c\n";}

In the real code a,b,c get called with data
I get the following after trying to execute:
Bad name after Pkg:: at x line 11.


------------------------------

Date: 10 Jan 2007 13:24:14 -0800
From: "Paul Lalli" <mritty@gmail.com>
Subject: Re: using no strict "refs"
Message-Id: <1168464254.126115.154620@p59g2000hsd.googlegroups.com>

Billy Patton wrote:
> Here is a very small example of a larger amount of code.
> use strict;
> use warnings;
> my $sub;
>
> Pkg::a();
> Pkg::b();
> Pkg::c();
>
> foreach $sub ( qw(a b c)) {
>    no strict "refs";
>    Pkg::${sub}();  <<<<< line 11
> }

You're trying to use a variable as a variable name (subroutines are
just another kind of variable, for our purposes here).  Please read:
`perldoc -q "variable name"`

The way to do what you're trying to do is: &{"Pkg::$sub"}();

The RIGHT way to do it is to use a hash, and not disable strict refs:

my %sub_named = (
                 a => \&Pkg::a,
                 b => \&Pkg::b,
                 c => \&Pkg::c
);

foreach $sub ( qw(a b c)) {
   $sub_named{$sub}->();
}


Paul Lalli



------------------------------

Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin) 
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>


Administrivia:

#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc.  For subscription or unsubscription requests, send
#the single line:
#
#	subscribe perl-users
#or:
#	unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.  

NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice. 

To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.

#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.

#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.


------------------------------
End of Perl-Users Digest V11 Issue 11
*************************************


home help back first fref pref prev next nref lref last post