mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2025-03-07 16:16:53 +08:00
ncurses 5.6 - patch 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.
This commit is contained in:
parent
aabbbcb789
commit
e79c0691e5
@ -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
|
||||
|
@ -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: \
|
||||
|
9
NEWS
9
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).
|
||||
|
4
dist.mk
4
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)
|
||||
|
231
test/worm.c
231
test/worm.c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user