[9583] in Perl-Users-Digest

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

Perl-Users Digest, Issue: 3177 Volume: 8

daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Thu Jul 16 13:11:16 1998

Date: Thu, 16 Jul 98 10:01:58 -0700
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)

Perl-Users Digest           Thu, 16 Jul 1998     Volume: 8 Number: 3177

Today's topics:
    Re: PROBLEM: Reading Speech File (Andrew M. Langmead)
    Re: PUZZLE: make hat, take ham <jbence@amgen.com>
    Re: real quick and easy - replace.... (Tad McClellan)
    Re: Recipient Validation <jdporter@min.net>
    Re: Recipient Validation (Larry Rosler)
    Re: Recipient Validation <aqumsieh@matrox.com>
    Re: RegExps: Check if string consists of EXACTLY 3 digi <*@qz.to>
    Re: Removing the ^M character (Sheppard)
    Re: Restricting refering domains access to script? (Steve Linberg)
        sending login/pass to httpd authentication via perl <alcazar@netcomp.net>
    Re: Sendmail ? <*@qz.to>
    Re: subnet broadcast & segment IP calculation <jdporter@min.net>
        Timeout on connect <andrel@gv-nmc.unisource.nl>
    Re: use strict abraham@mpi.com
    Re: What is awk better at than perl? (Larry quote) <jdporter@min.net>
    Re: What is awk better at than perl? (Larry quote) <uri@sysarch.com>
        Special: Digest Administrivia (Last modified: 12 Mar 98 (Perl-Users-Digest Admin)

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

Date: Thu, 16 Jul 1998 15:35:31 GMT
From: aml@world.std.com (Andrew M. Langmead)
Subject: Re: PROBLEM: Reading Speech File
Message-Id: <Ew71z7.Fwo@world.std.com>

Masoud Ahmadi <M.Ahmadi@nortel.co.uk> writes:

>I am trying to read some speech files with 16-bit samples stored in the
>binary file.  I would like to know how can I read individual sample of
>2-bytes, and how can I then write them into another file with similar
>format.  


It would be helpful for people trying to answer your question if you
mentioned the file format (if it is a standard format) or details of
the format. For the information that you gave, the only info you gave
(that each sample is two bytes) the only thing that I can suggest is:

while(read SOUNDFILE, $buffer,, 2) { # read two bytes.
  $sample = unpack 'S', $buffer;     # convert it to its numeric value.
  # do something with the sample....
}


>I have used sysread/syswrite but these wouldn't let me read individual
>samples.

sysread() and syswrite() are probably not useful here. Their big
advantage is to bypass stdio buffering. They do not modify the data
stream in any way. 

sysread(0 and syswrite() correspond to the Unix system calls read()
and write(). If you are curious at all about buffered vs. unbuffered
I/O calls, you may want to take a look at the book "Advanced Unx
Programming", by W R Stevens.

<URL:http://cseng.aw.com/bookdetail.qry?ISBN=0-201-56317-7&ptype=1090>

-- 
Andrew Langmead


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

Date: Thu, 16 Jul 1998 09:12:34 -0700
From: "James K. Bence" <jbence@amgen.com>
Subject: Re: PUZZLE: make hat, take ham
Message-Id: <35AE2670.6B42@amgen.com>

#!/usr/bin/perl
# takeham - attempt to solve PUZZLE: take ham - make hat
# Author: jbence@amgen.com

# Crude timings, words taken from /usr/dict/words and other files.  I
could
#     not acquire more words for testing.
# TIME: 11 seconds on 32,113 words.
# TIME:  8 seconds on 25,143 words.
# TIME:  2 seconds on 12,571 words.
#
# Assumptions:
#     1) In "Xaaa bbbY" and "Yaaa bbbX", (X ne Y);
#     2) Words are 2 or more characters.
#
# Idea:  @{$suffixes{"mt"}} = ("ake", "om");
#        @{$prefixes{"mt"}} = ("ha", "ra");
# ==>
#        make hat     take ham
#        make rat     take ram
#        mom  hat     tom  ham
#        mom  rat     tom  ram
#
# 1. Foreach suffix string, make array of letters which can go in front.
#    Foreach prefix string, make array of letters which can go in back.
#
# 2. Discard any prefix/suffix for which array does not contain >= 2
letters;
#
# 3. Foreach suffix string, create all distinct pairs of letters which
can
#        go in front.  Foreach pair, build an array of suffixes.
#    Foreach prefix string, create all distinct pairs of letters which
can
#        go in back.   Foreach pair, build an array of prefixes.
#
# 4. Foreach distinct pair of letters with which an array of suffixes is
#        associated, check if any prefixes are also associated.  If so,
#        print out the possible combinations.

use strict;

my %seen;
my ($head , $tail );
my (%heads, %tails);    # keys are suffixes/prefixes, values are ARRAY
refs.

while (<>) {
    chomp;
    next if length($_) <= 1;
    next if $seen{$_};

    $seen{$_} ++;

    ($head, $tail) = /^(.)(.+)$/;
    push (@{$heads{$tail}}, $head);

    $tail = chop;
    push (@{$tails{$_}}, $tail);
}

my $discards;

$discards = ignorable(\%heads);
delete (@heads{ @$discards });

$discards = ignorable(\%tails);
delete (@tails{ @$discards });

my $prefixes = &make_arrays_for_labels(\%tails);
my $suffixes = &make_arrays_for_labels(\%heads);

my ($i, $j, $X, $Y);
my $label;             # a two letter string
my $aaabbb;
foreach $label (keys(%$prefixes)) {
    if (exists($suffixes->{$label})) {
        ($X,$Y) = $label =~ /(.)(.)/;
        for ($i=0; $i < @{$suffixes->{$label}}; $i++) {
            for ($j=0; $j < @{$prefixes->{$label}}; $j++) {
                $aaabbb = join (" ", $suffixes->{$label}->[$i],
                                     $prefixes->{$label}->[$j]);
                print "$X$aaabbb$Y   $Y$aaabbb$X\n";
            }
        }
    }
}

exit (0);


sub ignorable {
    my $letters = shift;
    my @discards;
    my $stub;

    foreach $stub (keys (%$letters)) {
        push (@discards, $stub) if @{$letters->{$stub}} <= 1;
    }
    return (\@discards);
}


sub make_arrays_for_labels {
    my $letters = shift;
    my %stubs;         # return this
    my $stub;          # part of a word:  "ome" for "home", or "tw" for
"two"
    my $count;         # number of letters that fit on one end of a
$stub
    my $i;
    my $j;

    foreach $stub (keys(%$letters)) {
        # use "ab", not "ba" below
        @{$letters->{$stub}} = sort @{$letters->{$stub}};

        $count = @{$letters->{$stub}};
        for ($i=0; $i < $count; $i++) {
            for ($j=$i+1; $j < $count; $j++) {
                $label = $letters->{$stub}->[$i] .
$letters->{$stub}->[$j];
                push (@{$stubs{$label}}, $stub);
            }
        }
    }
    return (\%stubs);
}


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

Date: Thu, 16 Jul 1998 08:06:50 -0500
From: tadmc@flash.net (Tad McClellan)
Subject: Re: real quick and easy - replace....
Message-Id: <attko6.ic3.ln@localhost>

joe (joe@rhein.to) wrote:
: Hello what is the function for replacing characters in a string... I cant


   tr///;  # documented in the 'perlop' man page


: find anything on this in my "learning perl book"


   You got taken by buying that book. Go get one published by O'Reilly...


--
    Tad McClellan                          SGML Consulting
    tadmc@metronet.com                     Perl programming
    Fort Worth, Texas


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

Date: Thu, 16 Jul 1998 15:10:08 GMT
From: John Porter <jdporter@min.net>
Subject: Re: Recipient Validation
Message-Id: <35AE196D.30B@min.net>

Eli the Bearded wrote:
> 
> In alt.fan.e-t-b, brian d foy <comdog@computerdog.com> wrote:
> > "H.P. Buerki" <webmaster@mediapromotion.ch> posted:
> > >You better don't write something than these!
> 
> I cannot parse this sentence.

I can parse it o.k.; I just give a fatal syntax error.
After all, I'm highly context-sensitive.

-- 
John Porter

We have enough youth, how about a fountain of smart?


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

Date: Thu, 16 Jul 1998 08:23:30 -0700
From: lr@hpl.hp.com (Larry Rosler)
Subject: Re: Recipient Validation
Message-Id: <MPG.1017bad0682bc84e98974e@nntp.hpl.hp.com>

[This followup was posted to comp.lang.perl.misc and a copy was sent to 
the cited author.]

In article <35AE196D.30B@min.net> on Thu, 16 Jul 1998 15:10:08 GMT, John 
Porter <jdporter@min.net> says...
> Eli the Bearded wrote:
> > 
> > In alt.fan.e-t-b, brian d foy <comdog@computerdog.com> wrote:
> > > "H.P. Buerki" <webmaster@mediapromotion.ch> posted:
> > > >You better don't write something than these!
> > 
> > I cannot parse this sentence.
> 
> I can parse it o.k.; I just give a fatal syntax error.
> After all, I'm highly context-sensitive.

Don't we have better use of bandwidth here that to continue to mock a 
Swiss person's English syntax?  I'd hate to have someone mock my 
French/German/Italian/Romansch, which are the other languages the Swiss 
have to deal with.

Let's just focus on the fatal semantic errors in this person's views, not 
the faulty English syntax!

-- 
Larry Rosler
Hewlett-Packard Laboratories
http://www.hpl.hp.com/personal/Larry_Rosler/
lr@hpl.hp.com


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

Date: Thu, 16 Jul 1998 11:08:45 -0400
From: Ala Qumsieh <aqumsieh@matrox.com>
Subject: Re: Recipient Validation
Message-Id: <35AE177D.B8547F62@matrox.com>

H.P. Buerki wrote:
> 
> Hi
> 
> how i can make for sure, that the Recipient Addresses are valid on the
> Remote Server before i will send an E-Mail.
> 
> Does somebody have a Perl or something like that Script, that can make
> Address checks on Remote Sites and gives a 0 if invalid and a 1 if the
> Address is valid?
> 
> Thanks in advance

Had you browsed through perlfaq9, you would've found the following:

     How do I check a valid email address?
 
     You can't.

     Without sending mail to the address and seeing whether it
     bounces (and even then you face the halting problem), you
     cannot determine whether an email address is valid.  Even if
     you apply the email header standard, you can have problems,
     because there are deliverable addresses that aren't RFC-822
     (the mail header standard) compliant, and addresses that
     aren't deliverable which are compliant.

There is more to the answer ... go check it out.

-- 
Ala Qumsieh             |  No .. not Just Another
ASIC Design Engineer    |  Perl Hacker!!!!!
Matrox Graphics Inc.    |
Montreal, Quebec        |  (Not yet!)


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

Date: 16 Jul 1998 15:19:02 GMT
From: Eli the Bearded <*@qz.to>
Subject: Re: RegExps: Check if string consists of EXACTLY 3 digits ??
Message-Id: <eli$9807161110@qz.little-neck.ny.us>
Keywords: from just another new york perl hacker

There was a challenge:
> >> >  perl -w -e '$a = "zaped\n"; $a =~ s/[a-z]*?(.)$/$1/; print length($a);'
> >> >Can you explain the result?

brian d foy wrote:
> >> the result is 2.  the dot does not match newlines unless you use
> >> the /s modifier.  the dot matches the d, which is replaced by itself,
> >> and the newline is left as is, leaving a string of length 2.

Martin Gregory <mgregory@asc.sps.mot.com> replied:
> >Yeah - that's funny!  You are obviously the regex guru - the rest of
> >us are wallowing in our misconceptions!  So
> > perl -w -e '$a = "zaped\n"; $a =~ s/[a-z]*?(.)$/$1/s; print length($a);
> >also gives length two, and I guess illustrates my point better!  (The

brian d foy continued:
> after thinking about this, i wonder if this is a bug.  the $ assertion
> is documented to match at the "end of the string" or "before the
> newline".  it seems that the actual behaviour is "before any
> new line if there is one" since the "end of string" certainly
> doesn't make sense here.
> 
> the /s modifier allows the . to match newlines and documents
> no exception for the end of the string assertion.  if it can
> really match any character, as documented, why can't you
> match the very last character with it.

This is not a bug. It is a precedence issue. With /s the . can
match \n, but since you have minimal matching on the character
class, the $ will match before the \n and the (.) will grab the
"d". This is yet another case of minimal matching being highly
confusing.

Elijah
------
tries to avoid minimal matching in all his REs


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

Date: Thu, 16 Jul 1998 16:33:49 GMT
From: xie@netcom.com (Sheppard)
Subject: Re: Removing the ^M character
Message-Id: <xieEw74oD.BFy@netcom.com>

Dave Duchscher (daved@orion.tamu.edu) wrote:

: Not a DOS expert, but don't DOS files end in ^M (CR) not ^M^J (CR LF)
: so the first removes all line termination and the second never
: matches.

DOS lines end with 0x0d 0x0a, UNIX lines end with 0x0a

a solution might be:

   $newline            = pack("C",0x0A);        # unix newline character
   local($dos_newline) = pack("CC",0x0D,0x0A);  # dos newline character

   $line =~ s/$dos_newline/$newline/go;  # exchange newlines




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

Date: Thu, 16 Jul 1998 13:00:33 -0400
From: linberg@literacy.upenn.edu (Steve Linberg)
Subject: Re: Restricting refering domains access to script?
Message-Id: <linberg-1607981300330001@projdirc.literacy.upenn.edu>

In article <6ol1eo$8bc$1@news.iastate.edu>, kortbein@iastate.edu (Josh
Kortbein) wrote:

> Abigail (abigail@fnx.com) wrote:
> 
> : Ob Puzzle: Name 3 cases where there is no sensible REFERER to send
> :            for a browser.
> 
> Offhand, two of them seem to be
> 
> 1) when the default home page is loaded
> 2) when a URL is typed into the "Location" widget

3) When a bookmark is used
4) When a URL is passed as a parameter to a browser
_____________________________________________________________________
Steve Linberg                       National Center on Adult Literacy
Systems Programmer &c.                     University of Pennsylvania
linberg@literacy.upenn.edu              http://www.literacyonline.org


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

