psql: \pset pager 'always'?

Started by Antti Haapalaover 23 years ago10 messagesgeneral
Jump to latest
#1Antti Haapala
antti.haapala@iki.fi

I don't know if this is already done, but...

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice. Or do you consider this being readable (copyed
verbatim from terminal window):

template1=# select * from pg_class limit 1;
relname | reltype | relowner | relam | relfilenode | relpages | reltuples |
reltoastrelid | reltoastidxid | relhasindex | relisshared | relkind |
relnatts | relchecks | reltriggers | relukeys | relfkeys | relrefs |
relhasoids | relhaspkey | relhasrules | relhassubclass | relacl
----------------------+---------+----------+-------+-------------+----------+-----------+---------------+---------------+-------------+-------------+---------+----------+-----------+-------------+----------+----------+---------+------------+------------+-
------------+----------------+--------

pg_type | 71 | 1 | 0 | 1247 |
2 |
143 | 0 | 0 | t | f
| r |
17 | 0 | 0 | 0 | 0 | 0
| t

Until that I need to avoid queries with too _few_ resulting rows in psql.
;-) (select * from pg_class works brilliantly).

--
Antti Haapala

#2Greg Sabino Mullane
greg@turnstep.com
In reply to: Antti Haapala (#1)
Re: psql: \pset pager 'always'?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NotDashEscaped: You need GnuPG to verify this message

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice.

Not a bad idea. Here is a patch that does just that, while maintaining the
"traditional" behavior, so the change should be transparent. Use the
command "\pset pager always" to turn it on. Anything else does the
normal toggle between "on" and "off"

Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200209111525

Index: command.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/command.c,v
retrieving revision 1.80
diff -c -r1.80 command.c
*** command.c	2002/09/04 20:31:35	1.80
--- command.c	2002/09/11 19:24:41
***************
*** 1867,1877 ****
  	/* toggle use of pager */
  	else if (strcmp(param, "pager") == 0)
  	{
! 		popt->topt.pager = !popt->topt.pager;
  		if (!quiet)
  		{
! 			if (popt->topt.pager)
  				puts(gettext("Using pager is on."));
  			else
  				puts(gettext("Using pager is off."));
  		}
--- 1867,1884 ----
  	/* toggle use of pager */
  	else if (strcmp(param, "pager") == 0)
  	{
! 		if (strcasecmp(value, "always") == 0)
! 				popt->topt.pager = 2;
! 		else if (popt->topt.pager == 1)
! 				popt->topt.pager = 0;
! 		else
! 				popt->topt.pager = 1;
  		if (!quiet)
  		{
! 			if (popt->topt.pager == 1)
  				puts(gettext("Using pager is on."));
+ 			else if (popt->topt.pager == 2)
+ 				puts(gettext("Using pager is always."));
  			else
  				puts(gettext("Using pager is off."));
  		}
Index: help.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.c,v
retrieving revision 1.56
diff -c -r1.56 help.c
*** help.c	2002/09/04 20:31:35	1.56
--- help.c	2002/09/11 19:24:41
***************
*** 159,165 ****
  #endif
  void
! slashUsage(bool pager)
  {
  	FILE	   *output,
  			   *pagerfd = NULL;
--- 159,165 ----
  #endif

void
! slashUsage(unsigned small int pager)
{
FILE *output,
*pagerfd = NULL;
***************
*** 180,186 ****
struct winsize screen_size;

  		result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || 50 > screen_size.ws_row)
  		{
  #endif
  			pagerprog = getenv("PAGER");
--- 180,186 ----
  		struct winsize screen_size;
  		result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || 50 > screen_size.ws_row || pager == 2)
  		{
  #endif
  			pagerprog = getenv("PAGER");
Index: help.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.h,v
retrieving revision 1.9
diff -c -r1.9 help.h
*** help.h	2002/07/15 01:56:25	1.9
--- help.h	2002/09/11 19:24:41
***************
*** 10,16 ****

void usage(void);

! void slashUsage(bool pager);

void helpSQL(const char *topic);

--- 10,16 ----

void usage(void);

! void slashUsage(unsigned small int pager);

void helpSQL(const char *topic);

Index: print.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.c,v
retrieving revision 1.31
diff -c -r1.31 print.c
*** print.c	2002/09/01 23:30:46	1.31
--- print.c	2002/09/11 19:24:41
***************
*** 1022,1028 ****
  				lines++;
  		result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || lines > screen_size.ws_row)
  		{
  #endif
  			pagerprog = getenv("PAGER");
--- 1022,1028 ----
  				lines++;
  		result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || lines > screen_size.ws_row || opt->pager == 2)
  		{
  #endif
  			pagerprog = getenv("PAGER");
Index: print.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.h,v
retrieving revision 1.14
diff -c -r1.14 print.h
*** print.h	2002/09/04 20:31:36	1.14
--- print.h	2002/09/11 19:24:41
***************
*** 26,33 ****
  	enum printFormat format;	/* one of the above */
  	bool		expanded;		/* expanded/vertical output (if supported
  								 * by output format) */
! 	bool		pager;			/* use pager for output (if to stdout and
! 								 * stdout is a tty) */
  	bool		tuples_only;	/* don't output headers, row counts, etc. */
  	unsigned short int border;	/* Print a border around the table.
  								 * 0=none, 1=dividing lines, 2=full */
--- 26,34 ----
  	enum printFormat format;	/* one of the above */
  	bool		expanded;		/* expanded/vertical output (if supported
  								 * by output format) */
! 	unsigned short int pager;	/* use pager for output (if to stdout and
! 								 * stdout is a tty)
!  								 * 0=off 1=on 2=always */
  	bool		tuples_only;	/* don't output headers, row counts, etc. */
  	unsigned short int border;	/* Print a border around the table.
  								 * 0=none, 1=dividing lines, 2=full */
Index: startup.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.66
diff -c -r1.66 startup.c
*** startup.c	2002/09/06 02:33:47	1.66
--- startup.c	2002/09/11 19:24:41
***************
*** 137,143 ****
  	pset.popt.topt.format = PRINT_ALIGNED;
  	pset.queryFout = stdout;
  	pset.popt.topt.border = 1;
! 	pset.popt.topt.pager = true;
  	pset.popt.default_footer = true;
  	SetVariable(pset.vars, "VERSION", PG_VERSION_STR);
--- 137,143 ----
  	pset.popt.topt.format = PRINT_ALIGNED;
  	pset.queryFout = stdout;
  	pset.popt.topt.border = 1;
! 	pset.popt.topt.pager = 1;
  	pset.popt.default_footer = true;

SetVariable(pset.vars, "VERSION", PG_VERSION_STR);

-----BEGIN PGP SIGNATURE-----
Comment: http://www.turnstep.com/pgp.html

iD8DBQE9f5klvJuQZxSWSsgRAuFGAJwNsHiudvGq+Xq8WpQO4bSrd+QUtwCgo1lB
iolPoprltuDfsb4YSjAHHs4=
=5Kt2
-----END PGP SIGNATURE-----

#3Justin Hawkins
justin@internode.com.au
In reply to: Antti Haapala (#1)
Re: psql: \pset pager 'always'?

antti.haapala@iki.fi (Antti Haapala) writes:

I don't know if this is already done, but...

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice. Or do you consider this being readable (copyed
verbatim from terminal window):

Yes, I'd like to second that.

My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.

- Justin

--
Justin Hawkins
Internode Professional Access

#4Bruce Momjian
bruce@momjian.us
In reply to: Greg Sabino Mullane (#2)
Re: psql: \pset pager 'always'?

This has been saved for the 7.4 release:

http://candle.pha.pa.us/cgi-bin/pgpatches2

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

greg@turnstep.com wrote:
[ There is text before PGP section. ]

[ PGP not available, raw data follows ]

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
NotDashEscaped: You need GnuPG to verify this message

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice.

Not a bad idea. Here is a patch that does just that, while maintaining the
"traditional" behavior, so the change should be transparent. Use the
command "\pset pager always" to turn it on. Anything else does the
normal toggle between "on" and "off"

Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200209111525

Index: command.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/command.c,v
retrieving revision 1.80
diff -c -r1.80 command.c
*** command.c	2002/09/04 20:31:35	1.80
--- command.c	2002/09/11 19:24:41
***************
*** 1867,1877 ****
/* toggle use of pager */
else if (strcmp(param, "pager") == 0)
{
! 		popt->topt.pager = !popt->topt.pager;
if (!quiet)
{
! 			if (popt->topt.pager)
puts(gettext("Using pager is on."));
else
puts(gettext("Using pager is off."));
}
--- 1867,1884 ----
/* toggle use of pager */
else if (strcmp(param, "pager") == 0)
{
! 		if (strcasecmp(value, "always") == 0)
! 				popt->topt.pager = 2;
! 		else if (popt->topt.pager == 1)
! 				popt->topt.pager = 0;
! 		else
! 				popt->topt.pager = 1;
if (!quiet)
{
! 			if (popt->topt.pager == 1)
puts(gettext("Using pager is on."));
+ 			else if (popt->topt.pager == 2)
+ 				puts(gettext("Using pager is always."));
else
puts(gettext("Using pager is off."));
}
Index: help.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.c,v
retrieving revision 1.56
diff -c -r1.56 help.c
*** help.c	2002/09/04 20:31:35	1.56
--- help.c	2002/09/11 19:24:41
***************
*** 159,165 ****
#endif
void
! slashUsage(bool pager)
{
FILE	   *output,
*pagerfd = NULL;
--- 159,165 ----
#endif

void
! slashUsage(unsigned small int pager)
{
FILE *output,
*pagerfd = NULL;
***************
*** 180,186 ****
struct winsize screen_size;

result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || 50 > screen_size.ws_row)
{
#endif
pagerprog = getenv("PAGER");
--- 180,186 ----
struct winsize screen_size;
result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || 50 > screen_size.ws_row || pager == 2)
{
#endif
pagerprog = getenv("PAGER");
Index: help.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/help.h,v
retrieving revision 1.9
diff -c -r1.9 help.h
*** help.h	2002/07/15 01:56:25	1.9
--- help.h	2002/09/11 19:24:41
***************
*** 10,16 ****

void usage(void);

! void slashUsage(bool pager);

void helpSQL(const char *topic);

--- 10,16 ----

void usage(void);

! void slashUsage(unsigned small int pager);

void helpSQL(const char *topic);

Index: print.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.c,v
retrieving revision 1.31
diff -c -r1.31 print.c
*** print.c	2002/09/01 23:30:46	1.31
--- print.c	2002/09/11 19:24:41
***************
*** 1022,1028 ****
lines++;
result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || lines > screen_size.ws_row)
{
#endif
pagerprog = getenv("PAGER");
--- 1022,1028 ----
lines++;
result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
! 		if (result == -1 || lines > screen_size.ws_row || opt->pager == 2)
{
#endif
pagerprog = getenv("PAGER");
Index: print.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/print.h,v
retrieving revision 1.14
diff -c -r1.14 print.h
*** print.h	2002/09/04 20:31:36	1.14
--- print.h	2002/09/11 19:24:41
***************
*** 26,33 ****
enum printFormat format;	/* one of the above */
bool		expanded;		/* expanded/vertical output (if supported
* by output format) */
! 	bool		pager;			/* use pager for output (if to stdout and
! 								 * stdout is a tty) */
bool		tuples_only;	/* don't output headers, row counts, etc. */
unsigned short int border;	/* Print a border around the table.
* 0=none, 1=dividing lines, 2=full */
--- 26,34 ----
enum printFormat format;	/* one of the above */
bool		expanded;		/* expanded/vertical output (if supported
* by output format) */
! 	unsigned short int pager;	/* use pager for output (if to stdout and
! 								 * stdout is a tty)
!  								 * 0=off 1=on 2=always */
bool		tuples_only;	/* don't output headers, row counts, etc. */
unsigned short int border;	/* Print a border around the table.
* 0=none, 1=dividing lines, 2=full */
Index: startup.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.66
diff -c -r1.66 startup.c
*** startup.c	2002/09/06 02:33:47	1.66
--- startup.c	2002/09/11 19:24:41
***************
*** 137,143 ****
pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout;
pset.popt.topt.border = 1;
! 	pset.popt.topt.pager = true;
pset.popt.default_footer = true;
SetVariable(pset.vars, "VERSION", PG_VERSION_STR);
--- 137,143 ----
pset.popt.topt.format = PRINT_ALIGNED;
pset.queryFout = stdout;
pset.popt.topt.border = 1;
! 	pset.popt.topt.pager = 1;
pset.popt.default_footer = true;

SetVariable(pset.vars, "VERSION", PG_VERSION_STR);

-----BEGIN PGP SIGNATURE-----
Comment: http://www.turnstep.com/pgp.html

iD8DBQE9f5klvJuQZxSWSsgRAuFGAJwNsHiudvGq+Xq8WpQO4bSrd+QUtwCgo1lB
iolPoprltuDfsb4YSjAHHs4=
=5Kt2
-----END PGP SIGNATURE-----

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

[ Decrypting message... End of raw data. ]

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#5Martijn van Oosterhout
kleptog@svana.org
In reply to: Justin Hawkins (#3)
Re: psql: \pset pager 'always'?

On Thu, Sep 12, 2002 at 10:20:45AM +0930, Justin Hawkins wrote:

antti.haapala@iki.fi (Antti Haapala) writes:

I don't know if this is already done, but...

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice. Or do you consider this being readable (copyed
verbatim from terminal window):

Yes, I'd like to second that.

My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.

Remember, you can always use \g like this:

select * from table \g |less -S

Maybe not neat, but very effective.
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.

#6Bruce Momjian
bruce@momjian.us
In reply to: Martijn van Oosterhout (#5)
Re: psql: \pset pager 'always'?

Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.

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

Martijn van Oosterhout wrote:

On Thu, Sep 12, 2002 at 10:20:45AM +0930, Justin Hawkins wrote:

antti.haapala@iki.fi (Antti Haapala) writes:

I don't know if this is already done, but...

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice. Or do you consider this being readable (copyed
verbatim from terminal window):

Yes, I'd like to second that.

My ugly workaround when I need to have less invoked (so I can scroll
sideways) and the result set it small (in rows), I make my window very
small (vertically), run the query, then stretch it out again.

Remember, you can always use \g like this:

select * from table \g |less -S

Maybe not neat, but very effective.
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#7Greg Sabino Mullane
greg@turnstep.com
In reply to: Bruce Momjian (#6)
Re: psql: \pset pager 'always'?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.

Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.

Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200209180926

-----BEGIN PGP SIGNATURE-----

iD8DBQE9iID8vJuQZxSWSsgRAk2mAKDRRopF9H7PMW18+qq5WgPHRiga/QCcCG2e
G/ZxYw5fqwGxov9hVd+mhV0=
=9nqS
-----END PGP SIGNATURE-----

#8Martijn van Oosterhout
kleptog@svana.org
In reply to: Greg Sabino Mullane (#7)
Re: psql: \pset pager 'always'?

On Wed, Sep 18, 2002 at 01:40:42PM -0000, greg@turnstep.com wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.

Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.

While this is true, if you do a select whose output wraps because it is too
wide, getting it to go through "less -S" is extremely useful to have the
columns line up. OTOH, sending everything to the pager is annoying if the
result is only one value.

I'd be happy with an easier way to force the pager than "\g |less -S".
Perhaps if \g is specified without a filename, it defaults to the pager.
Would such a patch be accepted?

--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.

#9Bruce Momjian
bruce@momjian.us
In reply to: Martijn van Oosterhout (#8)
Re: psql: \pset pager 'always'?

There is a patch at:

http://candle.pha.pa.us/cgi-bin/pgpatches2

which will allow you to turn on the pager always. This is for 7.4.

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

Martijn van Oosterhout wrote:

On Wed, Sep 18, 2002 at 01:40:42PM -0000, greg@turnstep.com wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Can someone supply a patch to automatically invoke the pager if the
output width is greater than the screen? We already test for screen
rows but not for screen width.

Easily done, but I am not sure that this is the right thing to do.
A pager is designed to handle excess vertical input, but not all
can handle excess horizontal input (the width). I suspect that doing
so would not be a good idea for the same reason given to me when I
asked "why not send everything to the pager?": some systems force you
to specifically exit the pager; this can be real annoying for cases
with small input.

While this is true, if you do a select whose output wraps because it is too
wide, getting it to go through "less -S" is extremely useful to have the
columns line up. OTOH, sending everything to the pager is annoying if the
result is only one value.

I'd be happy with an easier way to force the pager than "\g |less -S".
Perhaps if \g is specified without a filename, it defaults to the pager.
Would such a patch be accepted?

--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

There are 10 kinds of people in the world, those that can do binary
arithmetic and those that can't.

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#10Bruce Momjian
bruce@momjian.us
In reply to: Greg Sabino Mullane (#2)
Re: [GENERAL] psql: \pset pager 'always'?

OK, I have applied the following patch for 7.4. I made the following
changes:

o Pager code is now centralized in PageOutput
o You used 'small' when you meant 'short' in a few places
o Added documentation
o Fixed bug where '\pset pager' crashed psql

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

greg@turnstep.com wrote:

I'm really annoyed by that little 'feature' of psql that decides whether
to use pager or not. I personally use GNU 'less' with options -S -F as my
pager, which allows me to scroll vertically AS WELL AS horizontally on
long input. So a "use pager always" option with no strange automagic
behaviour would be nice.

Not a bad idea. Here is a patch that does just that, while maintaining the
"traditional" behavior, so the change should be transparent. Use the
command "\pset pager always" to turn it on. Anything else does the
normal toggle between "on" and "off"

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Attachments:

/bjm/difftext/plainDownload+46-44