aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/command.c4
-rw-r--r--src/bin/psql/common.c53
-rw-r--r--src/bin/psql/common.h4
-rw-r--r--src/bin/psql/help.c4
-rw-r--r--src/bin/psql/help.h4
-rw-r--r--src/bin/psql/mbprint.c11
-rw-r--r--src/bin/psql/mbprint.h6
-rw-r--r--src/bin/psql/print.c80
-rw-r--r--src/bin/psql/print.h7
-rw-r--r--src/bin/psql/startup.c4
10 files changed, 88 insertions, 89 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index feb6ba32a90..66a8553e212 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -3,7 +3,7 @@
*
* Copyright 2000-2002 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.91 2003/03/10 15:46:01 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/command.c,v 1.92 2003/03/18 22:15:43 petere Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@@ -471,6 +471,7 @@ exec_command(const char *cmd,
{
/* save encoding info into psql internal data */
pset.encoding = PQclientEncoding(pset.db);
+ pset.popt.topt.encoding = PQclientEncoding(pset.db);
SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
}
free(encoding);
@@ -1445,6 +1446,7 @@ do_connect(const char *new_dbname, const char *new_user)
PQsetNoticeProcessor(pset.db, NoticeProcessor, NULL);
pset.encoding = PQclientEncoding(pset.db);
+ pset.popt.topt.encoding = PQclientEncoding(pset.db);
/* Update variables */
SetVariable(pset.vars, "DBNAME", PQdb(pset.db));
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 0caaf1ef640..5d7180f9939 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.56 2003/03/10 22:28:19 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.c,v 1.57 2003/03/18 22:15:44 petere Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -24,14 +24,6 @@
#include <sys/timeb.h> /* for _ftime() */
#endif
-#ifndef WIN32
-#include <sys/ioctl.h> /* for ioctl() */
-#endif
-
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-
#include "libpq-fe.h"
#include "pqsignal.h"
@@ -522,46 +514,3 @@ SendQuery(const char *query)
return success;
}
-
-
-/*
- * PageOutput
- *
- * Tests if pager is needed and returns appropriate FILE pointer.
- */
-FILE *
-PageOutput(int lines, bool pager)
-{
- /* check whether we need / can / are supposed to use pager */
- if (pager
-#ifndef WIN32
- &&
- isatty(fileno(stdin)) &&
- isatty(fileno(stdout))
-#endif
- )
- {
- const char *pagerprog;
-
-#ifdef TIOCGWINSZ
- int result;
- struct winsize screen_size;
-
- result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
- if (result == -1 || lines > screen_size.ws_row || pager > 1)
- {
-#endif
- pagerprog = getenv("PAGER");
- if (!pagerprog)
- pagerprog = DEFAULT_PAGER;
-#ifndef WIN32
- pqsignal(SIGPIPE, SIG_IGN);
-#endif
- return popen(pagerprog, "w");
-#ifdef TIOCGWINSZ
- }
-#endif
- }
-
- return stdout;
-}
diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h
index 3b0c7d8b563..fdfcdc05ebc 100644
--- a/src/bin/psql/common.h
+++ b/src/bin/psql/common.h
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/common.h,v 1.21 2002/10/29 19:35:33 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/common.h,v 1.22 2003/03/18 22:15:44 petere Exp $
*/
#ifndef COMMON_H
#define COMMON_H
@@ -37,8 +37,6 @@ extern PGresult *PSQLexec(const char *query, bool ignore_command_ok);
extern bool SendQuery(const char *query);
-extern FILE *PageOutput(int lines, bool pager);
-
/* sprompt.h */
extern char *simple_prompt(const char *prompt, int maxlen, bool echo);
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index d1a30e40ae7..1a55640afae 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.70 2003/03/10 15:46:03 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/help.c,v 1.71 2003/03/18 22:15:44 petere Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -262,7 +262,7 @@ slashUsage(unsigned short int pager)
*
*/
void
-helpSQL(const char *topic, bool pager)
+helpSQL(const char *topic, unsigned short int pager)
{
#define VALUE_OR_NULL(a) ((a) ? (a) : "")
diff --git a/src/bin/psql/help.h b/src/bin/psql/help.h
index 7b3078dd85d..8b247d0fede 100644
--- a/src/bin/psql/help.h
+++ b/src/bin/psql/help.h
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.11 2002/11/08 19:12:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/help.h,v 1.12 2003/03/18 22:15:44 petere Exp $
*/
#ifndef HELP_H
#define HELP_H
@@ -12,7 +12,7 @@ void usage(void);
void slashUsage(unsigned short int pager);
-void helpSQL(const char *topic, bool pager);
+void helpSQL(const char *topic, unsigned short int pager);
void print_copyright(void);
diff --git a/src/bin/psql/mbprint.c b/src/bin/psql/mbprint.c
index c91b71c9c5b..692f60bf775 100644
--- a/src/bin/psql/mbprint.c
+++ b/src/bin/psql/mbprint.c
@@ -3,14 +3,13 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/mbprint.c,v 1.5 2002/10/03 17:09:42 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/mbprint.c,v 1.6 2003/03/18 22:15:44 petere Exp $
*/
#include "postgres_fe.h"
#include "mbprint.h"
#include "mb/pg_wchar.h"
-#include "settings.h"
/*
* This is an implementation of wcwidth() and wcswidth() as defined in
@@ -310,9 +309,9 @@ mb_utf_validate(unsigned char *pwcs)
*/
int
-pg_wcswidth(unsigned char *pwcs, size_t len)
+pg_wcswidth(unsigned char *pwcs, size_t len, int encoding)
{
- if (pset.encoding == PG_UTF8)
+ if (encoding == PG_UTF8)
return mb_utf_wcswidth(pwcs, len);
else
{
@@ -325,9 +324,9 @@ pg_wcswidth(unsigned char *pwcs, size_t len)
}
unsigned char *
-mbvalidate(unsigned char *pwcs)
+mbvalidate(unsigned char *pwcs, int encoding)
{
- if (pset.encoding == PG_UTF8)
+ if (encoding == PG_UTF8)
return mb_utf_validate(pwcs);
else
{
diff --git a/src/bin/psql/mbprint.h b/src/bin/psql/mbprint.h
index 826b71c84a4..7624a34793b 100644
--- a/src/bin/psql/mbprint.h
+++ b/src/bin/psql/mbprint.h
@@ -1,4 +1,4 @@
-/* $Id: mbprint.h,v 1.5 2002/08/27 20:16:48 petere Exp $ */
+/* $Id: mbprint.h,v 1.6 2003/03/18 22:15:44 petere Exp $ */
#ifndef MBPRINT_H
#define MBPRINT_H
@@ -6,8 +6,8 @@
pg_wchar utf2ucs(const unsigned char *c);
-unsigned char *mbvalidate(unsigned char *pwcs);
+unsigned char *mbvalidate(unsigned char *pwcs, int encoding);
-int pg_wcswidth(unsigned char *pwcs, size_t len);
+int pg_wcswidth(unsigned char *pwcs, size_t len, int encoding);
#endif /* MBPRINT_H */
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index 4c76d06f8f9..7ac365647d5 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/print.c,v 1.35 2002/11/01 15:12:19 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/print.c,v 1.36 2003/03/18 22:15:44 petere Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@@ -11,12 +11,15 @@
#include <math.h>
#include <signal.h>
+#include <unistd.h>
+
+#ifndef WIN32
+#include <sys/ioctl.h> /* for ioctl() */
+#endif
#include "pqsignal.h"
#include "libpq-fe.h"
-#include "settings.h"
-
#include "mbprint.h"
/*************************/
@@ -195,7 +198,7 @@ static void
print_aligned_text(const char *title, const char *const * headers,
const char *const * cells, const char *const * footers,
const char *opt_align, bool opt_barebones,
- unsigned short int opt_border,
+ unsigned short int opt_border, int encoding,
FILE *fout)
{
unsigned int col_count = 0;
@@ -253,7 +256,7 @@ print_aligned_text(const char *title, const char *const * headers,
/* calc column widths */
for (i = 0; i < col_count; i++)
{
- tmp = pg_wcswidth((unsigned char *) headers[i], strlen(headers[i]));
+ tmp = pg_wcswidth((unsigned char *) headers[i], strlen(headers[i]), encoding);
if (tmp > widths[i])
widths[i] = tmp;
head_w[i] = tmp;
@@ -261,7 +264,7 @@ print_aligned_text(const char *title, const char *const * headers,
for (i = 0, ptr = cells; *ptr; ptr++, i++)
{
- tmp = pg_wcswidth((unsigned char *) *ptr, strlen(*ptr));
+ tmp = pg_wcswidth((unsigned char *) *ptr, strlen(*ptr), encoding);
if (tmp > widths[i % col_count])
widths[i % col_count] = tmp;
cell_w[i] = tmp;
@@ -282,7 +285,7 @@ print_aligned_text(const char *title, const char *const * headers,
{
int tlen;
- tlen = pg_wcswidth((unsigned char *) title, strlen(title));
+ tlen = pg_wcswidth((unsigned char *) title, strlen(title), encoding);
if (tlen >= (int) total_w)
fprintf(fout, "%s\n", title);
else
@@ -392,9 +395,9 @@ print_aligned_text(const char *title, const char *const * headers,
static void
print_aligned_vertical(const char *title, const char *const * headers,
- const char *const * cells, const char *const * footers,
+ const char *const * cells, const char *const * footers,
bool opt_barebones, unsigned short int opt_border,
- FILE *fout)
+ int encoding, FILE *fout)
{
unsigned int col_count = 0;
unsigned int record = 1;
@@ -425,7 +428,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
}
for (i = 0; i < col_count; i++)
{
- if ((tmp = pg_wcswidth((unsigned char *) headers[i], strlen(headers[i]))) > hwidth)
+ if ((tmp = pg_wcswidth((unsigned char *) headers[i], strlen(headers[i]), encoding)) > hwidth)
hwidth = tmp;
head_w[i] = tmp;
}
@@ -447,7 +450,7 @@ print_aligned_vertical(const char *title, const char *const * headers,
/* find longest data cell */
for (i = 0, ptr = cells; *ptr; ptr++, i++)
{
- if ((tmp = pg_wcswidth((unsigned char *) *ptr, strlen(*ptr))) > dwidth)
+ if ((tmp = pg_wcswidth((unsigned char *) *ptr, strlen(*ptr), encoding)) > dwidth)
dwidth = tmp;
cell_w[i] = tmp;
}
@@ -953,14 +956,55 @@ const char *opt_align, bool opt_barebones, unsigned short int opt_border,
-
-
-
/********************************/
/* Public functions */
/********************************/
+/*
+ * PageOutput
+ *
+ * Tests if pager is needed and returns appropriate FILE pointer.
+ */
+FILE *
+PageOutput(int lines, unsigned short int pager)
+{
+ /* check whether we need / can / are supposed to use pager */
+ if (pager
+#ifndef WIN32
+ &&
+ isatty(fileno(stdin)) &&
+ isatty(fileno(stdout))
+#endif
+ )
+ {
+ const char *pagerprog;
+
+#ifdef TIOCGWINSZ
+ int result;
+ struct winsize screen_size;
+
+ result = ioctl(fileno(stdout), TIOCGWINSZ, &screen_size);
+ if (result == -1 || lines > screen_size.ws_row || pager > 1)
+ {
+#endif
+ pagerprog = getenv("PAGER");
+ if (!pagerprog)
+ pagerprog = DEFAULT_PAGER;
+#ifndef WIN32
+ pqsignal(SIGPIPE, SIG_IGN);
+#endif
+ return popen(pagerprog, "w");
+#ifdef TIOCGWINSZ
+ }
+#endif
+ }
+
+ return stdout;
+}
+
+
+
void
printTable(const char *title,
const char *const * headers,
@@ -1023,9 +1067,9 @@ printTable(const char *title,
break;
case PRINT_ALIGNED:
if (opt->expanded)
- print_aligned_vertical(title, headers, cells, footers, opt->tuples_only, border, output);
+ print_aligned_vertical(title, headers, cells, footers, opt->tuples_only, border, opt->encoding, output);
else
- print_aligned_text(title, headers, cells, footers, align, opt->tuples_only, border, output);
+ print_aligned_text(title, headers, cells, footers, align, opt->tuples_only, border, opt->encoding, output);
break;
case PRINT_HTML:
if (opt->expanded)
@@ -1077,7 +1121,7 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout)
}
for (i = 0; i < nfields; i++)
- headers[i] = mbvalidate(PQfname(result, i));
+ headers[i] = mbvalidate(PQfname(result, i), opt->topt.encoding);
/* set cells */
@@ -1093,7 +1137,7 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout)
if (PQgetisnull(result, i / nfields, i % nfields))
cells[i] = opt->nullPrint ? opt->nullPrint : "";
else
- cells[i] = mbvalidate(PQgetvalue(result, i / nfields, i % nfields));
+ cells[i] = mbvalidate(PQgetvalue(result, i / nfields, i % nfields), opt->topt.encoding);
}
/* set footers */
diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h
index f97bf9ead52..e0ce3401d38 100644
--- a/src/bin/psql/print.h
+++ b/src/bin/psql/print.h
@@ -3,13 +3,17 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.15 2002/11/08 19:12:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/print.h,v 1.16 2003/03/18 22:15:44 petere Exp $
*/
#ifndef PRINT_H
#define PRINT_H
#include "libpq-fe.h"
+
+extern FILE *PageOutput(int lines, unsigned short int pager);
+
+
enum printFormat
{
PRINT_NOTHING = 0, /* to make sure someone initializes this */
@@ -36,6 +40,7 @@ typedef struct _printTableOpt
char *recordSep; /* record separator for unaligned text
* mode */
char *tableAttr; /* attributes for HTML <table ...> */
+ int encoding; /* character encoding */
} printTableOpt;
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index 28bbf3cc5e1..39c22dfc69a 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.70 2003/01/06 18:53:25 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/startup.c,v 1.71 2003/03/18 22:15:44 petere Exp $
*/
#include "postgres_fe.h"
@@ -231,6 +231,8 @@ main(int argc, char *argv[])
SetVariable(pset.vars, "PORT", PQport(pset.db));
SetVariable(pset.vars, "ENCODING", pg_encoding_to_char(pset.encoding));
+ pset.popt.topt.encoding = pset.encoding;
+
/*
* Now find something to do
*/