Date: Thu, 16 Jul 1998 10:07:34 -0500
From: "Ric Alcazar" <alcazar@netcomp.net>
Subject: sending login/pass to httpd authentication via perl
Message-Id: <uskKctMs9GA.192@upnetnews03>

    Hello all,

    I have some subdirectories password protected via basic httpd auth.
scheme.  Like any files protected by this, when you load the page it prompts
you for a login and password in the auth. box.  However, is there anyway
that I could send this information to the auth. scheme via perl script to
that this login/pass dialog box DOESN'T need to be displayed?

    What I'm trying to do is the create a html page that has form
input="text/password" fields, sumbit that to .pl script and authorize user
bypassing the standard means of user authentication via dialog box.  Can
someone help point me the right direction?

    Ric.




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

Date: 16 Jul 1998 15:53:53 GMT
From: Eli the Bearded <*@qz.to>
Subject: Re: Sendmail ?
Message-Id: <eli$9807161137@qz.little-neck.ny.us>

In comp.lang.perl.misc, - <root.noharvest.\@not_even\here.com> wrote:
> Zenin <zenin@bawdycaste.org> Said this:
> >	And who in there right mind does. :-)
> But vi is great... you just need to know how to use it, I suppose.  Of

Zenin is arguing that plain vi is obsolete and that for vi style
editing you should use one of the newer clones. There is some
merit to this argument.

