*
* 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"
{
/* 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);
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));
*
* 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"
#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"
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;
-}
*
* 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
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);
*
* 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"
*
*/
void
-helpSQL(const char *topic, bool pager)
+helpSQL(const char *topic, unsigned short int pager)
{
#define VALUE_OR_NULL(a) ((a) ? (a) : "")
*
* 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
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);
*
* 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
*/
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
{
}
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
{
-/* $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
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 */
*
* 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"
#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"
/*************************/
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;
/* 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;
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;
{
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
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;
}
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;
}
/* 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;
}
-
-
-
/********************************/
/* 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,
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)
}
for (i = 0; i < nfields; i++)
- headers[i] = mbvalidate(PQfname(result, i));
+ headers[i] = mbvalidate(PQfname(result, i), opt->topt.encoding);
/* set cells */
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 */
*
* 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 */
char *recordSep; /* record separator for unaligned text
* mode */
char *tableAttr; /* attributes for HTML <table ...> */
+ int encoding; /* character encoding */
} printTableOpt;
*
* 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"
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
*/