Set default host and target charsets in the DJGPP port.
authorEli Zaretskii <eliz@gnu.org>
Sun, 19 Apr 2009 18:29:34 +0000 (18:29 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sun, 19 Apr 2009 18:29:34 +0000 (18:29 +0000)
* config/djgpp/config.sed (am_cv_langinfo_codeset)
(bash_cv_langinfo_codeset, ac_cv_header_nl_types_h): Set to "yes"
in all configure scripts that define ac_cv_env_CPP_value.
* go32-nat.c (dos_codepage, nl_langinfo): New functions.
Include langinfo.h.
* config/djgpp/nl_types.h: New file.
* config/djgpp/langinfo.h: New file.
* config/i386/go32.mh (MH_CFLAGS): Add $(srcdir)/config/djgpp.

gdb/ChangeLog
gdb/config/djgpp/config.sed
gdb/config/djgpp/langinfo.h [new file with mode: 0644]
gdb/config/djgpp/nl_types.h [new file with mode: 0644]
gdb/config/i386/go32.mh
gdb/go32-nat.c

index a46ddeaa8947c08385fdbd78e5b9347c69c0a6b6..43407dba0c05d87d9f4df6b24cd9d03445d0b792 100644 (file)
@@ -1,3 +1,20 @@
+2009-04-19  Eli Zaretskii  <eliz@gnu.org>
+
+       Set default host and target charsets in the DJGPP port.
+
+       * config/djgpp/config.sed (am_cv_langinfo_codeset)
+       (bash_cv_langinfo_codeset, ac_cv_header_nl_types_h): Set to "yes"
+       in all configure scripts that define ac_cv_env_CPP_value.
+
+       * go32-nat.c (dos_codepage, nl_langinfo): New functions.
+       Include langinfo.h.
+
+       * config/djgpp/nl_types.h: New file.
+
+       * config/djgpp/langinfo.h: New file.
+
+       * config/i386/go32.mh (MH_CFLAGS): Add $(srcdir)/config/djgpp.
+
 2009-04-18  Carlos O'Donell  <carlos@codesourcery.com>
 
        * Makefile.in (MAKEHTML): Set to makeinfo --html.
index 536a44542650f6747280a4cc647b780ab4b240bf..98882cfe7fdc55c4a91b2968a88f0b481ffadcef 100644 (file)
@@ -25,6 +25,12 @@ s|\.gdbinit|gdb.ini|g
   s,config\\.h\\.in,config.h-in,g;t t\
   s,po2tbl\\.sed\\.in,po2tblsed.in,g;t t
 
+# We have an emulation of nl_langinfo in go32-nat.c that supports CODESET.
+/^ac_cv_env_CPP_value=/a\
+am_cv_langinfo_codeset=yes\
+bash_cv_langinfo_codeset=yes\
+ac_cv_header_nl_types_h=yes
+
 # Prevent splitting of config.status substitutions, because that
 # might break multi-line sed commands.
 /ac_max_sed_lines=[0-9]/s,=.*$,=`sed -n "$=" $tmp/subs.sed`,
diff --git a/gdb/config/djgpp/langinfo.h b/gdb/config/djgpp/langinfo.h
new file mode 100644 (file)
index 0000000..631f360
--- /dev/null
@@ -0,0 +1,35 @@
+/* langinfo.h file for DJGPP.
+   Copyright (C) 2009 Free Software Foundation, Inc.
+   Written by Eli Zaretskii.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LANGINFO_H
+#define _LANGINFO_H
+
+#include <nl_types.h>
+
+enum {
+  CODESET,
+  /* Number of enumerated values.  */
+  _NL_NUM
+};
+
+#define CODESET CODESET
+
+extern char *nl_langinfo (nl_item);
+
+#endif /* _LANGINFO_H */
diff --git a/gdb/config/djgpp/nl_types.h b/gdb/config/djgpp/nl_types.h
new file mode 100644 (file)
index 0000000..012b5fa
--- /dev/null
@@ -0,0 +1,25 @@
+/* nl_types.h for DJGPP.
+   Copyright (C) 2009 Free Software Foundation, Inc.
+   Written by Eli Zaretskii.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef _NL_TYPES_H
+#define _NL_TYPES_H
+
+typedef int nl_item;
+
+#endif /* _NL_TYPES_H */
index c488ab20ed9a208d85ac678cc4f45651cee53005..73dc70ecdff2e7244eb8e153c63b2a77086ded74 100644 (file)
@@ -1,5 +1,7 @@
 # Host: Intel x86 running DJGPP
-MH_CFLAGS= 
+
+# We include several header files from config/djgpp
+MH_CFLAGS= -I$(srcdir)/config/djgpp
 
 NAT_FILE= nm-go32.h
 NATDEPFILES= go32-nat.o i386-nat.o
index 267df62b3431f79789b0381a7bc25af7bcc9148c..e49125f36dc271667fc74b44f485f8fa4acb104c 100644 (file)
@@ -53,6 +53,8 @@
 #include <debug/redir.h>
 #endif
 
+#include <langinfo.h>
+
 #if __DJGPP_MINOR__ < 3
 /* This code will be provided from DJGPP 2.03 on. Until then I code it
    here */
@@ -938,6 +940,47 @@ init_go32_ops (void)
   strcpy (gdbinit, "gdb.ini");
 }
 
+/* Return the current DOS codepage number.  */
+static int
+dos_codepage (void)
+{
+  __dpmi_regs regs;
+
+  regs.x.ax = 0x6601;
+  __dpmi_int (0x21, &regs);
+  if (!(regs.x.flags & 1))
+    return regs.x.bx & 0xffff;
+  else
+    return 437;        /* default */
+}
+
+/* Limited emulation of `nl_langinfo', for charset.c.  */
+char *
+nl_langinfo (nl_item item)
+{
+  char *retval;
+
+  switch (item)
+    {
+      case CODESET:
+       {
+         /* 8 is enough for SHORT_MAX + "CP" + null.  */
+         char buf[8];
+         int blen = sizeof (buf);
+         int needed = snprintf (buf, blen, "CP%d", dos_codepage ());
+
+         if (needed > blen)    /* should never happen */
+           buf[0] = 0;
+         retval = xstrdup (buf);
+       }
+       break;
+      default:
+       retval = xstrdup ("");
+       break;
+    }
+  return retval;
+}
+
 unsigned short windows_major, windows_minor;
 
 /* Compute the version Windows reports via Int 2Fh/AX=1600h.  */