> course, I'm the antithesis of the typical computer user... I prefer
> less bells, less whistles, and no extras popping up every time I try
> to do something.

You want ed(1). ed(1) is the standard editor.

> I know... I know... everyone knocks vi, but for a quick edit of a
> script, you can't beat it. 
> 
>  vi filename [enter]  [esc] : 100 [enter] d d a <new line typed in>
> [esc] : w q [enter]  DONE!

This is fewer keystrokes:

   vi filename [enter] 100 G c c <new line typed in> [esc] Z Z

This is the same thing in ed (one more keystroke):

   ed filename [enter] 100 c <new line typed in> . [enter] w [enter] q [enter]

This is vim with no interactive editing required:

   vim +'100|norm cc <new line typed in>[ctrl-v][esc]ZZ' filename [enter]

And a perl solution:

   perl -i -pe's/.*/<new line typed in>/ if$.==100' filename [enter]

Elijah
------
not going to give an answer with sed


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

Date: Thu, 16 Jul 1998 15:30:37 GMT
From: John Porter <jdporter@min.net>
Subject: Re: subnet broadcast & segment IP calculation
Message-Id: <35AE1E38.596B@min.net>

jean-sebastien@jazzmail.com wrote:
> 
> ... return the Subnet and Broadcast IPs based on Host and Netmask IPs.
> 
> ie:
>     input: host 10.0.0.5, netmask 255.255.255.252
>     ouput: subnet 10.0.0.4, broadcast 10.0.0.7

