ncurses 5.6 - patch 20070915
authorThomas E. Dickey <dickey@invisible-island.net>
Sat, 15 Sep 2007 22:30:31 +0000 (22:30 +0000)
committerThomas E. Dickey <dickey@invisible-island.net>
Sat, 15 Sep 2007 22:30:31 +0000 (22:30 +0000)
+ modify Ada95/gen/Makefile to use shlib script, to simplify building
  shared-library configuration on platforms lacking rpath support.
+ build-fix for Ada95/src/Makefile to reflect changed dependency for
  the terminal-interface-curses-aux.adb file which is now generated.
+ restructuring test/worm.c, for use_window() example.

Ada95/gen/Makefile.in
Ada95/src/Makefile.in
NEWS
dist.mk
test/worm.c

index f56871af5fede850ec6be94bdcbbdc5c91829338..7bb1dc9c8c2c3701d755ffe6c6f328c6dd09d517 100644 (file)
@@ -28,7 +28,7 @@
 #
 #  Author:  Juergen Pfeifer, 1996
 #
-#  $Id: Makefile.in,v 1.58 2007/05/05 19:54:57 tom Exp $
+#  $Id: Makefile.in,v 1.60 2007/09/15 17:55:33 tom Exp $
 #
 .SUFFIXES:
 
@@ -83,6 +83,7 @@ M4FLAGS               =
 
 ADACURSES_CONFIG = adacurses-config
 
+WRAPPER                = sh $(top_srcdir)/misc/shlib
 GENERATE       = ./gen$x '@DFT_ARG_SUFFIX@'
 DEL_ADAMODE    = sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d'
 
@@ -210,82 +211,82 @@ gen.o:    $(srcdir)/gen.c
        $(HOST_CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/gen.c
 ################################################################################
 Character_Attribute_Set_Rep: gen$x
-       $(GENERATE) B A >$@
+       $(WRAPPER) "$(GENERATE) B A" >$@
 
 Base_Defs: gen$x
-       $(GENERATE) B B >$@
+       $(WRAPPER) "$(GENERATE) B B" >$@
 
 Color_Defs: gen$x
-       $(GENERATE) B C >$@
+       $(WRAPPER) "$(GENERATE) B C" >$@
 
 Window_Offsets: gen$x
-       $(GENERATE) B D >$@
+       $(WRAPPER) "$(GENERATE) B D" >$@
 
 Key_Definitions: gen$x
-       $(GENERATE) B K >$@
+       $(WRAPPER) "$(GENERATE) B K" >$@
 
 Linker_Options: gen$x
-       $(GENERATE) B L >$@
+       $(WRAPPER) "$(GENERATE) B L" >$@
 
 ACS_Map: gen$x
-       $(GENERATE) B M >$@
+       $(WRAPPER) "$(GENERATE) B M" >$@
 
 Old_Keys: gen$x
-       $(GENERATE) B O >$@
+       $(WRAPPER) "$(GENERATE) B O" >$@
 
 Public_Variables: gen$x
-       $(GENERATE) B P >$@
+       $(WRAPPER) "$(GENERATE) B P" >$@
 
 AC_Rep: gen$x
-       $(GENERATE) B R >$@
+       $(WRAPPER) "$(GENERATE) B R" >$@
 
 Version_Info: gen$x
-       $(GENERATE) B V >$@
+       $(WRAPPER) "$(GENERATE) B V" >$@
 
 Trace_Defs: gen$x
-       $(GENERATE) B T >$@
+       $(WRAPPER) "$(GENERATE) B T" >$@
 ################################################################################
 Menu_Opt_Rep: gen$x
-       $(GENERATE) M R >$@
+       $(WRAPPER) "$(GENERATE) M R" >$@
 
 Menu_Base_Defs: gen$x
-       $(GENERATE) M B >$@
+       $(WRAPPER) "$(GENERATE) M B" >$@
 
 Menu_Linker_Options: gen$x
-       $(GENERATE) M L >$@
+       $(WRAPPER) "$(GENERATE) M L" >$@
 
 Item_Rep: gen$x
-       $(GENERATE) M I >$@
+       $(WRAPPER) "$(GENERATE) M I" >$@
 ################################################################################
 Form_Opt_Rep: gen$x
-       $(GENERATE) F R >$@
+       $(WRAPPER) "$(GENERATE) F R" >$@
 
 Form_Base_Defs: gen$x
-       $(GENERATE) F B >$@
+       $(WRAPPER) "$(GENERATE) F B" >$@
 
 Form_Linker_Options: gen$x
-       $(GENERATE) F L >$@
+       $(WRAPPER) "$(GENERATE) F L" >$@
 
 Field_Rep: gen$x
-       $(GENERATE) F I >$@
+       $(WRAPPER) "$(GENERATE) F I" >$@
 ################################################################################
 Mouse_Base_Defs: gen$x
-       $(GENERATE) P B >$@
+       $(WRAPPER) "$(GENERATE) P B" >$@
 
 Mouse_Event_Rep: gen$x
-       $(GENERATE) P M >$@
+       $(WRAPPER) "$(GENERATE) P M" >$@
 
 Mouse_Events: gen$x
-       $(GENERATE) B E >$@
+       $(WRAPPER) "$(GENERATE) B E" >$@
 
 Panel_Linker_Options: gen$x
-       $(GENERATE) P L >$@
+       $(WRAPPER) "$(GENERATE) P L" >$@
 
 Chtype_Def: gen$x
-       $(GENERATE) E C >$@
+       $(WRAPPER) "$(GENERATE) E C" >$@
 
 Eti_Defs: gen$x
-       $(GENERATE) E E >$@
+       $(WRAPPER) "$(GENERATE) E E" >$@
 ################################################################################
 $(ADA_SRCDIR)/$(ABASE).ads:    $(srcdir)/$(ABASE).ads.m4 \
                                $(GEN_FILES1) $(srcdir)/normal.m4
index 634e7459ad59ea2411faba3a82185ea3525b735b..1c072bf607658d852e3977014fb04b5dcfe8313e 100644 (file)
@@ -28,7 +28,7 @@
 #
 #  Author:  Juergen Pfeifer, 1996
 #
-#  $Id: Makefile.in,v 1.30 2004/08/21 21:29:50 tom Exp $
+#  $Id: Makefile.in,v 1.31 2007/09/15 18:22:24 tom Exp $
 #
 .SUFFIXES:
 
@@ -197,7 +197,7 @@ distclean :: clean
 
 realclean :: distclean
 
-BASEDEPS=$(ABASE).ads $(ABASE)-aux.ads $(srcdir)/$(ABASE).adb
+BASEDEPS=$(ABASE).ads $(ABASE)-aux.ads $(ABASE).adb
 
 $(ALIB).o: $(srcdir)/$(ALIB).ads
        $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ALIB).ads
