ncurses 5.6 - patch 20070331
authorThomas E. Dickey <dickey@invisible-island.net>
Sun, 1 Apr 2007 00:48:02 +0000 (00:48 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sun, 1 Apr 2007 00:48:02 +0000 (00:48 +0000)
+ modify Ada95 binding to build with --enable-reentrant by wrapping
  global variables (bug: acs_map does not yet work).
+ modify Ada95 binding to use the new access-functions, allowing it
  to build/run when NCURSES_OPAQUE is set.
+ add access-functions and macros to return properties of the WINDOW
  structure, e.g., when NCURSES_OPAQUE is set.
+ improved install-sh's quoting.
+ use mkdirs.sh rather than mkinstalldirs, e.g., to use fixes from
  other programs.
  NCURSES_OPAQUE set, since we cannot pass a reference to

22 files changed:
Ada95/gen/Makefile.in
Ada95/gen/gen.c
Ada95/gen/terminal_interface-curses.adb.m4 [moved from Ada95/src/terminal_interface-curses.adb with 96% similarity]
Ada95/gen/terminal_interface-curses.ads.m4
Ada95/samples/ncurses2-attr_test.adb
MANIFEST
NEWS
aclocal.m4
c++/Makefile.in
configure
dist.mk
form/Makefile.in
include/curses.h.in
install-sh
man/Makefile.in
menu/Makefile.in
misc/Makefile.in
mk-hdr.awk
mkdirs.sh [moved from mkinstalldirs with 55% similarity, mode: 0644]
ncurses/Makefile.in
panel/Makefile.in
progs/Makefile.in

index a110d17b9ead57266471bf61cf6c233abe6c7d89..8ffdbac19dd54f7b90d85b51d1b13f048d6450ef 100644 (file)
@@ -28,7 +28,7 @@
 #
 #  Author:  Juergen Pfeifer, 1996
 #
-#  $Id: Makefile.in,v 1.53 2007/02/04 00:42:40 tom Exp $
+#  $Id: Makefile.in,v 1.54 2007/03/31 21:53:14 tom Exp $
 #
 .SUFFIXES:
 
@@ -92,17 +92,18 @@ ADA_SRCDIR  = ../src
 
 GEN_FILES0      = Base_Defs
 
-GEN_FILES1      = Key_Definitions                              \
-                 Old_Keys                              \
-                 Character_Attribute_Set_Rep           \
+GEN_FILES1      = ACS_Map                                      \
                  AC_Rep                                \
+                 Base_Defs                             \
+                 Character_Attribute_Set_Rep           \
                  Color_Defs                            \
-                 ACS_Map                               \
+                 Key_Definitions                       \
                  Linker_Options                        \
-                 Base_Defs                             \
-                 Window_Offsets                        \
+                 Old_Keys                              \
+                 Public_Variables                      \
+                 Trace_Defs                            \
                  Version_Info                          \
-                 Trace_Defs
+                 Window_Offsets
 
 GEN_FILES2      = Menu_Opt_Rep                         \
                  Menu_Base_Defs                        \
@@ -123,6 +124,7 @@ GEN_FILES5  = Chtype_Def                            \
                  Eti_Defs
 
 GEN_TARGETS     = $(ADA_SRCDIR)/$(ABASE).ads                           \
+                 $(ADA_SRCDIR)/$(ABASE).adb                            \
                  $(ADA_SRCDIR)/$(ABASE)-aux.ads                        \
                  $(ADA_SRCDIR)/$(ABASE)-trace.ads                      \
                  $(ADA_SRCDIR)/$(ABASE)-menus.ads                      \
@@ -137,6 +139,7 @@ GEN_TARGETS     = $(ADA_SRCDIR)/$(ABASE).ads                                \
                  $(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads
 
 GEN_SRC                = $(srcdir)/$(ABASE).ads.m4                             \
+                 $(srcdir)/$(ABASE).adb.m4                             \
                  $(srcdir)/$(ABASE)-aux.ads.m4                         \
                  $(srcdir)/$(ABASE)-trace.ads.m4                       \
                  $(srcdir)/$(ABASE)-menus.ads.m4                       \
@@ -192,7 +195,7 @@ gen$x:      gen.o
 
 gen.o: $(srcdir)/gen.c
        $(HOST_CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/gen.c
-
+################################################################################
 Character_Attribute_Set_Rep: gen$x
        $(GENERATE) B A >$@
 
@@ -202,30 +205,33 @@ Base_Defs: gen$x
 Color_Defs: gen$x
        $(GENERATE) B C >$@
 
+Window_Offsets: gen$x
+       $(GENERATE) B D >$@
+
 Key_Definitions: gen$x
        $(GENERATE) B K >$@
 
-Old_Keys: gen$x
-       $(GENERATE) B O >$@
+Linker_Options: gen$x
+       $(GENERATE) B L >$@
 
 ACS_Map: gen$x
        $(GENERATE) B M >$@
 
+Old_Keys: gen$x
+       $(GENERATE) B O >$@
+
+Public_Variables: gen$x
+       $(GENERATE) B P >$@
+
 AC_Rep: gen$x
        $(GENERATE) B R >$@
 
-Linker_Options: gen$x
-       $(GENERATE) B L >$@
-
 Version_Info: gen$x
        $(GENERATE) B V >$@
 
-Window_Offsets: gen$x
-       $(GENERATE) B D >$@
-
 Trace_Defs: gen$x
        $(GENERATE) B T >$@
-
+################################################################################
 Menu_Opt_Rep: gen$x
        $(GENERATE) M R >$@
 
@@ -237,7 +243,7 @@ Menu_Linker_Options: gen$x
 
 Item_Rep: gen$x
        $(GENERATE) M I >$@
-
+################################################################################
 Form_Opt_Rep: gen$x
        $(GENERATE) F R >$@
 
@@ -249,7 +255,7 @@ Form_Linker_Options: gen$x
 
 Field_Rep: gen$x
        $(GENERATE) F I >$@
-
+################################################################################
 Mouse_Base_Defs: gen$x
        $(GENERATE) P B >$@
 
@@ -267,13 +273,19 @@ Chtype_Def: gen$x
 
 Eti_Defs: gen$x
        $(GENERATE) E E >$@
-
+################################################################################
 $(ADA_SRCDIR)/$(ABASE).ads:    $(srcdir)/$(ABASE).ads.m4 \
                                $(GEN_FILES1) $(srcdir)/normal.m4
        $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
        $(srcdir)/$(ABASE).ads.m4 |\
        $(DEL_ADAMODE) >$@
 
+$(ADA_SRCDIR)/$(ABASE).adb:    $(srcdir)/$(ABASE).adb.m4 \
+                               $(GEN_FILES1) $(srcdir)/normal.m4
+       $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
+       $(srcdir)/$(ABASE).adb.m4 |\
+       $(DEL_ADAMODE) >$@
+
 $(ADA_SRCDIR)/$(ABASE)-aux.ads: $(srcdir)/$(ABASE)-aux.ads.m4 \
                                $(GEN_FILES5) $(srcdir)/normal.m4
        $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
index b7842a64a862d45e193f299070a5304f26f2c385..97aea3a36425183ef7bc2b0d3957f66ac43c61fb 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998,2004,2005 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998,2005,2007 Free Software Foundation, Inc.              *
  *                                                                          *
  * Permission is hereby granted, free of charge, to any person obtaining a  *
  * copy of this software and associated documentation files (the            *
@@ -32,7 +32,7 @@
 
 /*
     Version Control
-    $Id: gen.c,v 1.40 2005/01/22 17:03:48 tom Exp $
+    $Id: gen.c,v 1.46 2007/03/31 23:39:15 tom Exp $
   --------------------------------------------------------------------------*/
 /*
   This program generates various record structures and constants from the
@@ -41,6 +41,8 @@
   to produce the real source.
   */
 
+#include <ncurses_cfg.h>
+
 #include <stdlib.h>
 #include <stddef.h>
 #include <string.h>
@@ -771,6 +773,22 @@ acs_def(const char *name, chtype *a)
 static void
 gen_acs(void)
 {
+  printf("   type C_ACS_Map is array (Character'Val (0) .. Character'Val (127))\n");
+  printf("        of Attributed_Character;\n");
+#if USE_REENTRANT
+  printf("   function ACS_Map return C_ACS_Map;\n");
+  printf("   pragma Import (C, ACS_Map, \"_nc_acs_map\");\n");
+#else
+  printf("   ACS_Map : C_ACS_Map;\n");
+  printf("   pragma Import (C, ACS_Map, \"acs_map\");\n");
+#endif
+  printf("   --\n");
+  printf("   --\n");
+  printf("   --  Constants for several characters from the Alternate Character Set\n");
+  printf("   --  You must use these constants as indices into the ACS_Map array\n");
+  printf("   --  to get the corresponding attributed character at runtime.\n");
+  printf("   --\n");
+
 #ifdef ACS_ULCORNER
   acs_def("ACS_Upper_Left_Corner", &ACS_ULCORNER);
 #endif
@@ -877,8 +895,7 @@ gen_acs(void)
    printf("   %-25s : constant Event_Mask := 8#%011lo#;\n", \
           #name, name)
 
-static
-void
+static void
 gen_mouse_events(void)
 {
   mmask_t all1 = 0;
@@ -1004,6 +1021,56 @@ gen_mouse_events(void)
   GEN_EVENT(BUTTON4_EVENTS, all4);
 }
 
+static void
+wrap_one_var(const char *c_var,
+            const char *c_type,
+            const char *ada_func,
+            const char *ada_type)
+{
+#if USE_REENTRANT
+  /* must wrap variables */
+  printf("\n");
+  printf("   function %s return %s\n", ada_func, ada_type);
+  printf("   is\n");
+  printf("      function Result return %s;\n", c_type);
+  printf("      pragma Import (C, Result, \"_nc_%s\");\n", c_var);
+  printf("   begin\n");
+  if (strcmp(c_type, ada_type))
+    printf("      return %s (Result);\n", ada_type);
+  else
+    printf("      return Result;\n");
+  printf("   end %s;\n", ada_func);
+#else
+  /* global variables are really global */
+  printf("\n");
+  printf("   function %s return %s\n", ada_func, ada_type);
+  printf("   is\n");
+  printf("      Result : %s;\n", c_type);
+  printf("      pragma Import (C, Result, \"%s\");\n", c_var);
+  printf("   begin\n");
+  if (strcmp(c_type, ada_type))
+    printf("      return %s (Result);\n", ada_type);
+  else
+    printf("      return Result;\n");
+  printf("   end %s;\n", ada_func);
+#endif
+}
+
+#define GEN_PUBLIC_VAR(c_var, c_type, ada_func, ada_type) \
+       wrap_one_var(#c_var, #c_type, #ada_func, #ada_type)
+
+static void
+gen_public_vars(void)
+{
+  GEN_PUBLIC_VAR(stdscr, Window, Standard_Window, Window);
+  GEN_PUBLIC_VAR(curscr, Window, Current_Window, Window);
+  GEN_PUBLIC_VAR(LINES, C_Int, Lines, Line_Count);
+  GEN_PUBLIC_VAR(COLS, C_Int, Columns, Column_Count);
+  GEN_PUBLIC_VAR(TABSIZE, C_Int, Tab_Size, Natural);
+  GEN_PUBLIC_VAR(COLORS, C_Int, Number_Of_Colors, Natural);
+  GEN_PUBLIC_VAR(COLOR_PAIRS, C_Int, Number_Of_Color_Pairs, Natural);
+}
+
 /*
  * Output some comment lines indicating that the file is generated.
  * The name parameter is the name of the facility to be used in
@@ -1178,70 +1245,21 @@ eti_gen(char *buf, int code, const char *name, int *etimin, int *etimax)
   return strlen(buf);
 }
 
-#define GEN_OFFSET(member,itype)                                    \
-  if (sizeof(((WINDOW*)0)->member)==sizeof(itype)) {                \
-    o = offsetof(WINDOW, member);                                   \
-    if ((o%sizeof(itype) == 0)) {                                   \
-       printf("   Offset%-*s : constant Natural := %2ld; --  %s\n", \
-              12, #member, (long)(o/sizeof(itype)),#itype);         \
-    }                                                               \
-  }
-
 static void
 gen_offsets(void)
 {
-  long o;
   const char *s_bool = "";
 
-  GEN_OFFSET(_maxy, short);
-  GEN_OFFSET(_maxx, short);
-  GEN_OFFSET(_begy, short);
-  GEN_OFFSET(_begx, short);
-  GEN_OFFSET(_cury, short);
-  GEN_OFFSET(_curx, short);
-  GEN_OFFSET(_yoffset, short);
-  GEN_OFFSET(_pary, int);
-  GEN_OFFSET(_parx, int);
   if (sizeof(bool) == sizeof(char))
     {
-      GEN_OFFSET(_notimeout, char);
-      GEN_OFFSET(_clear, char);
-      GEN_OFFSET(_leaveok, char);
-      GEN_OFFSET(_scroll, char);
-      GEN_OFFSET(_idlok, char);
-      GEN_OFFSET(_idcok, char);
-      GEN_OFFSET(_immed, char);
-      GEN_OFFSET(_sync, char);
-      GEN_OFFSET(_use_keypad, char);
-
       s_bool = "char";
     }
   else if (sizeof(bool) == sizeof(short))
     {
-      GEN_OFFSET(_notimeout, short);
-      GEN_OFFSET(_clear, short);
-      GEN_OFFSET(_leaveok, short);
-      GEN_OFFSET(_scroll, short);
-      GEN_OFFSET(_idlok, short);
-      GEN_OFFSET(_idcok, short);
-      GEN_OFFSET(_immed, short);
-      GEN_OFFSET(_sync, short);
-      GEN_OFFSET(_use_keypad, short);
-
       s_bool = "short";
     }
   else if (sizeof(bool) == sizeof(int))
     {
-      GEN_OFFSET(_notimeout, int);
-      GEN_OFFSET(_clear, int);
-      GEN_OFFSET(_leaveok, int);
-      GEN_OFFSET(_scroll, int);
-      GEN_OFFSET(_idlok, int);
-      GEN_OFFSET(_idcok, int);
-      GEN_OFFSET(_immed, int);
-      GEN_OFFSET(_sync, int);
-      GEN_OFFSET(_use_keypad, int);
-
       s_bool = "int";
     }
   printf("   Sizeof%-*s : constant Natural := %2ld; --  %s\n",
@@ -1291,9 +1309,6 @@ main(int argc, char *argv[])
        case 'A':               /* chtype translation into Ada95 record type */
          gen_attr_set("Character_Attribute_Set");
          break;
-       case 'K':               /* translation of keycodes */
-         gen_keydefs(0);
-         break;
        case 'B':               /* write some initial comment lines */
          basedefs();
          break;
@@ -1306,24 +1321,30 @@ main(int argc, char *argv[])
        case 'E':               /* generate Mouse Event codes */
          gen_mouse_events();
          break;
-       case 'M':               /* generate constants for the ACS characters */
-         gen_acs();
+       case 'K':               /* translation of keycodes */
+         gen_keydefs(0);
          break;
        case 'L':               /* generate the Linker_Options pragma */
          gen_linkopts();
          break;
+       case 'M':               /* generate constants for the ACS characters */
+         gen_acs();
+         break;
        case 'O':               /* generate definitions of the old key code names */
          gen_keydefs(1);
          break;
+       case 'P':               /* generate definitions of the public variables */
+         gen_public_vars();
+         break;
        case 'R':               /* generate representation clause for Attributed character */
          gen_chtype_rep("Attributed_Character");
          break;
-       case 'V':               /* generate version info */
-         gen_version_info();
-         break;
        case 'T':               /* generate the Trace info */
          gen_trace("Trace_Attribute_Set");
          break;
+       case 'V':               /* generate version info */
+         gen_version_info();
+         break;
        default:
          break;
        }
similarity index 96%
rename from Ada95/src/terminal_interface-curses.adb
rename to Ada95/gen/terminal_interface-curses.adb.m4
index e2c890384ca42d4f639d244122707cbad61780eb..c123410633855d4d80ff24d725a35628bb384161 100644 (file)
@@ -1,4 +1,6 @@
-------------------------------------------------------------------------------
+--  -*- ada -*-
+define(`HTMLNAME',`terminal_interface-curses__adb.htm')dnl
+include(M4MACRO)------------------------------------------------------------------------------
 --                                                                          --
 --                           GNAT ncurses Binding                           --
 --                                                                          --
@@ -35,8 +37,8 @@
 ------------------------------------------------------------------------------
 --  Author: Juergen Pfeifer, 1996
 --  Version Control:
---  $Revision: 1.35 $
---  $Date: 2007/03/24 23:03:56 $
+--  $Revision: 1.2 $
+--  $Date: 2007/03/31 23:02:22 $
 --  Binding Version 01.00
 ------------------------------------------------------------------------------
 with System;
@@ -44,10 +46,8 @@ with System;
 with Terminal_Interface.Curses.Aux;
 with Interfaces.C;                  use Interfaces.C;
 with Interfaces.C.Strings;          use Interfaces.C.Strings;
-with Interfaces.C.Pointers;
 with Ada.Characters.Handling;       use Ada.Characters.Handling;
 with Ada.Strings.Fixed;
-with Ada.Unchecked_Conversion;
 
 package body Terminal_Interface.Curses is
 
@@ -60,57 +60,6 @@ package body Terminal_Interface.Curses is
       of aliased Attributed_Character;
    pragma Convention (C, chtype_array);
 
-------------------------------------------------------------------------------
-   generic
-      type Element is (<>);
-   function W_Get_Element (Win    : in Window;
-                           Offset : in Natural) return Element;
-
-   function W_Get_Element (Win    : in Window;
-                           Offset : in Natural) return Element is
-      type E_Array is array (Natural range <>) of aliased Element;
-      package C_E_Array is new
-        Interfaces.C.Pointers (Natural, Element, E_Array, Element'Val (0));
-      use C_E_Array;
-
-      function To_Pointer is new
-        Ada.Unchecked_Conversion (Window, Pointer);
-
-      P : Pointer := To_Pointer (Win);
-   begin
-      if Win = Null_Window then
-         raise Curses_Exception;
-      else
-         P := P + ptrdiff_t (Offset);
-         return P.all;
-      end if;
-   end W_Get_Element;
-
-   function W_Get_Int   is new W_Get_Element (C_Int);
-   function W_Get_Short is new W_Get_Element (C_Short);
-   function W_Get_Byte  is new W_Get_Element (Interfaces.C.unsigned_char);
-
-   function Get_Flag (Win    : Window;
-                      Offset : Natural) return Boolean;
-
-   function Get_Flag (Win    : Window;
-                      Offset : Natural) return Boolean
-   is
-      Res : C_Int;
-   begin
-      case Sizeof_bool is
-         when 1 => Res := C_Int (W_Get_Byte  (Win, Offset));
-         when 2 => Res := C_Int (W_Get_Short (Win, Offset));
-         when 4 => Res := C_Int (W_Get_Int   (Win, Offset));
-         when others => raise Curses_Exception;
-      end case;
-
-      case Res is
-         when 0       => return False;
-         when others  => return True;
-      end case;
-   end Get_Flag;
-
 ------------------------------------------------------------------------------
    function Key_Name (Key : in Real_Key_Code) return String
    is
@@ -901,8 +850,10 @@ package body Terminal_Interface.Curses is
    function Get_KeyPad_Mode (Win : in Window := Standard_Window)
                              return Boolean
    is
+      function Is_Keypad (W : Window) return Curses_Bool;
+      pragma Import (C, Is_Keypad, "is_keypad");
    begin
-      return Get_Flag (Win, Offset_use_keypad);
+      return (Is_Keypad (Win) /= Curses_Bool_False);
    end Get_KeyPad_Mode;
 
    procedure Half_Delay (Amount : in Half_Delay_Amount)
@@ -1089,8 +1040,10 @@ package body Terminal_Interface.Curses is
    function Scrolling_Allowed (Win : Window := Standard_Window)
                                return Boolean
    is
+      function Is_Scroll_Ok (W : Window) return Curses_Bool;
+      pragma Import (C, Is_Scroll_Ok, "is_scrollok");
    begin
-      return Get_Flag (Win, Offset_scroll);
+      return (Is_Scroll_Ok (Win) /= Curses_Bool_False);
    end Scrolling_Allowed;
 
    procedure Set_Scroll_Region
@@ -2389,54 +2342,7 @@ package body Terminal_Interface.Curses is
       end if;
    end Nap_Milli_Seconds;
 ------------------------------------------------------------------------------
-
-   function Standard_Window return Window
-   is
-      Stdscr : Window;
-      pragma Import (C, Stdscr, "stdscr");
-   begin
-      return Stdscr;
-   end Standard_Window;
-
-   function Lines return Line_Count
-   is
-      C_Lines : C_Int;
-      pragma Import (C, C_Lines, "LINES");
-   begin
-      return Line_Count (C_Lines);
-   end Lines;
-
-   function Columns return Column_Count
-   is
-      C_Columns : C_Int;
-      pragma Import (C, C_Columns, "COLS");
-   begin
-      return Column_Count (C_Columns);
-   end Columns;
-
-   function Tab_Size return Natural
-   is
-      C_Tab_Size : C_Int;
-      pragma Import (C, C_Tab_Size, "TABSIZE");
-   begin
-      return Natural (C_Tab_Size);
-   end Tab_Size;
-
-   function Number_Of_Colors return Natural
-   is
-      C_Number_Of_Colors : C_Int;
-      pragma Import (C, C_Number_Of_Colors, "COLORS");
-   begin
-      return Natural (C_Number_Of_Colors);
-   end Number_Of_Colors;
-
-   function Number_Of_Color_Pairs return Natural
-   is
-      C_Number_Of_Color_Pairs : C_Int;
-      pragma Import (C, C_Number_Of_Color_Pairs, "COLOR_PAIRS");
-   begin
-      return Natural (C_Number_Of_Color_Pairs);
-   end Number_Of_Color_Pairs;
+include(`Public_Variables')
 ------------------------------------------------------------------------------
    procedure Transform_Coordinates
      (W      : in Window := Standard_Window;
index 3f64ddb440a0b43f7df442befe44c3d35eb6699e..afe65f435192f221119430829ae8ddf46337065d 100644 (file)
@@ -9,7 +9,7 @@ include(M4MACRO)----------------------------------------------------------------
 --                                 S P E C                                  --
 --                                                                          --
 ------------------------------------------------------------------------------
--- Copyright (c) 1998-2004,2006 Free Software Foundation, Inc.              --
+-- Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.              --
 --                                                                          --
 -- Permission is hereby granted, free of charge, to any person obtaining a  --
 -- copy of this software and associated documentation files (the            --
@@ -37,8 +37,8 @@ include(M4MACRO)----------------------------------------------------------------
 ------------------------------------------------------------------------------
 --  Author:  Juergen Pfeifer, 1996
 --  Version Control:
---  $Revision: 1.37 $
---  $Date: 2006/06/25 14:30:22 $
+--  $Revision: 1.39 $
+--  $Date: 2007/03/31 23:36:32 $
 --  Binding Version 01.00
 ------------------------------------------------------------------------------
 include(`Base_Defs')
@@ -188,25 +188,21 @@ include(`AC_Rep')
    function Number_Of_Color_Pairs return Natural;
    pragma Inline (Number_Of_Color_Pairs);
 
-   ACS_Map : array (Character'Val (0) .. Character'Val (127)) of
-     Attributed_Character;
-   pragma Import (C, ACS_Map, "acs_map");
-   --
-   --
-   --  Constants for several characters from the Alternate Character Set
-   --  You must use this constants as indices into the ACS_Map array
-   --  to get the corresponding attributed character at runtime.
-   --
 include(`ACS_Map')dnl
 
    --  MANPAGE(`curs_initscr.3x')
-   --  | Not implemented: newterm, set_term, delscreen, curscr
+   --  | Not implemented: newterm, set_term, delscreen
 
    --  ANCHOR(`stdscr',`Standard_Window')
    function Standard_Window return Window;
    --  AKA
    pragma Inline (Standard_Window);
 
+   --  ANCHOR(`curscr',`Current_Window')
+   function Current_Window return Window;
+   --  AKA
+   pragma Inline (Current_Window);
+
    --  ANCHOR(`initscr()',`Init_Screen')
    procedure Init_Screen;
 
index a5ff8b8566ad7fa1c00cd449df7816490b5ccb1c..20a653a7c94b57356836670ca859d8270c98111c 100644 (file)
@@ -7,7 +7,7 @@
 --                                 B O D Y                                  --
 --                                                                          --
 ------------------------------------------------------------------------------
--- Copyright (c) 2000-2004,2006 Free Software Foundation, Inc.              --
+-- Copyright (c) 2000-2006,2007 Free Software Foundation, Inc.              --
 --                                                                          --
 -- Permission is hereby granted, free of charge, to any person obtaining a  --
 -- copy of this software and associated documentation files (the            --
@@ -35,8 +35,8 @@
 ------------------------------------------------------------------------------
 --  Author: Eugene V. Melaragno <aldomel@ix.netcom.com> 2000
 --  Version Control
---  $Revision: 1.6 $
---  $Date: 2006/06/25 14:24:40 $
+--  $Revision: 1.7 $
+--  $Date: 2007/03/31 23:45:22 $
 --  Binding Version 01.00
 ------------------------------------------------------------------------------
 with ncurses2.util; use ncurses2.util;
@@ -237,16 +237,13 @@ procedure ncurses2.attr_test is
                                             result : out Boolean) is
       ch : constant Key_Code := Getchar;
       nc : constant Color_Number := Color_Number (Number_Of_Colors);
-      curscr : Window;
-      pragma Import (C, curscr, "curscr");
-      --  curscr is not implemented in the Ada binding
    begin
       result := True;
       if Ada.Characters.Handling.Is_Digit (Character'Val (ch)) then
          skip := ctoi (Code_To_Char (ch));
       elsif ch = CTRL ('L') then
          Touch;
-         Touch (curscr);
+         Touch (Current_Window);
          Refresh;
       elsif Has_Colors then
          case ch is
index aa8daadb0739e03a20d885795a17660b646ed9ef..35b23375354e633c15df9531b53f32da6a92c399 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -20,6 +20,7 @@
 ./Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4
 ./Ada95/gen/terminal_interface-curses-panels.ads.m4
 ./Ada95/gen/terminal_interface-curses-trace.ads.m4
+./Ada95/gen/terminal_interface-curses.adb.m4
 ./Ada95/gen/terminal_interface-curses.ads.m4
 ./Ada95/samples/Makefile.in
 ./Ada95/samples/README
 ./Ada95/src/terminal_interface-curses-text_io.adb
 ./Ada95/src/terminal_interface-curses-text_io.ads
 ./Ada95/src/terminal_interface-curses-trace.adb_p
-./Ada95/src/terminal_interface-curses.adb
 ./Ada95/src/terminal_interface.ads
 ./INSTALL
 ./MANIFEST
 ./mk-1st.awk
 ./mk-2nd.awk
 ./mk-hdr.awk
-./mkinstalldirs
+./mkdirs.sh
 ./ncurses/Makefile.in
 ./ncurses/README
 ./ncurses/README.IZ
diff --git a/NEWS b/NEWS
index 624827f4b6e0ab4876eaba13335572d4d3c0e831..ae34c501d72578dcf996612ea77e45f009f58963 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,7 +25,7 @@
 -- sale, use or other dealings in this Software without prior written        --
 -- authorization.                                                            --
 -------------------------------------------------------------------------------
--- $Id: NEWS,v 1.1106 2007/03/24 22:58:37 tom Exp $
+-- $Id: NEWS,v 1.1109 2007/04/01 00:30:22 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -45,12 +45,23 @@ See the AUTHORS file for the corresponding full names.
 Changes through 1.9.9e did not credit all contributions;
 it is not possible to add this information.
 
+20070331
+       + modify Ada95 binding to build with --enable-reentrant by wrapping
+         global variables (bug: acs_map does not yet work).
+       + modify Ada95 binding to use the new access-functions, allowing it
+         to build/run when NCURSES_OPAQUE is set.
+       + add access-functions and macros to return properties of the WINDOW
+         structure, e.g., when NCURSES_OPAQUE is set.
+       + improved install-sh's quoting.
+       + use mkdirs.sh rather than mkinstalldirs, e.g., to use fixes from
+         other programs.
+
 20070324
        + eliminate part of the direct use of WINDOW data from Ada95 interface.
        + fix substitutions for termlib filename to make configure option
          --enable-reentrant work with --with-termlib.
        + change a constructor for NCursesWindow to allow compiling with
-         NCURSES_OPAQUE defined, since we cannot pass a reference to
+         NCURSES_OPAQUE set, since we cannot pass a reference to
          an opaque pointer.
 
 20070317
index 10b33ab67ad0417b9fc2fe03dfff0c7811087cc7..309351f8477b54bb876ba48365c9488e0e1bd910 100644 (file)
@@ -28,7 +28,7 @@ dnl***************************************************************************
 dnl
 dnl Author: Thomas E. Dickey 1995-on
 dnl
-dnl $Id: aclocal.m4,v 1.427 2007/03/24 22:29:27 tom Exp $
+dnl $Id: aclocal.m4,v 1.428 2007/03/31 15:53:01 tom Exp $
 dnl Macros used in NCURSES auto-configuration script.
 dnl
 dnl These macros are maintained separately from NCURSES.  The copyright on
@@ -2691,7 +2691,7 @@ AC_ARG_WITH(manpage-tbl,
 AC_MSG_RESULT($MANPAGE_TBL)
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_MAN_PAGES version: 34 updated: 2007/03/17 16:15:10
+dnl CF_MAN_PAGES version: 35 updated: 2007/03/31 11:47:29
 dnl ------------
 dnl Try to determine if the man-pages on the system are compressed, and if
 dnl so, what format is used.  Use this information to construct a script that
@@ -2757,7 +2757,7 @@ NCURSES_PATCH="$NCURSES_PATCH"
 NCURSES_OSPEED="$NCURSES_OSPEED"
 TERMINFO="$TERMINFO"
 
-MKDIRS="sh `cd $srcdir && pwd`/mkinstalldirs"
+MKDIRS="sh `cd $srcdir && pwd`/mkdirs.sh"
 
 INSTALL="$INSTALL"
 INSTALL_DATA="$INSTALL_DATA"
@@ -4592,7 +4592,7 @@ if test "$with_gpm" != no ; then
 fi
 ])
 dnl ---------------------------------------------------------------------------
-dnl CF_WITH_LIBTOOL version: 15 updated: 2007/03/17 16:15:10
+dnl CF_WITH_LIBTOOL version: 16 updated: 2007/03/25 18:05:48
 dnl ---------------
 dnl Provide a configure option to incorporate libtool.  Define several useful
 dnl symbols for the makefile rules.
@@ -4668,7 +4668,7 @@ ifdef([AC_PROG_LIBTOOL],[
        fi
 ])dnl
        LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} -version-info `cut -f1 ${srcdir}/VERSION` -o'
-       LIB_OBJECT='${OBJECTS}.o=.lo)'
+       LIB_OBJECT='${OBJECTS:.o=.lo}'
        LIB_SUFFIX=.la
        LIB_CLEAN='${LIBTOOL} --mode=clean'
        LIB_COMPILE='${LIBTOOL} --mode=compile'
index f8bfa2074a3cf8f24a80217988c432f62d07fd38..0e05837149504419fdd0e28047d697295c175243 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.80 2007/03/17 18:28:05 tom Exp $
+# $Id: Makefile.in,v 1.81 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -174,7 +174,7 @@ etip.h:     $(srcdir)/etip.h.in $(srcdir)/edit_cfg.sh
        sh $(srcdir)/edit_cfg.sh ../include/ncurses_cfg.h $@
 
 $(DESTDIR)$(libdir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 install \
 install.libs:: ../lib/$(LIBNAME) $(DESTDIR)$(libdir)
index e927724f0e5d3a557dd3d517f4a9213e02d19d4a..b2eb941c27067ae178f21228a25a39ce2eced18c 100755 (executable)
--- a/configure
+++ b/configure
@@ -4123,7 +4123,7 @@ echo "$as_me: error: Cannot find libtool" >&2;}
    { (exit 1); exit 1; }; }
        fi
        LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} -version-info `cut -f1 ${srcdir}/VERSION` -o'
-       LIB_OBJECT='${OBJECTS}.o=.lo)'
+       LIB_OBJECT='${OBJECTS:.o=.lo}'
        LIB_SUFFIX=.la
        LIB_CLEAN='${LIBTOOL} --mode=clean'
        LIB_COMPILE='${LIBTOOL} --mode=compile'
@@ -8116,7 +8116,7 @@ NCURSES_PATCH="$NCURSES_PATCH"
 NCURSES_OSPEED="$NCURSES_OSPEED"
 TERMINFO="$TERMINFO"
 
-MKDIRS="sh `cd $srcdir && pwd`/mkinstalldirs"
+MKDIRS="sh `cd $srcdir && pwd`/mkdirs.sh"
 
 INSTALL="$INSTALL"
 INSTALL_DATA="$INSTALL_DATA"
diff --git a/dist.mk b/dist.mk
index 2da1bad0d53ab4dad3edafc3e4a53366f6cfc621..d51360d934d8df1dd05f21052fc342ee54da1d78 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -1,5 +1,5 @@
 ##############################################################################
-# Copyright (c) 1998-2005,2006 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -25,7 +25,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: dist.mk,v 1.585 2007/03/24 15:38:05 tom Exp $
+# $Id: dist.mk,v 1.587 2007/04/01 00:32:37 tom Exp $
 # Makefile for creating ncurses distributions.
 #
 # This only needs to be used directly as a makefile by developers, but
@@ -37,7 +37,7 @@ SHELL = /bin/sh
 # These define the major/minor/patch versions of ncurses.
 NCURSES_MAJOR = 5
 NCURSES_MINOR = 6
-NCURSES_PATCH = 20070324
+NCURSES_PATCH = 20070331
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index 89b48c7b29535eb91071881a4fe8b9c3db928c93..8370437fa0a4f85755621c64a523caa74dc65c9e 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.44 2007/03/03 20:51:25 tom Exp $
+# $Id: Makefile.in,v 1.45 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -124,7 +124,7 @@ sources :   $(AUTO_SRC)
 
 $(DESTDIR)$(bindir) \
 $(DESTDIR)$(libdir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 # make copies to simplify include-paths while still keeping form's include
 # file in this directory.
index f542251152fd04a763cf59c64550b57b2e2992f9..2517a4f98cce4499947b9d306f73ec6b76ef345b 100644 (file)
@@ -32,7 +32,7 @@
  *     and: Thomas E. Dickey                        1996-on                 *
  ****************************************************************************/
 
-/* $Id: curses.h.in,v 1.170 2007/03/10 18:15:33 tom Exp $ */
+/* $Id: curses.h.in,v 1.172 2007/03/31 20:46:06 tom Exp $ */
 
 #ifndef __NCURSES_H
 #define __NCURSES_H
@@ -144,7 +144,7 @@ typedef unsigned @cf_cv_typeof_mmask_t@ mmask_t;
 #include <stddef.h>    /* we want wchar_t */
 #endif /* _XOPEN_SOURCE_EXTENDED */
 
-/* XSI and SVr4 specify that curses implements 'bool'.  However, C++ may also
+/* X/Open and SVr4 specify that curses implements 'bool'.  However, C++ may also
  * implement it.  If so, we must use the C++ compiler's type to avoid conflict
  * with other interfaces.
  *
@@ -191,7 +191,7 @@ extern "C" {
 #endif
 
 /*
- * XSI attributes.  In the ncurses implementation, they are identical to the
+ * X/Open attributes.  In the ncurses implementation, they are identical to the
  * A_ attributes.
  */
 #define WA_ATTRIBUTES  A_ATTRIBUTES
@@ -416,28 +416,6 @@ struct _win_st
 };
 #endif /* NCURSES_OPAQUE */
 
-/*
- * These functions are extensions - not in XSI Curses.
- */
-#if @NCURSES_EXT_FUNCS@
-extern NCURSES_EXPORT(bool) is_term_resized (int, int);
-extern NCURSES_EXPORT(char *) keybound (int, int);
-extern NCURSES_EXPORT(const char *) curses_version (void);
-extern NCURSES_EXPORT(int) assume_default_colors (int, int);
-extern NCURSES_EXPORT(int) define_key (const char *, int);
-extern NCURSES_EXPORT(int) key_defined (const char *);
-extern NCURSES_EXPORT(int) keyok (int, bool);
-extern NCURSES_EXPORT(int) resize_term (int, int);
-extern NCURSES_EXPORT(int) resizeterm (int, int);
-extern NCURSES_EXPORT(int) use_default_colors (void);
-extern NCURSES_EXPORT(int) use_extended_names (bool);
-extern NCURSES_EXPORT(int) use_legacy_coding (int);
-extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
-extern NCURSES_EXPORT(void) nofilter(void);
-#else
-#define curses_version() NCURSES_VERSION
-#endif
-
 /*
  * This is an extension to support events...
  */
@@ -530,7 +508,7 @@ extern NCURSES_EXPORT(int) wgetnstr_events(WINDOW *,char *,int,_nc_eventlist *);
 #endif
 
 /*
- * Function prototypes.  This is the complete XSI Curses list of required
+ * Function prototypes.  This is the complete X/Open Curses list of required
  * functions.  Those marked `generated' will have sources generated from the
  * macro definitions later in this file, in order to satisfy XPG4.2
  * requirements.
@@ -838,12 +816,50 @@ extern NCURSES_EXPORT(int) getparx (const WINDOW *);                      /* generated */
 extern NCURSES_EXPORT(int) getpary (const WINDOW *);                   /* generated */
 
 /*
- * vid_attr() was implemented originally based on a draft of XSI curses.
+ * vid_attr() was implemented originally based on a draft of X/Open curses.
  */
 #ifndef _XOPEN_SOURCE_EXTENDED
 #define vid_attr(a,pair,opts) vidattr(a)
 #endif
 
+/*
+ * These functions are extensions - not in X/Open Curses.
+ */
+#if @NCURSES_EXT_FUNCS@
+extern NCURSES_EXPORT(bool) is_term_resized (int, int);
+extern NCURSES_EXPORT(char *) keybound (int, int);
+extern NCURSES_EXPORT(const char *) curses_version (void);
+extern NCURSES_EXPORT(int) assume_default_colors (int, int);
+extern NCURSES_EXPORT(int) define_key (const char *, int);
+extern NCURSES_EXPORT(int) key_defined (const char *);
+extern NCURSES_EXPORT(int) keyok (int, bool);
+extern NCURSES_EXPORT(int) resize_term (int, int);
+extern NCURSES_EXPORT(int) resizeterm (int, int);
+extern NCURSES_EXPORT(int) use_default_colors (void);
+extern NCURSES_EXPORT(int) use_extended_names (bool);
+extern NCURSES_EXPORT(int) use_legacy_coding (int);
+extern NCURSES_EXPORT(int) wresize (WINDOW *, int, int);
+extern NCURSES_EXPORT(void) nofilter(void);
+
+/*
+ * These extensions provide access to information stored in the WINDOW even
+ * when NCURSES_OPAQUE is set:
+ */
+extern NCURSES_EXPORT(bool) is_cleared (WINDOW *);     /* generated */
+extern NCURSES_EXPORT(bool) is_idcok (WINDOW *);       /* generated */
+extern NCURSES_EXPORT(bool) is_idlok (WINDOW *);       /* generated */
+extern NCURSES_EXPORT(bool) is_immedok (WINDOW *);     /* generated */
+extern NCURSES_EXPORT(bool) is_keypad (WINDOW *);      /* generated */
+extern NCURSES_EXPORT(bool) is_leaveok (WINDOW *);     /* generated */
+extern NCURSES_EXPORT(bool) is_nodelay (WINDOW *);     /* generated */
+extern NCURSES_EXPORT(bool) is_notimeout (WINDOW *);   /* generated */
+extern NCURSES_EXPORT(bool) is_scrollok (WINDOW *);    /* generated */
+extern NCURSES_EXPORT(bool) is_syncok (WINDOW *);      /* generated */
+
+#else
+#define curses_version() NCURSES_VERSION
+#endif
+
 /* attributes */
 
 #define NCURSES_ATTR_SHIFT       8
@@ -1089,7 +1105,7 @@ extern NCURSES_EXPORT(int) getpary (const WINDOW *);                      /* generated */
 #endif /* NCURSES_OPAQUE */
 
 /*
- * XSI curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
+ * X/Open curses deprecates SVr4 vwprintw/vwscanw, which are supposed to use
  * varargs.h.  It adds new calls vw_printw/vw_scanw, which are supposed to
  * use POSIX stdarg.h.  The ncurses versions of vwprintw/vwscanw already
  * use stdarg.h, so...
@@ -1105,6 +1121,24 @@ extern NCURSES_EXPORT(int) getpary (const WINDOW *);                     /* generated */
 NCURSES_EXPORT(int) vsscanf(const char *, const char *, va_list);
 #endif
 
+/*
+ * These macros are extensions - not in X/Open Curses.
+ */
+#if @NCURSES_EXT_FUNCS@
+#if !NCURSES_OPAQUE
+#define is_cleared(win)                ((win)->_clear)
+#define is_idcok(win)          ((win)->_idcok)
+#define is_idlok(win)          ((win)->_idlok)
+#define is_immedok(win)                ((win)->_immed)
+#define is_keypad(win)         ((win)->_use_keypad)
+#define is_leaveok(win)                ((win)->_leaveok)
+#define is_nodelay(win)                ((win)->_delay == 0)
+#define is_notimeout(win)      ((win)->_notimeout)
+#define is_scrollok(win)       ((win)->_scroll)
+#define is_syncok(win)         ((win)->_sync)
+#endif
+#endif
+
 #endif /* NCURSES_NOMACROS */
 
 /*
index 9f59f0be50e4f1fc7122555100af5dafef45f162..462fa9c3d57b1ff8cf4803f0d212f7138b4ba9d5 100755 (executable)
@@ -1,19 +1,37 @@
 #! /bin/sh
 #
 # install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
 #
-# Copyright 1991 by the Massachusetts Institute of Technology
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
 #
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission.  M.I.T. makes no representations about the
-# suitability of this software for any purpose.  It is provided "as is"
-# without express or implied warranty.
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
 # `make' implicit rules from creating a file called install from it
@@ -56,7 +74,7 @@ dir_arg=""
 
 while [ x"$1" != x ]; do
     case $1 in
-       -c) instcmd="$cpprog"
+       -c) instcmd=$cpprog
            shift
            continue;;
 
@@ -79,7 +97,7 @@ while [ x"$1" != x ]; do
            shift
            continue;;
 
-       -s) stripcmd="$stripprog"
+       -s) stripcmd=$stripprog
            shift
            continue;;
 
@@ -106,7 +124,7 @@ done
 
 if [ x"$src" = x ]
 then
-       echo "install:  no input file specified"
+       echo "$0: no input file specified" >&2
        exit 1
 else
        :
@@ -116,7 +134,7 @@ if [ x"$dir_arg" != x ]; then
        dst=$src
        src=""
 
-       if [ -d $dst ]; then
+       if [ -d "$dst" ]; then
                instcmd=:
                chmodcmd=""
        else
@@ -128,17 +146,17 @@ else
 # might cause directories to be created, which would be especially bad
 # if $src (and thus $dsttmp) contains '*'.
 
-       if [ -f $src -o -d $src ]
+       if [ -f "$src" ] || [ -d "$src" ]
        then
                :
        else
-               echo "install:  $src does not exist"
+               echo "$0: $src does not exist" >&2
                exit 1
        fi
 
        if [ x"$dst" = x ]
        then
-               echo "install:  no destination specified"
+               echo "$0: no destination specified" >&2
                exit 1
        else
                :
@@ -147,16 +165,16 @@ else
 # If destination is a directory, append the input filename; if your system
 # does not like double slashes in filenames, you may need to add some logic
 
-       if [ -d $dst ]
+       if [ -d "$dst" ]
        then
-               dst="$dst"/`basename $src`
+               dst=$dst/`basename "$src"`
        else
                :
        fi
 fi
 
 ## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 
 # Make sure that the destination directory exists.
 #  this part is taken from Noah Friedman's mkinstalldirs script
@@ -165,48 +183,48 @@ dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 if [ ! -d "$dstdir" ]; then
 defaultIFS='
        '
-IFS="${IFS-${defaultIFS}}"
+IFS="${IFS-$defaultIFS}"
 
-oIFS="${IFS}"
+oIFS=$IFS
 # Some sh's can't handle IFS=/ for some reason.
 IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
 
 pathcomp=''
 
 while [ $# -ne 0 ] ; do
-       pathcomp="${pathcomp}${1}"
+       pathcomp=$pathcomp$1
        shift
 
-       if [ ! -d "${pathcomp}" ] ;
+       if [ ! -d "$pathcomp" ] ;
         then
-               $mkdirprog "${pathcomp}"
+               $mkdirprog "$pathcomp"
        else
                :
        fi
 
-       pathcomp="${pathcomp}/"
+       pathcomp=$pathcomp/
 done
 fi
 
 if [ x"$dir_arg" != x ]
 then
-       $doit $instcmd $dst &&
+       $doit $instcmd "$dst" &&
 
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
 else
 
 # If we're going to rename the final executable, determine the name now.
 
        if [ x"$transformarg" = x ]
        then
-               dstfile=`basename $dst`
+               dstfile=`basename "$dst"`
        else
-               dstfile=`basename $dst $transformbasename |
+               dstfile=`basename "$dst" $transformbasename |
                        sed $transformarg`$transformbasename
        fi
 
@@ -214,20 +232,24 @@ else
 
        if [ x"$dstfile" = x ]
        then
-               dstfile=`basename $dst`
+               dstfile=`basename "$dst"`
        else
                :
        fi
 
-# Make a temp file name in the proper directory.
+# Make a couple of temp file names in the proper directory.
 
        dsttmp=$dstdir/#inst.$$#
+       rmtmp=$dstdir/#rm.$$#
 
-# Move or copy the file name to the temp name
+# Trap to clean up temp files at exit.
 
-       $doit $instcmd $src $dsttmp &&
+       trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+       trap '(exit $?); exit' 1 2 13 15
 
-       trap "rm -f ${dsttmp}" 0 &&
+# Move or copy the file name to the temp name
+
+       $doit $instcmd "$src" "$dsttmp" &&
 
 # and set any options; do chmod last to preserve setuid bits
 
@@ -235,17 +257,38 @@ else
 # ignore errors from any of these, just make sure not to ignore
 # errors from the above "$doit $instcmd $src $dsttmp" command.
 
-       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi &&
-       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi &&
-       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi &&
-       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi &&
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+       if [ -f "$dstdir/$dstfile" ]
+       then
+               $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+               $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+               {
+                 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+                 (exit 1); exit
+               }
+       else
+               :
+       fi
+} &&
 
 # Now rename the file to the real destination.
 
-       $doit $rmcmd -f $dstdir/$dstfile &&
-       $doit $mvcmd $dsttmp $dstdir/$dstfile
+       $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
 
 fi &&
 
+# The final little trick to "correctly" pass the exit status to the exit trap.
 
-exit 0
+{
+       (exit 0); exit
+}
index f991b4bd84f9df7602a5e8d887b4ab6818098d73..c04f7c9eea5750c1cb54d96fcc16c013c048b27c 100644 (file)
@@ -1,6 +1,6 @@
-# $Id: Makefile.in,v 1.40 2006/12/24 20:16:32 tom Exp $
+# $Id: Makefile.in,v 1.41 2007/03/31 15:54:06 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2003,2005 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -52,7 +52,7 @@ depend :
 tags :
 
 $(DESTDIR)$(mandir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 EDITARGS = $(DESTDIR)$(mandir) $(srcdir) terminfo.5 $(srcdir)/*.[0-9]*
 
index 4d68557e6bf37e66335c746813926ed6cc7abfb5..b439de7169f623fb2f7b062f47ef9fd150cc65d3 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.45 2007/03/03 20:51:25 tom Exp $
+# $Id: Makefile.in,v 1.46 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -126,7 +126,7 @@ sources :   $(AUTO_SRC)
 
 $(DESTDIR)$(bindir) \
 $(DESTDIR)$(libdir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 # make copies to simplify include-paths while still keeping menu's include
 # file in this directory.
index 76f67fc2a25315d9cc00267a38a73b797a1e2098..4cb39b0c79db9b3f41137336de44b7bd20471b4c 100644 (file)
@@ -1,6 +1,6 @@
-# $Id: Makefile.in,v 1.42 2006/12/31 00:11:06 tom Exp $
+# $Id: Makefile.in,v 1.43 2007/03/31 15:54:17 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2004,2006 Free Software Foundation, Inc.                #
+# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -119,7 +119,7 @@ $(DESTDIR)$(bindir) \
 $(DESTDIR)$(libdir) \
 $(DESTDIR)$(datadir) \
 $(DESTDIR)$(tabsetdir) :
-       $(SHELL) $(top_srcdir)/mkinstalldirs $@
+       $(SHELL) $(top_srcdir)/mkdirs.sh $@
 
 uninstall : uninstall.data uninstall.libs
 
index c5309a76f9b1ae9ac89743c9e07160f354589cbb..9b6bee4108c65e708d4e8658c10094ba50faa0a3 100644 (file)
@@ -1,6 +1,6 @@
-# $Id: mk-hdr.awk,v 1.1 2007/01/13 19:44:22 tom Exp $
+# $Id: mk-hdr.awk,v 1.2 2007/03/31 15:48:45 tom Exp $
 ##############################################################################
-# Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
+# Copyright (c) 2007 Free Software Foundation, Inc.                          #
 #                                                                            #
 # Permission is hereby granted, free of charge, to any person obtaining a    #
 # copy of this software and associated documentation files (the "Software"), #
@@ -74,7 +74,7 @@ END   {
                if ( count > 0 )
                {
                        print "${DESTDIR}${includedir} :"
-                       print " sh ${srcdir}/../mkinstalldirs $@"
+                       print " sh ${srcdir}/../mkdirs.sh $@"
                        print ""
                        print "install \\"
                        print "install.libs \\"
old mode 100755 (executable)
new mode 100644 (file)
similarity index 55%
rename from mkinstalldirs
rename to mkdirs.sh
index ffe7494..59fc39c
+++ b/mkdirs.sh
@@ -1,10 +1,12 @@
 #! /bin/sh
+# $Id: mkdirs.sh,v 1.5 2007/03/25 22:29:46 tom Exp $
+# -----------------------------------------------------------------------------
 # mkinstalldirs --- make directory hierarchy
 # Author: Noah Friedman <friedman@prep.ai.mit.edu>
 # Created: 1993-05-16
 # Last modified: 1994-03-25
 # Public domain
-#
+# -----------------------------------------------------------------------------
 
 errstatus=0
 umask 022
@@ -24,8 +26,19 @@ for file in ${1+"$@"} ; do
         echo "mkdir $pathcomp" 1>&2
         case "$pathcomp" in
           [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]: )
-                ;;               # DOSISH systems
-          * )          mkdir "$pathcomp" || errstatus=$? ;;
+            ;;               # DOSISH systems
+          * )
+            mkdir "$pathcomp"
+            errstatus=$?
+            if test $errstatus != 0
+            then
+               # may have failed if invoked in a parallel "make -j# install"
+               if test -d "$pathcomp"
+               then
+                  errstatus=0
+               fi
+            fi
+            ;;
         esac
      fi
 
index d5d4618dfa0ee47d6a05f7d7658a14e365efbe6b..076465c1484e6433d2e9f2d8dca5535ca56d7b3d 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.103 2007/02/24 21:50:17 tom Exp $
+# $Id: Makefile.in,v 1.104 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -178,7 +178,7 @@ sources:    $(AUTO_SRC)
 
 $(DESTDIR)$(bindir) \
 $(DESTDIR)$(libdir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 ../lib : ; mkdir $@
 
index 2371442a9034d21e472a7d3e1d02d6b4841f4c1a..692ad1cb087f084ef04c54f656c249f1f1a32d1c 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.49 2007/03/03 20:51:25 tom Exp $
+# $Id: Makefile.in,v 1.50 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -125,7 +125,7 @@ sources:    $(AUTO_SRC)
 
 $(DESTDIR)$(bindir) \
 $(DESTDIR)$(libdir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 # make a copy to simplify include-paths while still keeping panel's include
 # file in this directory.
index 2979b22364c2f0cf8b210e2e61ef214cd62e9e32..077eeb001bebd576410b90849ba3b95b9f45275e 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.in,v 1.71 2007/01/13 17:33:52 tom Exp $
+# $Id: Makefile.in,v 1.72 2007/03/31 15:46:42 tom Exp $
 ##############################################################################
 # Copyright (c) 1998-2006,2007 Free Software Foundation, Inc.                #
 #                                                                            #
@@ -200,7 +200,7 @@ uninstall.progs:
        -@rm -f $(DESTDIR)$(bindir)/$(actual_reset)
 
 $(DESTDIR)$(bindir) :
-       sh $(srcdir)/../mkinstalldirs $@
+       sh $(srcdir)/../mkdirs.sh $@
 
 #
 # Utilities normally built by make all start here