Here's a little code to do what you want.
Call the subnet_and_broadcast() subroutine.

# convert dotted-quad notation to an integer:
sub ip_to_num {
  return undef if $_[0] =~ /[^0-9.]/;
  my @a = split /\./, $_[0];
  my $n = pop @a;
  return undef unless $n < (256 ** ( 4 - @a ));
  for ( 0..$#a ) {
    return undef unless $a[$_] < 256;
    $n += ( $a[$_] << (8*(3-$_)) );
  }
  $n;
}

# convert an integer to dotted-quad notation:
sub num_to_dotted_quad {
  my $num = shift;
  my @a = ();
  while ( $num ) {
    unshift @a, sprintf("%d", $num & 0xFF );
    $num >>= 8;
  }
  join '.', @a;
}

#
# given host and netmask addresses (in dotted-quad notation),
# return the subnet and broadcast addresses (also dotted-quad).
#
sub subnet_and_broadcast {
  my( $host_ip, $netmask_ip ) = @_;
  my $host = ip_to_num( $host_ip );
  my $netmask = ip_to_num( $netmask_ip );

  map { num_to_dotted_quad($_) } (
    $host & $netmask,      # the subnet address
    $host | ($netmask^-1)  # the broadcast address
  );
}

#
# test the subnet_and_broadcast() routine:
#
my $host = '10.0.0.5';
my $netmask = '255.255.255.252';
my( $subnet, $broadcast ) = subnet_and_broadcast( $host, $netmask );