@@ -207,8 +207,8 @@ $(ABASE)-aux.o: $(srcdir)/$(ABASE)-aux.adb $(BASEDEPS)
        $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-aux.adb
 
 
-$(ABASE).o: $(srcdir)/$(ABASE).adb $(BASEDEPS)
-       $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE).adb
+$(ABASE).o: $(ABASE).adb $(BASEDEPS)
+       $(ADA) $(ADAFLAGS) -c -o $@ $(ABASE).adb
 
 
 $(ABASE)-terminfo.o: \
diff --git a/NEWS b/NEWS
index f9c3db4985e64ff240bf8e7b4ec48d887b9166d3..c4b4f665e622fa2bbd9449fb3ee57d44d8d5f70e 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.1166 2007/09/08 21:55:19 tom Exp $
+-- $Id: NEWS,v 1.1168 2007/09/15 21:33:37 tom Exp $
 -------------------------------------------------------------------------------
 
 This is a log of changes that ncurses has gone through since Zeyd started
@@ -45,6 +45,13 @@ 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.
 
+20070915
+       + modify Ada95/gen/Makefile to use shlib script, to simplify building
+         shared-library configuration on platforms lacking rpath support.
+       + build-fix for Ada95/src/Makefile to reflect changed dependency for
+         the terminal-interface-curses-aux.adb file which is now generated.
+       + restructuring test/worm.c, for use_window() example.
+
 20070908
        + add use_window() and use_screen() functions, to develop into support
          for threaded library (incomplete).
diff --git a/dist.mk b/dist.mk
index 705042348333fa9fb75459ce97c07ec199ac21cb..5c3eba1611762cdf1e8bed8b269853b589f8a262 100644 (file)
--- a/dist.mk
+++ b/dist.mk
@@ -25,7 +25,7 @@
 # use or other dealings in this Software without prior written               #
 # authorization.                                                             #
 ##############################################################################
-# $Id: dist.mk,v 1.609 2007/09/08 18:37:50 tom Exp $
+# $Id: dist.mk,v 1.610 2007/09/15 14:29:36 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 = 20070908
+NCURSES_PATCH = 20070915
 
 # We don't append the patch to the version, since this only applies to releases
 VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
index 15699625f1016a28be41eaa6aadd4db09a185ab7..4692668bdcfe6f43fcf4925ce641e0a1b04a431d 100644 (file)
@@ -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            *
@@ -61,7 +61,7 @@ Options:
   traces will be dumped.  The program stops and waits for one character of
   input at the beginning and end of the interval.
 
-  $Id: worm.c,v 1.41 2006/07/01 22:57:24 tom Exp $
+  $Id: worm.c,v 1.48 2007/09/15 21:42:16 tom Exp $
 */
 
 #include <test.priv.h>