-- 
John Porter

We have enough youth, how about a fountain of smart?


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

Date: Thu, 16 Jul 1998 17:14:29 +0200
From: Andre van der Lans <andrel@gv-nmc.unisource.nl>
Subject: Timeout on connect
Message-Id: <35AE18D2.ECA7813B@gv-nmc.unisource.nl>

Hi,

I want to check if host ports are reachable through a firewall. For this
reason I want to configure a timeout on the connect function call,
because the firewall blocks the packages but I don't know how to do it.

Here's the source code:


#!/usr/bin/perl -w

use Socket;
use Getopt::Long;

$proto = getprotobyname( 'tcp' );
$remote = 'brutus';
$iaddr = inet_aton( $remote );

for ($port = 0; $port <= 100; $port++ ) {
   print "\nPort $port: ";
   $paddr = sockaddr_in( $port, $iaddr );
   if( !socket( S, PF_INET, SOCK_STREAM, $proto ) ) {
        print "if statement 1 ";
        print "socket: $!";
   }
   if( !connect( S, $paddr ) ) {
        print "if statement 2 ";
        print "$!";
   }
   else {
      print " >>> Connection established <<< ";
   }
   close( S );
}

Regards, Dre



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

Date: Thu, 16 Jul 1998 16:30:49 GMT
From: abraham@mpi.com
To: gil_brown@hp.com
Subject: Re: use strict
Message-Id: <6ol9rq$urh$1@nnrp1.dejanews.com>