@@ -77,17 +77,24 @@ static const short xinc[] =
 {
     -1, 0, 1, 1, 1, 0, -1, -1
 };
-static struct worm {
-    int orientation, head;
-    short *xpos, *ypos;
-} worm[40];
+
+typedef struct worm {
+    int orientation;
+    int head;
+    short *xpos;
+    short *ypos;
+    chtype attrs;
+} WORM;
+
+static WORM worm[40];
+static short **refs;
 
 static const char *field;
 static int length = 16, number = 3;
 static chtype trail = ' ';
 
 #ifdef TRACE
-static int generation, trace_start, trace_end, singlestep;
+static int generation, trace_start, trace_end;
 #endif /* TRACE */
 /* *INDENT-OFF* */
 static const struct options {
@@ -200,15 +207,110 @@ ranf(void)
     return ((float) r / 32768.);
 }
 
+static int
+draw_worm(WINDOW *win, void *data)
+{
+    WORM *w = (WORM *) data;
+    const struct options *op;
+
+    int x;
+    int y;
+    int h;
+
+    int bottom = LINES - 1;
+    int last = COLS - 1;
+
+    bool done = FALSE;
+
+    if ((x = w->xpos[h = w->head]) < 0) {
+       wmove(win, y = w->ypos[h] = bottom, x = w->xpos[h] = 0);
+       waddch(win, w->attrs);
+       refs[y][x]++;
+    } else {
+       y = w->ypos[h];
+    }
+
+    if (x > last)
+       x = last;
+    if (y > bottom)
+       y = bottom;
+
+    if (++h == length)
+       h = 0;
+
+    if (w->xpos[w->head = h] >= 0) {
+       int x1, y1;
+       x1 = w->xpos[h];
+       y1 = w->ypos[h];
+       if (y1 < LINES
+           && x1 < COLS
+           && --refs[y1][x1] == 0) {
+           wmove(win, y1, x1);
+           waddch(win, trail);
+       }
+    }
+
+    op = &(x == 0
+          ? (y == 0
+             ? upleft
+             : (y == bottom
+                ? lowleft
+                : left))
+          : (x == last
+             ? (y == 0
+                ? upright
+                : (y == bottom
+                   ? lowright
+                   : right))
+             : (y == 0
+                ? upper
+                : (y == bottom
+                   ? lower
+                   : normal))))[w->orientation];
+
+    switch (op->nopts) {
+    case 0:
+       done = TRUE;
+       break;
+    case 1:
+       w->orientation = op->opts[0];
+       break;
+    default:
+       w->orientation = op->opts[(int) (ranf() * (float) op->nopts)];
+       break;
+    }
+
+    if (!done) {
+       x += xinc[w->orientation];
+       y += yinc[w->orientation];
+       wmove(win, y, x);
+
+       if (y < 0)
+           y = 0;
+       waddch(win, w->attrs);
+
+       w->ypos[h] = y;
+       w->xpos[h] = x;
+       refs[y][x]++;
+    }
+
+    return done;
+}
+
+#if !defined(NCURSES_VERSION_PATCH) || (NCURSES_VERSION_PATCH < 20070915)
+static int
+use_window(WINDOW *win, int (*func)(WINDOW *, void *), void *data)
+{
+    return func(win, data);
+}
+#endif
+
 int
 main(int argc, char *argv[])
 {
-    short **ref;
     int x, y;
     int n;
     struct worm *w;
-    const struct options *op;
-    int h;
     short *ip;
     int last, bottom;
     bool done = FALSE;
@@ -244,9 +346,6 @@ main(int argc, char *argv[])
            trail = '.';
            break;
 #ifdef TRACE
-       case 'S':
-           singlestep = TRUE;
-           break;
        case 'T':
            trace_start = atoi(argv[++x]);
            trace_end = atoi(argv[++x]);
@@ -297,21 +396,24 @@ main(int argc, char *argv[])
     }
 #endif /* A_COLOR */
 
-    ref = typeMalloc(short *, LINES);
+    refs = typeMalloc(short *, LINES);
     for (y = 0; y < LINES; y++) {
-       ref[y] = typeMalloc(short, COLS);
+       refs[y] = typeMalloc(short, COLS);
        for (x = 0; x < COLS; x++) {
-           ref[y][x] = 0;
+           refs[y][x] = 0;
        }
     }
 
 #ifdef BADCORNER
     /* if addressing the lower right corner doesn't work in your curses */