In article <6oio53$gbn$1@ocean.cup.hp.com>,
  "Gil Brown" <gil_brown@hp.com> wrote:
> I trying to learn perl5 (I've only written stuff in 4 so far) and I am
> having a problem with use strict. All I want to do is read from a file
> (simple enough) and when I uncomment use strict nothing works and it does
> when I comment it. This is the example I am referring to:
>
> #! /usr/bin/perl -w
> ######################
> #
> #
> #use strict;
> use FileHandle;
>
> my $fh = new FileHandle; # Create local filehandle
> open ($fh, "/home/gbrown/test/lolo") || die $!;
> $line = <$fh>;
> print "$line\n";
> while ($line ne "")
> {
>         print "$line\n";
>         $line = <$fh>;
> }
>
> Thank you for your help!
>
> P.S. This is the error message I get when I use use strict
>
> # ./test
> Global symbol "line" requires explicit package name at ./test line 10.
> Execution of ./test aborted due to compilation errors.
>
>

Change $line to my $line or $main::line and you'll be ok.

P.S. Why are you using strict if you don't know what it does?

Jim Abraham

-----== Posted via Deja News, The Leader in Internet Discussion ==-----
http://www.dejanews.com/rg_mkgrp.xp   Create Your Own Free Member Forum


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

Date: Thu, 16 Jul 1998 15:46:55 GMT
From: John Porter <jdporter@min.net>
Subject: Re: What is awk better at than perl? (Larry quote)
Message-Id: <35AE220B.285D@min.net>

Brock Sides wrote:
> 
> So what is it that awk is (or was) better at?

One thing is that in awk, the input record separator can
be a regular expression.
I sure wish Perl had this.

-- 
John Porter

We have enough youth, how about a fountain of smart?


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

Date: 16 Jul 1998 12:50:24 -0400
From: Uri Guttman <uri@sysarch.com>
To: jdporter@min.net
Subject: Re: What is awk better at than perl? (Larry quote)
Message-Id: <x7yattn3jj.fsf@sysarch.com>

>>>>> "JP" == John Porter <jdporter@min.net> writes:

  JP> Brock Sides wrote:
  >>  So what is it that awk is (or was) better at?

  JP> One thing is that in awk, the input record separator can be a
  JP> regular expression.  I sure wish Perl had this.

john,

this wish has been discussed before. since perl's re can do so many
powerful things, it can lead into deep re recursion that will not return
in your lifetime. having an re as the IRS doesn't do any good then. just
read the file in as a string and split it on the re if you want. the IRS
is meant to be fast and simple for most cases, not powerful and slower
for some.

uri

-- 
Uri Guttman  -----------------  SYStems ARCHitecture and Software Engineering
Perl Hacker for Hire  ----------------------  Perl, Internet, UNIX Consulting
uri@sysarch.com  ------------------------------------  http://www.sysarch.com
The Best Search Engine on the Net -------------  http://www.northernlight.com


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

Date: 12 Jul 98 21:33:47 GMT (Last modified)
From: Perl-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin) 
Subject: Special: Digest Administrivia (Last modified: 12 Mar 98)
Message-Id: <null>


Administrivia:

Special notice: in a few days, the new group comp.lang.perl.moderated
should be formed. I would rather not support two different groups, and I
know of no other plans to create a digested moderated group. This leaves
me with two options: 1) keep on with this group 2) change to the
moderated one.

If you have opinions on this, send them to
perl-users-request@ruby.oce.orst.edu. 


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.  

To submit articles to comp.lang.perl.misc (and this Digest), send your
article to perl-users@ruby.oce.orst.edu.

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.

The Meta-FAQ, an article containing information about the FAQ, is
available by requesting "send perl-users meta-faq". The real FAQ, as it
appeared last in the newsgroup, can be retrieved with the request "send
perl-users FAQ". Due to their sizes, neither the Meta-FAQ nor the FAQ
are included in the digest.

The "mini-FAQ", which is an updated version of the Meta-FAQ, is
available by requesting "send perl-users mini-faq". It appears twice
weekly in the group, but is not distributed in the digest.

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 V8 Issue 3177
**************************************

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