-    ref[bottom][last] = 1;
+    refs[bottom][last] = 1;
 #endif /* BADCORNER */
 
     for (n = number, w = &worm[0]; --n >= 0; w++) {
-       w->orientation = w->head = 0;
+       w->attrs = flavor[n % SIZEOF(flavor)];
+       w->orientation = 0;
+       w->head = 0;
+
        if (!(ip = typeMalloc(short, (length + 1)))) {
            fprintf(stderr, "%s: out of memory\n", *argv);
            ExitProgram(EXIT_FAILURE);
@@ -340,48 +442,43 @@ main(int argc, char *argv[])
     }
     napms(10);
     refresh();
-#ifndef TRACE
     nodelay(stdscr, TRUE);
-#endif
 
     while (!done) {
-#ifdef TRACE
-       if (trace_start || trace_end) {
-           if (generation == trace_start) {
-               trace(TRACE_CALLS);
-               getch();
-           } else if (generation == trace_end) {
-               trace(0);
-               getch();
-           }
-
-           if (singlestep && generation > trace_start && generation < trace_end)
-               getch();
-
-           generation++;
-       }
-#else
        int ch;
 
        if ((ch = getch()) > 0) {
+#ifdef TRACE
+           if (trace_start || trace_end) {
+               if (generation == trace_start) {
+                   trace(TRACE_CALLS);
+                   getch();
+               } else if (generation == trace_end) {
+                   trace(0);
+                   getch();
+               }
+
+               generation++;
+           }
+#endif
 #ifdef KEY_RESIZE
            if (ch == KEY_RESIZE) {
                if (last != COLS - 1) {
                    for (y = 0; y <= bottom; y++) {
-                       ref[y] = typeRealloc(short, COLS, ref[y]);
+                       refs[y] = typeRealloc(short, COLS, refs[y]);
                        for (x = last + 1; x < COLS; x++)
-                           ref[y][x] = 0;
+                           refs[y][x] = 0;
                    }
                    last = COLS - 1;
                }
                if (bottom != LINES - 1) {
                    for (y = LINES; y <= bottom; y++)
-                       free(ref[y]);
-                   ref = typeRealloc(short *, LINES, ref);
+                       free(refs[y]);
+                   refs = typeRealloc(short *, LINES, refs);
                    for (y = bottom + 1; y < LINES; y++) {
-                       ref[y] = typeMalloc(short, COLS);
+                       refs[y] = typeMalloc(short, COLS);
                        for (x = 0; x < COLS; x++)
-                           ref[y][x] = 0;
+                           refs[y][x] = 0;
                    }
                    bottom = LINES - 1;
                }
@@ -400,54 +497,10 @@ main(int argc, char *argv[])
                nodelay(stdscr, TRUE);
            }
        }
-#endif /* TRACE */
 
        for (n = 0, w = &worm[0]; n < number; n++, w++) {
-           if ((x = w->xpos[h = w->head]) < 0) {
-               move(y = w->ypos[h] = bottom, x = w->xpos[h] = 0);
-               addch(flavor[n % SIZEOF(flavor)]);
-               ref[y][x]++;
-           } else {
-               y = w->ypos[h];
-           }
-           if (x > last)
-               x = last;
-           if (y > bottom)
-               y = bottom;
-           if (++h == length)
-               h = 0;
-           if (w->xpos[w->head = h] >= 0) {
-               int x1, y1;
-               x1 = w->xpos[h];
-               y1 = w->ypos[h];
-               if (y1 < LINES
-                   && x1 < COLS
-                   && --ref[y1][x1] == 0) {
-                   move(y1, x1);
-                   addch(trail);
-               }
-           }
-           op = &(x == 0 ? (y == 0 ? upleft : (y == bottom ? lowleft :
-                                               left)) :
-                  (x == last ? (y == 0 ? upright : (y == bottom ? lowright :
-                                                    right)) :
-                   (y == 0 ? upper : (y == bottom ? lower : normal))))[w->orientation];
-           switch (op->nopts) {
-           case 0:
+           if (use_window(stdscr, draw_worm, w))
                done = TRUE;
-               continue;
-           case 1:
-               w->orientation = op->opts[0];
-               break;
-           default:
-               w->orientation = op->opts[(int) (ranf() * (float) op->nopts)];
-           }
-           move(y += yinc[w->orientation], x += xinc[w->orientation]);
-
-           if (y < 0)
-               y = 0;
-           addch(flavor[n % SIZEOF(flavor)]);
-           ref[w->ypos[h] = y][w->xpos[h] = x]++;
        }
        napms(10);
        refresh();
@@ -456,9 +509,9 @@ main(int argc, char *argv[])
     cleanup();
 #ifdef NO_LEAKS
     for (y = 0; y < LINES; y++) {
-       free(ref[y]);
+       free(refs[y]);
     }
-    free(ref);
+    free(refs);
     for (n = number, w = &worm[0]; --n >= 0; w++) {
        free(w->xpos);
        free(w->ypos);