Remove trailing whitespace.
This commit is contained in:
parent
709e8f9ae1
commit
4399be3cbd
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=8858
@ -8,7 +8,7 @@ DPADD= ${LIBCURSES} ${LIBTERMCAP}
|
|||||||
LDADD= -lcurses -ltermcap
|
LDADD= -lcurses -ltermcap
|
||||||
HIDEGAME=hidegame
|
HIDEGAME=hidegame
|
||||||
|
|
||||||
beforeinstall:
|
beforeinstall:
|
||||||
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/gnuchess.book \
|
install -c -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/gnuchess.book \
|
||||||
${DESTDIR}/usr/share/games
|
${DESTDIR}/usr/share/games
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:05 $
|
# RCS Info: $Revision: 1.2 $ on $Date: 1994/01/07 11:10:39 $
|
||||||
# $Source: /a/cvs/386BSD/src/gnu/chess/Xchess/Makefile,v $
|
# $Source: /home/ncvs/src/gnu/games/chess/Xchess/Makefile,v $
|
||||||
# Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
# Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
#
|
#
|
||||||
# Makefile for xchess.
|
# Makefile for xchess.
|
||||||
@ -95,7 +95,7 @@ reopt: all
|
|||||||
|
|
||||||
install: all
|
install: all
|
||||||
|
|
||||||
source: $(SOURCE)
|
source: $(SOURCE)
|
||||||
|
|
||||||
tags: $(ALLFILES)
|
tags: $(ALLFILES)
|
||||||
ctags -w -t *.c *.h > /dev/null 2>&1
|
ctags -w -t *.c *.h > /dev/null 2>&1
|
||||||
@ -123,7 +123,7 @@ depend: $(SOURCE)
|
|||||||
echo '$$r makedep' >>eddep
|
echo '$$r makedep' >>eddep
|
||||||
echo 'w' >>eddep
|
echo 'w' >>eddep
|
||||||
ed - Makefile < eddep
|
ed - Makefile < eddep
|
||||||
rm eddep makedep
|
rm eddep makedep
|
||||||
echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
|
echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
|
||||||
echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
|
echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
|
||||||
echo '# see make depend above' >> Makefile
|
echo '# see make depend above' >> Makefile
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 86/11/23 17:17:04 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:12 $
|
||||||
* $Source: /users/faustus/xchess/RCS/XCircle.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/XCircle.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -143,7 +143,7 @@ XCircle(win, x, y, rad, start, end, width, height, pixel, func, planes)
|
|||||||
verts[0].flags |= VertexStartClosed;
|
verts[0].flags |= VertexStartClosed;
|
||||||
verts[j].x = verts[0].x;
|
verts[j].x = verts[0].x;
|
||||||
verts[j].y = verts[0].y;
|
verts[j].y = verts[0].y;
|
||||||
verts[j].flags = (verts[0].flags & ~VertexStartClosed) |
|
verts[j].flags = (verts[0].flags & ~VertexStartClosed) |
|
||||||
VertexEndClosed;
|
VertexEndClosed;
|
||||||
for (i = 0; i < 15; i++) {
|
for (i = 0; i < 15; i++) {
|
||||||
if (dp)
|
if (dp)
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/23 17:17:15 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:08 $
|
||||||
* $Source: /users/faustus/xchess/RCS/board.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/board.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -164,12 +164,12 @@ board_move(b, m)
|
|||||||
if (m->piece.color == WHITE) {
|
if (m->piece.color == WHITE) {
|
||||||
if (m->fromx == 0)
|
if (m->fromx == 0)
|
||||||
b->white_cant_castle_q = true;
|
b->white_cant_castle_q = true;
|
||||||
else if (m->fromx == 7)
|
else if (m->fromx == 7)
|
||||||
b->white_cant_castle_k = true;
|
b->white_cant_castle_k = true;
|
||||||
} else {
|
} else {
|
||||||
if (m->fromx == 0)
|
if (m->fromx == 0)
|
||||||
b->black_cant_castle_q = true;
|
b->black_cant_castle_q = true;
|
||||||
else if (m->fromx == 7)
|
else if (m->fromx == 7)
|
||||||
b->black_cant_castle_k = true;
|
b->black_cant_castle_k = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/26 12:09:41 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:15 $
|
||||||
* $Source: /users/faustus/xchess/RCS/button.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/button.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -52,7 +52,7 @@ static struct but {
|
|||||||
{ "Reset", 0, 80, 108, 29, RESTART } ,
|
{ "Reset", 0, 80, 108, 29, RESTART } ,
|
||||||
{ "Save", 109, 80, 108, 29, SAVE } ,
|
{ "Save", 109, 80, 108, 29, SAVE } ,
|
||||||
#define EASY_OFFSET 8
|
#define EASY_OFFSET 8
|
||||||
{ "Switch", 219, 80, 108, 29, SWITCH }
|
{ "Switch", 219, 80, 108, 29, SWITCH }
|
||||||
/* { "NoEasy", 219, 80, 108, 29, EASY }*/
|
/* { "NoEasy", 219, 80, 108, 29, EASY }*/
|
||||||
} ;
|
} ;
|
||||||
static int easy = 1;
|
static int easy = 1;
|
||||||
@ -69,7 +69,7 @@ button_draw(win)
|
|||||||
XSetLineAttributes(win->display, DefaultGC(win->display, 0),
|
XSetLineAttributes(win->display, DefaultGC(win->display, 0),
|
||||||
BORDER_WIDTH, LineSolid, CapButt,
|
BORDER_WIDTH, LineSolid, CapButt,
|
||||||
JoinMiter);
|
JoinMiter);
|
||||||
|
|
||||||
XDrawLine(win->display, win->buttonwin,
|
XDrawLine(win->display, win->buttonwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
0, 29, BUTTON_WIDTH, 29);
|
0, 29, BUTTON_WIDTH, 29);
|
||||||
@ -85,9 +85,9 @@ button_draw(win)
|
|||||||
|
|
||||||
XSetFont(win->display, DefaultGC(win->display, 0), win->large->fid);
|
XSetFont(win->display, DefaultGC(win->display, 0), win->large->fid);
|
||||||
XSetForeground(win->display, DefaultGC(win->display, 0),
|
XSetForeground(win->display, DefaultGC(win->display, 0),
|
||||||
win->textcolor.pixel);
|
win->textcolor.pixel);
|
||||||
XSetBackground(win->display, DefaultGC(win->display, 0),
|
XSetBackground(win->display, DefaultGC(win->display, 0),
|
||||||
win->textback.pixel);
|
win->textback.pixel);
|
||||||
|
|
||||||
for (i = 0; i < numbuts; i++) {
|
for (i = 0; i < numbuts; i++) {
|
||||||
x = (buts[i].width -
|
x = (buts[i].width -
|
||||||
@ -219,7 +219,7 @@ button_service(win, event)
|
|||||||
|
|
||||||
case SAVE:
|
case SAVE:
|
||||||
if (saveflag) {
|
if (saveflag) {
|
||||||
message_add(win,
|
message_add(win,
|
||||||
"Game is already being logged in file '", true);
|
"Game is already being logged in file '", true);
|
||||||
message_add(win, record_file, true);
|
message_add(win, record_file, true);
|
||||||
message_add(win, "'.\n", true);
|
message_add(win, "'.\n", true);
|
||||||
@ -248,12 +248,12 @@ button_service(win, event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message_add(win1,
|
message_add(win1,
|
||||||
"Clock stopped.\nHit 'Pause' again to restart.\n",
|
"Clock stopped.\nHit 'Pause' again to restart.\n",
|
||||||
false);
|
false);
|
||||||
if (!oneboard)
|
if (!oneboard)
|
||||||
message_add(win2,
|
message_add(win2,
|
||||||
"Clock stopped.\nHit 'Pause' again to restart.\n",
|
"Clock stopped.\nHit 'Pause' again to restart.\n",
|
||||||
false);
|
false);
|
||||||
clock_started = false;
|
clock_started = false;
|
||||||
} else {
|
} else {
|
||||||
@ -320,7 +320,7 @@ button_service(win, event)
|
|||||||
win->textcolor.pixel);
|
win->textcolor.pixel);
|
||||||
XSetBackground(win->display,
|
XSetBackground(win->display,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
win->textback.pixel);
|
win->textback.pixel);
|
||||||
|
|
||||||
XDrawImageString(win->display,
|
XDrawImageString(win->display,
|
||||||
win->buttonwin,
|
win->buttonwin,
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/26 12:09:47 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:08 $
|
||||||
* $Source: /users/faustus/xchess/RCS/clock.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/clock.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -59,7 +59,7 @@ clock_draw(win, col)
|
|||||||
Window w = ((col == WHITE) ? win->wclockwin : win->bclockwin);
|
Window w = ((col == WHITE) ? win->wclockwin : win->bclockwin);
|
||||||
|
|
||||||
/* Draw a clock face and the hands. */
|
/* Draw a clock face and the hands. */
|
||||||
XCircle(w, x, y, rad, 0.0, 0.0, 1, 1, win->textcolor.pixel, GXcopy,
|
XCircle(w, x, y, rad, 0.0, 0.0, 1, 1, win->textcolor.pixel, GXcopy,
|
||||||
AllPlanes);
|
AllPlanes);
|
||||||
rad -= 8;
|
rad -= 8;
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ clock_update()
|
|||||||
lastwhite = lastblack = now;
|
lastwhite = lastblack = now;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (white_running) {
|
if (white_running) {
|
||||||
whiteseconds += now - lastwhite;
|
whiteseconds += now - lastwhite;
|
||||||
lastwhite = now;
|
lastwhite = now;
|
||||||
@ -198,7 +198,7 @@ dohands(win, col)
|
|||||||
{
|
{
|
||||||
int cx = CLOCK_WIDTH / 2, cy = CLOCK_WIDTH / 2;
|
int cx = CLOCK_WIDTH / 2, cy = CLOCK_WIDTH / 2;
|
||||||
double *h = (col == WHITE) ? win->whitehands : win->blackhands;
|
double *h = (col == WHITE) ? win->whitehands : win->blackhands;
|
||||||
Window w = (col == WHITE) ? win->wclockwin : win->bclockwin;
|
Window w = (col == WHITE) ? win->wclockwin : win->bclockwin;
|
||||||
long secs = (col == WHITE) ? whiteseconds : blackseconds;
|
long secs = (col == WHITE) ? whiteseconds : blackseconds;
|
||||||
int rad, x, y, i;
|
int rad, x, y, i;
|
||||||
|
|
||||||
@ -272,11 +272,11 @@ hilight(win, col, on)
|
|||||||
BORDER_WIDTH, LineSolid, CapButt, JoinMiter);
|
BORDER_WIDTH, LineSolid, CapButt, JoinMiter);
|
||||||
XSetFont(win->display, DefaultGC(win->display, 0),
|
XSetFont(win->display, DefaultGC(win->display, 0),
|
||||||
win->large->fid);
|
win->large->fid);
|
||||||
|
|
||||||
XDrawLine(win->display, w, DefaultGC(win->display, 0),
|
XDrawLine(win->display, w, DefaultGC(win->display, 0),
|
||||||
0, CLOCK_HEIGHT - 26,
|
0, CLOCK_HEIGHT - 26,
|
||||||
CLOCK_WIDTH, CLOCK_HEIGHT - 26);
|
CLOCK_WIDTH, CLOCK_HEIGHT - 26);
|
||||||
|
|
||||||
XDrawImageString(win->display, w, DefaultGC(win->display, 0),
|
XDrawImageString(win->display, w, DefaultGC(win->display, 0),
|
||||||
(CLOCK_WIDTH - x) / 2, CLOCK_HEIGHT,
|
(CLOCK_WIDTH - x) / 2, CLOCK_HEIGHT,
|
||||||
s, strlen(s));
|
s, strlen(s));
|
||||||
|
@ -19,8 +19,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/23 17:17:32 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:11 $
|
||||||
* $Source: /users/faustus/xchess/RCS/control.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/control.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -154,7 +154,7 @@ button_released(event, win)
|
|||||||
thismove->type = QCASTLE;
|
thismove->type = QCASTLE;
|
||||||
else
|
else
|
||||||
thismove->type = MOVE;
|
thismove->type = MOVE;
|
||||||
|
|
||||||
/* Now check the en-passant case... */
|
/* Now check the en-passant case... */
|
||||||
if ((thismove->type == MOVE) && ((thismove->tox == thismove->fromx + 1)
|
if ((thismove->type == MOVE) && ((thismove->tox == thismove->fromx + 1)
|
||||||
|| (thismove->tox == thismove->fromx - 1)) &&
|
|| (thismove->tox == thismove->fromx - 1)) &&
|
||||||
@ -278,7 +278,7 @@ screen_move(m)
|
|||||||
win_drawpiece(&m->piece, m->toy, m->tox, BLACK);
|
win_drawpiece(&m->piece, m->toy, m->tox, BLACK);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KCASTLE:
|
case KCASTLE:
|
||||||
if (m->piece.color == WHITE) {
|
if (m->piece.color == WHITE) {
|
||||||
win_erasepiece(7, 4, WHITE);
|
win_erasepiece(7, 4, WHITE);
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.3 $ on $Date: 86/11/26 12:09:54 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:12 $
|
||||||
* $Source: /users/faustus/xchess/RCS/jail.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/jail.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -82,7 +82,7 @@ jail_draw(win)
|
|||||||
win->textcolor.pixel);
|
win->textcolor.pixel);
|
||||||
XSetBackground(win->display, DefaultGC(win->display, 0),
|
XSetBackground(win->display, DefaultGC(win->display, 0),
|
||||||
win->textback.pixel);
|
win->textback.pixel);
|
||||||
|
|
||||||
XDrawImageString(win->display, win->jailwin,
|
XDrawImageString(win->display, win->jailwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
(JAIL_WIDTH - i) / 2, 20, JAIL_HEADER,
|
(JAIL_WIDTH - i) / 2, 20, JAIL_HEADER,
|
||||||
@ -96,7 +96,7 @@ jail_draw(win)
|
|||||||
FillSolid);
|
FillSolid);
|
||||||
XSetFunction(win->display, DefaultGC(win->display, 0),
|
XSetFunction(win->display, DefaultGC(win->display, 0),
|
||||||
GXcopy);
|
GXcopy);
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
for (i = 0; i < 16; i++)
|
||||||
if (pos[i]) {
|
if (pos[i]) {
|
||||||
p.color = WHITE;
|
p.color = WHITE;
|
||||||
@ -105,7 +105,7 @@ jail_draw(win)
|
|||||||
tmpPM = XCreateBitmapFromData(win->display,
|
tmpPM = XCreateBitmapFromData(win->display,
|
||||||
win->jailwin, bits,
|
win->jailwin, bits,
|
||||||
32, 32);
|
32, 32);
|
||||||
|
|
||||||
XCopyPlane(win->display, tmpPM, win->jailwin,
|
XCopyPlane(win->display, tmpPM, win->jailwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
0, 0, 32, 32,
|
0, 0, 32, 32,
|
||||||
@ -127,7 +127,7 @@ jail_draw(win)
|
|||||||
tmpPM = XCreateBitmapFromData(win->display,
|
tmpPM = XCreateBitmapFromData(win->display,
|
||||||
win->jailwin, bits,
|
win->jailwin, bits,
|
||||||
32, 32);
|
32, 32);
|
||||||
|
|
||||||
XCopyPlane(win->display, tmpPM, win->jailwin,
|
XCopyPlane(win->display, tmpPM, win->jailwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
0, 0, 32, 32,
|
0, 0, 32, 32,
|
||||||
@ -151,7 +151,7 @@ jail_add(p)
|
|||||||
int i = piecepos(p, false);
|
int i = piecepos(p, false);
|
||||||
char *bits;
|
char *bits;
|
||||||
Pixmap tmpPM;
|
Pixmap tmpPM;
|
||||||
|
|
||||||
pos[i] = true;
|
pos[i] = true;
|
||||||
|
|
||||||
bits = bitsget(p);
|
bits = bitsget(p);
|
||||||
@ -165,14 +165,14 @@ jail_add(p)
|
|||||||
tmpPM = XCreateBitmapFromData(win1->display,
|
tmpPM = XCreateBitmapFromData(win1->display,
|
||||||
win1->jailwin, bits,
|
win1->jailwin, bits,
|
||||||
32, 32);
|
32, 32);
|
||||||
|
|
||||||
XCopyPlane(win1->display, tmpPM, win1->jailwin,
|
XCopyPlane(win1->display, tmpPM, win1->jailwin,
|
||||||
DefaultGC(win1->display, 0),
|
DefaultGC(win1->display, 0),
|
||||||
0, 0, 32, 32,
|
0, 0, 32, 32,
|
||||||
5 + (i % 8) * 32, ((i >= 16) ? 30 : 25) + (i / 8) * 32,
|
5 + (i % 8) * 32, ((i >= 16) ? 30 : 25) + (i / 8) * 32,
|
||||||
1);
|
1);
|
||||||
XFreePixmap(win1->display, tmpPM);
|
XFreePixmap(win1->display, tmpPM);
|
||||||
|
|
||||||
if (!oneboard) {
|
if (!oneboard) {
|
||||||
XSetState(win2->display, DefaultGC(win2->display, 0),
|
XSetState(win2->display, DefaultGC(win2->display, 0),
|
||||||
win2->blackpiece.pixel,
|
win2->blackpiece.pixel,
|
||||||
@ -184,7 +184,7 @@ jail_add(p)
|
|||||||
tmpPM = XCreateBitmapFromData(win2->display,
|
tmpPM = XCreateBitmapFromData(win2->display,
|
||||||
win2->jailwin, bits,
|
win2->jailwin, bits,
|
||||||
32, 32);
|
32, 32);
|
||||||
|
|
||||||
XCopyPlane(win2->display, tmpPM, win2->jailwin,
|
XCopyPlane(win2->display, tmpPM, win2->jailwin,
|
||||||
DefaultGC(win2->display, 0),
|
DefaultGC(win2->display, 0),
|
||||||
0, 0, 32, 32,
|
0, 0, 32, 32,
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/26 12:10:22 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:14 $
|
||||||
* $Source: /users/faustus/xchess/RCS/message.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/message.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -38,7 +38,7 @@ void
|
|||||||
message_init(win)
|
message_init(win)
|
||||||
windata *win;
|
windata *win;
|
||||||
{
|
{
|
||||||
TxtGrab(win->display, win->messagewin, "xchess", win->medium,
|
TxtGrab(win->display, win->messagewin, "xchess", win->medium,
|
||||||
win->textback.pixel, win->textcolor.pixel,
|
win->textback.pixel, win->textcolor.pixel,
|
||||||
win->cursorcolor.pixel);
|
win->cursorcolor.pixel);
|
||||||
TxtAddFont(win->display, win->messagewin, 1, win->large, win->textcolor.pixel);
|
TxtAddFont(win->display, win->messagewin, 1, win->large, win->textcolor.pixel);
|
||||||
|
@ -19,8 +19,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 86/11/23 17:17:59 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:06 $
|
||||||
* $Source: /users/faustus/xchess/RCS/parse.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/parse.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -71,7 +71,7 @@ load_game(file)
|
|||||||
message_add(win1, buf, false);
|
message_add(win1, buf, false);
|
||||||
if (!oneboard)
|
if (!oneboard)
|
||||||
message_add(win2, buf, false);
|
message_add(win2, buf, false);
|
||||||
|
|
||||||
fgets(buf, BSIZE, fp);
|
fgets(buf, BSIZE, fp);
|
||||||
if (eq(buf, "\tenglish\n"))
|
if (eq(buf, "\tenglish\n"))
|
||||||
eflag = true;
|
eflag = true;
|
||||||
@ -106,7 +106,7 @@ load_game(file)
|
|||||||
|
|
||||||
while (fgets(buf, BSIZE, fp))
|
while (fgets(buf, BSIZE, fp))
|
||||||
message_add(win1, buf, false);
|
message_add(win1, buf, false);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -179,7 +179,7 @@ parse_file(fp, b, english)
|
|||||||
* name followed by a row number. If the column name is kr, kn, kb, k, q,
|
* name followed by a row number. If the column name is kr, kn, kb, k, q,
|
||||||
* qb, qn, or qr, then the row number is according to the english system,
|
* qb, qn, or qr, then the row number is according to the english system,
|
||||||
* or if it is a-h then it is according to the international system.
|
* or if it is a-h then it is according to the international system.
|
||||||
*
|
*
|
||||||
*** As of now the spec must include the position.
|
*** As of now the spec must include the position.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -380,7 +380,7 @@ if (debug) fprintf(stderr, "(alg) parsing %s\n", buf);
|
|||||||
else if ((m->piece.type == KING) && (m->fromy == m->toy) &&
|
else if ((m->piece.type == KING) && (m->fromy == m->toy) &&
|
||||||
(m->fromx == 4) && (m->tox == 2))
|
(m->fromx == 4) && (m->tox == 2))
|
||||||
m->type = QCASTLE;
|
m->type = QCASTLE;
|
||||||
|
|
||||||
return (m);
|
return (m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,9 +20,9 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 86/11/26 12:10:38 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:13 $
|
||||||
* $Source: /users/faustus/xchess/RCS/popup.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/popup.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* faustus@cad.berkeley.edu, ucbvax!faustus
|
* faustus@cad.berkeley.edu, ucbvax!faustus
|
||||||
* Permission is granted to modify and re-distribute this code in any manner
|
* Permission is granted to modify and re-distribute this code in any manner
|
||||||
* as long as this notice is preserved. All standard disclaimers apply.
|
* as long as this notice is preserved. All standard disclaimers apply.
|
||||||
@ -75,7 +75,7 @@ pop_question(win, text)
|
|||||||
XMapRaised(win->display, w);
|
XMapRaised(win->display, w);
|
||||||
XSetFont(win->display, DefaultGC(win->display, 0),
|
XSetFont(win->display, DefaultGC(win->display, 0),
|
||||||
win->medium->fid);
|
win->medium->fid);
|
||||||
|
|
||||||
for (i = 0, s = text; i < nlines - 4; i++) {
|
for (i = 0, s = text; i < nlines - 4; i++) {
|
||||||
for (t = s, j = 0; *t && (*t != '\n'); t++, j++)
|
for (t = s, j = 0; *t && (*t != '\n'); t++, j++)
|
||||||
;
|
;
|
||||||
|
@ -20,7 +20,7 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 1994/01/07 11:10:40 $
|
/* RCS Info: $Revision: 1.3 $ on $Date: 1994/11/04 02:11:30 $
|
||||||
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/program.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/program.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
@ -62,7 +62,7 @@ program_init(name)
|
|||||||
sprintf (moves, "%d", movesperunit);
|
sprintf (moves, "%d", movesperunit);
|
||||||
if (proghost)
|
if (proghost)
|
||||||
execl("/usr/ucb/rsh", "rsh", proghost, name,
|
execl("/usr/ucb/rsh", "rsh", proghost, name,
|
||||||
moves, time,
|
moves, time,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
else
|
else
|
||||||
execl(name, name, moves, time, (char *) NULL);
|
execl(name, name, moves, time, (char *) NULL);
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.4 $ on $Date: 86/11/23 17:18:20 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:09 $
|
||||||
* $Source: /users/faustus/xchess/RCS/record.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/record.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -56,7 +56,7 @@ record_init(win)
|
|||||||
i = XTextWidth(win->medium, RECORD_HEADER,
|
i = XTextWidth(win->medium, RECORD_HEADER,
|
||||||
sizeof(RECORD_HEADER) - 1);
|
sizeof(RECORD_HEADER) - 1);
|
||||||
i = (40 * win->small->max_bounds.width - i *
|
i = (40 * win->small->max_bounds.width - i *
|
||||||
win->medium->max_bounds.width) /
|
win->medium->max_bounds.width) /
|
||||||
win->medium->max_bounds.width / 2;
|
win->medium->max_bounds.width / 2;
|
||||||
TxtGrab(win->display, win->recwin, "xchess", win->small, win->textback.pixel,
|
TxtGrab(win->display, win->recwin, "xchess", win->small, win->textback.pixel,
|
||||||
win->textcolor.pixel, win->cursorcolor.pixel);
|
win->textcolor.pixel, win->cursorcolor.pixel);
|
||||||
@ -64,7 +64,7 @@ record_init(win)
|
|||||||
for (; i > 0; i++)
|
for (; i > 0; i++)
|
||||||
TxtWriteStr(win->display, win->recwin, " ");
|
TxtWriteStr(win->display, win->recwin, " ");
|
||||||
TxtWriteStr(win->display, win->recwin, RECORD_HEADER);
|
TxtWriteStr(win->display, win->recwin, RECORD_HEADER);
|
||||||
|
|
||||||
if (saveflag) {
|
if (saveflag) {
|
||||||
if (!(backup = fopen(record_file, "w"))) {
|
if (!(backup = fopen(record_file, "w"))) {
|
||||||
perror(record_file);
|
perror(record_file);
|
||||||
@ -72,7 +72,7 @@ record_init(win)
|
|||||||
} else {
|
} else {
|
||||||
fprintf(backup, "X Chess -- %s\n", datestring());
|
fprintf(backup, "X Chess -- %s\n", datestring());
|
||||||
if (dispname2)
|
if (dispname2)
|
||||||
fprintf(backup, "\tWhite on %s, black on %s\n",
|
fprintf(backup, "\tWhite on %s, black on %s\n",
|
||||||
dispname1, dispname2);
|
dispname1, dispname2);
|
||||||
else
|
else
|
||||||
fprintf(backup, "\tGame played on %s\n",
|
fprintf(backup, "\tGame played on %s\n",
|
||||||
@ -136,7 +136,7 @@ record_save()
|
|||||||
}
|
}
|
||||||
fprintf(fp, "X Chess -- %s\n", datestring());
|
fprintf(fp, "X Chess -- %s\n", datestring());
|
||||||
if (dispname2)
|
if (dispname2)
|
||||||
fprintf(fp, "\tWhite on %s, black on %s\n",
|
fprintf(fp, "\tWhite on %s, black on %s\n",
|
||||||
dispname1, dispname2);
|
dispname1, dispname2);
|
||||||
else
|
else
|
||||||
fprintf(fp, "\tGame played on %s\n", dispname1);
|
fprintf(fp, "\tGame played on %s\n", dispname1);
|
||||||
@ -201,7 +201,7 @@ record_back()
|
|||||||
s = buf;
|
s = buf;
|
||||||
for (i = 0; *s != '\0'; i++)
|
for (i = 0; *s != '\0'; i++)
|
||||||
*s++ = ''; /* control H, backspace */
|
*s++ = ''; /* control H, backspace */
|
||||||
|
|
||||||
TxtWriteStr(win1->display, win1->recwin, buf);
|
TxtWriteStr(win1->display, win1->recwin, buf);
|
||||||
if (!oneboard) {
|
if (!oneboard) {
|
||||||
TxtWriteStr(win2->display, win2->recwin, buf);
|
TxtWriteStr(win2->display, win2->recwin, buf);
|
||||||
@ -279,9 +279,9 @@ movestring(m)
|
|||||||
sprintf(buf, "something strange");
|
sprintf(buf, "something strange");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ((m->piece.type == PAWN) && (((m->piece.color == BLACK) &&
|
if ((m->piece.type == PAWN) && (((m->piece.color == BLACK) &&
|
||||||
(m->toy == 7)) || ((m->piece.color == WHITE) &&
|
(m->toy == 7)) || ((m->piece.color == WHITE) &&
|
||||||
(m->toy == 0))))
|
(m->toy == 0))))
|
||||||
strcat(buf, "(Q)");
|
strcat(buf, "(Q)");
|
||||||
|
|
||||||
#ifdef smartass
|
#ifdef smartass
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A Scrollable Text Output Window
|
* A Scrollable Text Output Window
|
||||||
*
|
*
|
||||||
* David Harrison
|
* David Harrison
|
||||||
* University of California, Berkeley
|
* University of California, Berkeley
|
||||||
* 1986
|
* 1986
|
||||||
*
|
*
|
||||||
@ -204,7 +204,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
XWindowAttributes winInfo; /* Window information */
|
XWindowAttributes winInfo; /* Window information */
|
||||||
int index;
|
int index;
|
||||||
XGCValues gc_val;
|
XGCValues gc_val;
|
||||||
|
|
||||||
if (textWindows == (XAssocTable *) 0) {
|
if (textWindows == (XAssocTable *) 0) {
|
||||||
textWindows = XCreateAssocTable(32);
|
textWindows = XCreateAssocTable(32);
|
||||||
if (textWindows == (XAssocTable *) 0) return(0);
|
if (textWindows == (XAssocTable *) 0) return(0);
|
||||||
@ -259,7 +259,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
winInfo.width - BARSIZE,
|
winInfo.width - BARSIZE,
|
||||||
0, BARSIZE - (2*BARBORDER),
|
0, BARSIZE - (2*BARBORDER),
|
||||||
winInfo.height - (2*BARBORDER),
|
winInfo.height - (2*BARBORDER),
|
||||||
BARBORDER,
|
BARBORDER,
|
||||||
fg, bg);
|
fg, bg);
|
||||||
XSelectInput(display, newWin->scrollBar, ExposureMask|ButtonReleaseMask);
|
XSelectInput(display, newWin->scrollBar, ExposureMask|ButtonReleaseMask);
|
||||||
XMapRaised(display, newWin->scrollBar);
|
XMapRaised(display, newWin->scrollBar);
|
||||||
@ -302,7 +302,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
newWin->fontGC[index] = 0;
|
newWin->fontGC[index] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Initialize size of first line */
|
/* Initialize size of first line */
|
||||||
newWin->txtBuffer[0]->lineHeight = newWin->theFonts[0].ascent +
|
newWin->txtBuffer[0]->lineHeight = newWin->theFonts[0].ascent +
|
||||||
newWin->theFonts[0].descent;
|
newWin->theFonts[0].descent;
|
||||||
@ -391,7 +391,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
(startPos > 0) && (textInfo->mainBuffer[startPos] != '\n');
|
(startPos > 0) && (textInfo->mainBuffer[startPos] != '\n');
|
||||||
startPos--)
|
startPos--)
|
||||||
/* null loop body */;
|
/* null loop body */;
|
||||||
|
|
||||||
/* Clear out the old line start array */
|
/* Clear out the old line start array */
|
||||||
for (index = 0; index < textInfo->numLines; index++) {
|
for (index = 0; index < textInfo->numLines; index++) {
|
||||||
InitLine(textInfo->txtBuffer[index]);
|
InitLine(textInfo->txtBuffer[index]);
|
||||||
@ -411,7 +411,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
curfont = 0;
|
curfont = 0;
|
||||||
for (index = 0; index < textInfo->bufSpot; index++) {
|
for (index = 0; index < textInfo->bufSpot; index++) {
|
||||||
theChar = bufptr[index] & CHARMASK;
|
theChar = bufptr[index] & CHARMASK;
|
||||||
|
|
||||||
if ((bufptr[index] & FONTMASK) != curfont) {
|
if ((bufptr[index] & FONTMASK) != curfont) {
|
||||||
int newFontNum, heightDiff;
|
int newFontNum, heightDiff;
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ int newColor; /* Color of font */
|
|||||||
struct txtWin *textInfo;
|
struct txtWin *textInfo;
|
||||||
int redrawFlag;
|
int redrawFlag;
|
||||||
XGCValues gc_val;
|
XGCValues gc_val;
|
||||||
|
|
||||||
if ((fontNumber < 0) || (fontNumber >= MAXFONTS)) return 0;
|
if ((fontNumber < 0) || (fontNumber >= MAXFONTS)) return 0;
|
||||||
if ((textInfo = (struct txtWin *)
|
if ((textInfo = (struct txtWin *)
|
||||||
XLookUpAssoc(display, textWindows, (XID) textWin)) == 0)
|
XLookUpAssoc(display, textWindows, (XID) textWin)) == 0)
|
||||||
@ -518,7 +518,7 @@ int newColor; /* Color of font */
|
|||||||
gc_val.plane_mask = AllPlanes;
|
gc_val.plane_mask = AllPlanes;
|
||||||
gc_val.graphics_exposures = 1;
|
gc_val.graphics_exposures = 1;
|
||||||
gc_val.function = GXcopy;
|
gc_val.function = GXcopy;
|
||||||
|
|
||||||
if (textInfo->fontGC[fontNumber] != 0)
|
if (textInfo->fontGC[fontNumber] != 0)
|
||||||
{
|
{
|
||||||
XChangeGC(display, textInfo->fontGC[fontNumber],
|
XChangeGC(display, textInfo->fontGC[fontNumber],
|
||||||
@ -532,7 +532,7 @@ int newColor; /* Color of font */
|
|||||||
GCFunction |
|
GCFunction |
|
||||||
GCPlaneMask |
|
GCPlaneMask |
|
||||||
GCGraphicsExposures,
|
GCGraphicsExposures,
|
||||||
&gc_val);
|
&gc_val);
|
||||||
|
|
||||||
|
|
||||||
redrawFlag = (textInfo->theFonts[fontNumber].fid != 0) &&
|
redrawFlag = (textInfo->theFonts[fontNumber].fid != 0) &&
|
||||||
@ -622,7 +622,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
if (bottom == textInfo->h-(2*BARBORDER)) bottom--;
|
if (bottom == textInfo->h-(2*BARBORDER)) bottom--;
|
||||||
|
|
||||||
XFillRectangle(display, textInfo->scrollBar,
|
XFillRectangle(display, textInfo->scrollBar,
|
||||||
textInfo->bgGC,
|
textInfo->bgGC,
|
||||||
0, 0, BARSIZE, top-1);
|
0, 0, BARSIZE, top-1);
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
XFillRectangle(display, textInfo->scrollBar,
|
XFillRectangle(display, textInfo->scrollBar,
|
||||||
@ -648,7 +648,7 @@ Display *display;
|
|||||||
Window w;
|
Window w;
|
||||||
/*
|
/*
|
||||||
* This routine clears a scrollable text window. It resets the current
|
* This routine clears a scrollable text window. It resets the current
|
||||||
* writing position to the upper left hand corner of the screen.
|
* writing position to the upper left hand corner of the screen.
|
||||||
* NOTE: THIS ALSO CLEARS THE CONTENTS OF THE TEXT WINDOW BUFFER AND
|
* NOTE: THIS ALSO CLEARS THE CONTENTS OF THE TEXT WINDOW BUFFER AND
|
||||||
* RESETS THE SCROLL BAR. Returns 0 if the window is not a text window.
|
* RESETS THE SCROLL BAR. Returns 0 if the window is not a text window.
|
||||||
* This should be used *instead* of XClear.
|
* This should be used *instead* of XClear.
|
||||||
@ -674,7 +674,7 @@ Window w;
|
|||||||
textInfo->endLine = 0;
|
textInfo->endLine = 0;
|
||||||
textInfo->curLine = 0;
|
textInfo->curLine = 0;
|
||||||
textInfo->curX = 0;
|
textInfo->curX = 0;
|
||||||
textInfo->curY = YPADDING + textInfo->theFonts[textInfo->curFont].ascent
|
textInfo->curY = YPADDING + textInfo->theFonts[textInfo->curFont].ascent
|
||||||
+ textInfo->theFonts[textInfo->curFont].descent;
|
+ textInfo->theFonts[textInfo->curFont].descent;
|
||||||
|
|
||||||
textInfo->bottomSpace = textInfo->h - YPADDING -
|
textInfo->bottomSpace = textInfo->h - YPADDING -
|
||||||
@ -1119,7 +1119,7 @@ int ypos; /* Y position for line */
|
|||||||
curX += CharSize(textInfo, lineIndex, index);
|
curX += CharSize(textInfo, lineIndex, index);
|
||||||
glyph++;
|
glyph++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush out the glyphs */
|
/* Flush out the glyphs */
|
||||||
XFillRectangle(display, textInfo->mainWindow,
|
XFillRectangle(display, textInfo->mainWindow,
|
||||||
textInfo->bgGC,
|
textInfo->bgGC,
|
||||||
@ -1191,7 +1191,7 @@ int flagWord; /* DODISP or nothing */
|
|||||||
if ((textInfo->curY + thisLine->lineHeight + heightDiff +
|
if ((textInfo->curY + thisLine->lineHeight + heightDiff +
|
||||||
INTERLINE) > textInfo->h)
|
INTERLINE) > textInfo->h)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* General approach: "unscroll" the last line up
|
* General approach: "unscroll" the last line up
|
||||||
* and then call ScrollDown to do the right thing.
|
* and then call ScrollDown to do the right thing.
|
||||||
*/
|
*/
|
||||||
@ -1210,7 +1210,7 @@ int flagWord; /* DODISP or nothing */
|
|||||||
(textInfo->bottomSpace + INTERLINE +
|
(textInfo->bottomSpace + INTERLINE +
|
||||||
thisLine->lineHeight);
|
thisLine->lineHeight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Just update bottom space */
|
/* Just update bottom space */
|
||||||
textInfo->bottomSpace -= heightDiff;
|
textInfo->bottomSpace -= heightDiff;
|
||||||
@ -1251,7 +1251,7 @@ register char *str; /* 0 terminated string */
|
|||||||
* - A new font can be chosen using the sequence '^F<digit>' where
|
* - A new font can be chosen using the sequence '^F<digit>' where
|
||||||
* <digit> is 0-7. The directive will be ignored if
|
* <digit> is 0-7. The directive will be ignored if
|
||||||
* there is no font in the specified slot.
|
* there is no font in the specified slot.
|
||||||
* Returns 0 if something went wrong.
|
* Returns 0 if something went wrong.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
register int fontIndex;
|
register int fontIndex;
|
||||||
@ -1260,7 +1260,7 @@ register char *str; /* 0 terminated string */
|
|||||||
|
|
||||||
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* See if screen needs to be updated */
|
/* See if screen needs to be updated */
|
||||||
if (textInfo->flagWord & SCREENWRONG) {
|
if (textInfo->flagWord & SCREENWRONG) {
|
||||||
TxtRepaint(display, textInfo->mainWindow);
|
TxtRepaint(display, textInfo->mainWindow);
|
||||||
@ -1292,7 +1292,7 @@ register char *str; /* 0 terminated string */
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inline code for handling normal character case */
|
/* Inline code for handling normal character case */
|
||||||
if ((*str >= LOWCHAR) && (*str <= HIGHCHAR)) {
|
if ((*str >= LOWCHAR) && (*str <= HIGHCHAR)) {
|
||||||
register XFontStruct *thisFont;
|
register XFontStruct *thisFont;
|
||||||
@ -1324,21 +1324,21 @@ register char *str; /* 0 terminated string */
|
|||||||
HandleNewLine(display, textInfo, DODISP | NONEWLINE);
|
HandleNewLine(display, textInfo, DODISP | NONEWLINE);
|
||||||
thisLine = textInfo->txtBuffer[textInfo->curLine];
|
thisLine = textInfo->txtBuffer[textInfo->curLine];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ready to draw character */
|
/* Ready to draw character */
|
||||||
XDrawString(display, textInfo->mainWindow,
|
XDrawString(display, textInfo->mainWindow,
|
||||||
DEFAULT_GC,
|
DEFAULT_GC,
|
||||||
textInfo->curX += charWidth,
|
textInfo->curX += charWidth,
|
||||||
textInfo->curY + thisLine->lineHeight,
|
textInfo->curY + thisLine->lineHeight,
|
||||||
str, 1);
|
str, 1);
|
||||||
|
|
||||||
/* Append character onto main buffer */
|
/* Append character onto main buffer */
|
||||||
if (textInfo->bufSpot >= textInfo->bufAlloc)
|
if (textInfo->bufSpot >= textInfo->bufAlloc)
|
||||||
/* Make room for more characters */
|
/* Make room for more characters */
|
||||||
ExpandBuffer(textInfo);
|
ExpandBuffer(textInfo);
|
||||||
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
||||||
(textInfo->curFont << FONTSHIFT) | (*str);
|
(textInfo->curFont << FONTSHIFT) | (*str);
|
||||||
|
|
||||||
/* Update the line start array */
|
/* Update the line start array */
|
||||||
thisLine->lineLength += 1;
|
thisLine->lineLength += 1;
|
||||||
thisLine->lineWidth += charWidth;
|
thisLine->lineWidth += charWidth;
|
||||||
@ -1384,7 +1384,7 @@ register char *str; /* NULL terminated string */
|
|||||||
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)
|
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)
|
||||||
) == 0)
|
) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for ( /* str is ok */ ; (*str != 0) ; str++) {
|
for ( /* str is ok */ ; (*str != 0) ; str++) {
|
||||||
/* Check to see if we are waiting on a font */
|
/* Check to see if we are waiting on a font */
|
||||||
if (textInfo->flagWord & FONTNUMWAIT) {
|
if (textInfo->flagWord & FONTNUMWAIT) {
|
||||||
@ -1402,7 +1402,7 @@ register char *str; /* NULL terminated string */
|
|||||||
register XFontStruct *thisFont;
|
register XFontStruct *thisFont;
|
||||||
register struct txtLine *thisLine;
|
register struct txtLine *thisLine;
|
||||||
register int charWidth;
|
register int charWidth;
|
||||||
|
|
||||||
/* Determine size of character */
|
/* Determine size of character */
|
||||||
thisFont = &(textInfo->theFonts[textInfo->curFont]);
|
thisFont = &(textInfo->theFonts[textInfo->curFont]);
|
||||||
|
|
||||||
@ -1429,7 +1429,7 @@ register char *str; /* NULL terminated string */
|
|||||||
ExpandBuffer(textInfo);
|
ExpandBuffer(textInfo);
|
||||||
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
||||||
(textInfo->curFont << FONTSHIFT) | (*str);
|
(textInfo->curFont << FONTSHIFT) | (*str);
|
||||||
|
|
||||||
/* Update the line start array */
|
/* Update the line start array */
|
||||||
thisLine->lineLength += 1;
|
thisLine->lineLength += 1;
|
||||||
thisLine->lineWidth += charWidth;
|
thisLine->lineWidth += charWidth;
|
||||||
@ -1455,7 +1455,7 @@ Display *display;
|
|||||||
Window w;
|
Window w;
|
||||||
/*
|
/*
|
||||||
* Repaints the given scrollable text window. The routine repaints
|
* Repaints the given scrollable text window. The routine repaints
|
||||||
* the entire window. For handling exposure events, the TxtFilter
|
* the entire window. For handling exposure events, the TxtFilter
|
||||||
* routine should be used.
|
* routine should be used.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@ -1589,7 +1589,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
0, textInfo->h - textInfo->bottomSpace,
|
0, textInfo->h - textInfo->bottomSpace,
|
||||||
textInfo->w, textInfo->bottomSpace);
|
textInfo->w, textInfo->bottomSpace);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UpdateExposures(display, textInfo);
|
UpdateExposures(display, textInfo);
|
||||||
UpdateScroll(display, textInfo);
|
UpdateScroll(display, textInfo);
|
||||||
|
|
||||||
@ -1774,7 +1774,7 @@ XEvent *evt;
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((textInfo = (struct txtWin *)
|
if ((textInfo = (struct txtWin *)
|
||||||
XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Determine whether it's main window or not */
|
/* Determine whether it's main window or not */
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A Scrollable Text Output Window
|
* A Scrollable Text Output Window
|
||||||
*
|
*
|
||||||
* David Harrison
|
* David Harrison
|
||||||
* University of California, Berkeley
|
* University of California, Berkeley
|
||||||
* 1986
|
* 1986
|
||||||
*
|
*
|
||||||
@ -204,7 +204,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
XWindowAttributes winInfo; /* Window information */
|
XWindowAttributes winInfo; /* Window information */
|
||||||
int index;
|
int index;
|
||||||
XGCValues gc_val;
|
XGCValues gc_val;
|
||||||
|
|
||||||
if (textWindows == (XAssocTable *) 0) {
|
if (textWindows == (XAssocTable *) 0) {
|
||||||
textWindows = XCreateAssocTable(32);
|
textWindows = XCreateAssocTable(32);
|
||||||
if (textWindows == (XAssocTable *) 0) return(0);
|
if (textWindows == (XAssocTable *) 0) return(0);
|
||||||
@ -259,7 +259,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
winInfo.width - BARSIZE,
|
winInfo.width - BARSIZE,
|
||||||
0, BARSIZE - (2*BARBORDER),
|
0, BARSIZE - (2*BARBORDER),
|
||||||
winInfo.height - (2*BARBORDER),
|
winInfo.height - (2*BARBORDER),
|
||||||
BARBORDER,
|
BARBORDER,
|
||||||
fg, bg);
|
fg, bg);
|
||||||
XSelectInput(display, newWin->scrollBar, ExposureMask|ButtonReleaseMask);
|
XSelectInput(display, newWin->scrollBar, ExposureMask|ButtonReleaseMask);
|
||||||
XMapRaised(display, newWin->scrollBar);
|
XMapRaised(display, newWin->scrollBar);
|
||||||
@ -302,7 +302,7 @@ int bg, fg, cur; /* Background, foreground, and cursor colors */
|
|||||||
newWin->fontGC[index] = 0;
|
newWin->fontGC[index] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Initialize size of first line */
|
/* Initialize size of first line */
|
||||||
newWin->txtBuffer[0]->lineHeight = newWin->theFonts[0].ascent +
|
newWin->txtBuffer[0]->lineHeight = newWin->theFonts[0].ascent +
|
||||||
newWin->theFonts[0].descent;
|
newWin->theFonts[0].descent;
|
||||||
@ -391,7 +391,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
(startPos > 0) && (textInfo->mainBuffer[startPos] != '\n');
|
(startPos > 0) && (textInfo->mainBuffer[startPos] != '\n');
|
||||||
startPos--)
|
startPos--)
|
||||||
/* null loop body */;
|
/* null loop body */;
|
||||||
|
|
||||||
/* Clear out the old line start array */
|
/* Clear out the old line start array */
|
||||||
for (index = 0; index < textInfo->numLines; index++) {
|
for (index = 0; index < textInfo->numLines; index++) {
|
||||||
InitLine(textInfo->txtBuffer[index]);
|
InitLine(textInfo->txtBuffer[index]);
|
||||||
@ -411,7 +411,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
curfont = 0;
|
curfont = 0;
|
||||||
for (index = 0; index < textInfo->bufSpot; index++) {
|
for (index = 0; index < textInfo->bufSpot; index++) {
|
||||||
theChar = bufptr[index] & CHARMASK;
|
theChar = bufptr[index] & CHARMASK;
|
||||||
|
|
||||||
if ((bufptr[index] & FONTMASK) != curfont) {
|
if ((bufptr[index] & FONTMASK) != curfont) {
|
||||||
int newFontNum, heightDiff;
|
int newFontNum, heightDiff;
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ int newColor; /* Color of font */
|
|||||||
struct txtWin *textInfo;
|
struct txtWin *textInfo;
|
||||||
int redrawFlag;
|
int redrawFlag;
|
||||||
XGCValues gc_val;
|
XGCValues gc_val;
|
||||||
|
|
||||||
if ((fontNumber < 0) || (fontNumber >= MAXFONTS)) return 0;
|
if ((fontNumber < 0) || (fontNumber >= MAXFONTS)) return 0;
|
||||||
if ((textInfo = (struct txtWin *)
|
if ((textInfo = (struct txtWin *)
|
||||||
XLookUpAssoc(display, textWindows, (XID) textWin)) == 0)
|
XLookUpAssoc(display, textWindows, (XID) textWin)) == 0)
|
||||||
@ -518,7 +518,7 @@ int newColor; /* Color of font */
|
|||||||
gc_val.plane_mask = AllPlanes;
|
gc_val.plane_mask = AllPlanes;
|
||||||
gc_val.graphics_exposures = 1;
|
gc_val.graphics_exposures = 1;
|
||||||
gc_val.function = GXcopy;
|
gc_val.function = GXcopy;
|
||||||
|
|
||||||
if (textInfo->fontGC[fontNumber] != 0)
|
if (textInfo->fontGC[fontNumber] != 0)
|
||||||
{
|
{
|
||||||
XChangeGC(display, textInfo->fontGC[fontNumber],
|
XChangeGC(display, textInfo->fontGC[fontNumber],
|
||||||
@ -532,7 +532,7 @@ int newColor; /* Color of font */
|
|||||||
GCFunction |
|
GCFunction |
|
||||||
GCPlaneMask |
|
GCPlaneMask |
|
||||||
GCGraphicsExposures,
|
GCGraphicsExposures,
|
||||||
&gc_val);
|
&gc_val);
|
||||||
|
|
||||||
|
|
||||||
redrawFlag = (textInfo->theFonts[fontNumber].fid != 0) &&
|
redrawFlag = (textInfo->theFonts[fontNumber].fid != 0) &&
|
||||||
@ -622,7 +622,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
if (bottom == textInfo->h-(2*BARBORDER)) bottom--;
|
if (bottom == textInfo->h-(2*BARBORDER)) bottom--;
|
||||||
|
|
||||||
XFillRectangle(display, textInfo->scrollBar,
|
XFillRectangle(display, textInfo->scrollBar,
|
||||||
textInfo->bgGC,
|
textInfo->bgGC,
|
||||||
0, 0, BARSIZE, top-1);
|
0, 0, BARSIZE, top-1);
|
||||||
XFillRectangle(display, textInfo->scrollBar,
|
XFillRectangle(display, textInfo->scrollBar,
|
||||||
DEFAULT_GC, top, BARSIZE - (2*BARBORDER) - 2,
|
DEFAULT_GC, top, BARSIZE - (2*BARBORDER) - 2,
|
||||||
@ -642,7 +642,7 @@ Display *display;
|
|||||||
Window w;
|
Window w;
|
||||||
/*
|
/*
|
||||||
* This routine clears a scrollable text window. It resets the current
|
* This routine clears a scrollable text window. It resets the current
|
||||||
* writing position to the upper left hand corner of the screen.
|
* writing position to the upper left hand corner of the screen.
|
||||||
* NOTE: THIS ALSO CLEARS THE CONTENTS OF THE TEXT WINDOW BUFFER AND
|
* NOTE: THIS ALSO CLEARS THE CONTENTS OF THE TEXT WINDOW BUFFER AND
|
||||||
* RESETS THE SCROLL BAR. Returns 0 if the window is not a text window.
|
* RESETS THE SCROLL BAR. Returns 0 if the window is not a text window.
|
||||||
* This should be used *instead* of XClear.
|
* This should be used *instead* of XClear.
|
||||||
@ -668,7 +668,7 @@ Window w;
|
|||||||
textInfo->endLine = 0;
|
textInfo->endLine = 0;
|
||||||
textInfo->curLine = 0;
|
textInfo->curLine = 0;
|
||||||
textInfo->curX = 0;
|
textInfo->curX = 0;
|
||||||
textInfo->curY = YPADDING + textInfo->theFonts[textInfo->curFont].ascent
|
textInfo->curY = YPADDING + textInfo->theFonts[textInfo->curFont].ascent
|
||||||
+ textInfo->theFonts[textInfo->curFont].descent;
|
+ textInfo->theFonts[textInfo->curFont].descent;
|
||||||
|
|
||||||
textInfo->bottomSpace = textInfo->h - YPADDING -
|
textInfo->bottomSpace = textInfo->h - YPADDING -
|
||||||
@ -1106,7 +1106,7 @@ int ypos; /* Y position for line */
|
|||||||
curX += CharSize(textInfo, lineIndex, index);
|
curX += CharSize(textInfo, lineIndex, index);
|
||||||
glyph++;
|
glyph++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Flush out the glyphs */
|
/* Flush out the glyphs */
|
||||||
XFillRectangle(display, textInfo->mainWindow,
|
XFillRectangle(display, textInfo->mainWindow,
|
||||||
textInfo->bgGC,
|
textInfo->bgGC,
|
||||||
@ -1178,7 +1178,7 @@ int flagWord; /* DODISP or nothing */
|
|||||||
if ((textInfo->curY + thisLine->lineHeight + heightDiff +
|
if ((textInfo->curY + thisLine->lineHeight + heightDiff +
|
||||||
INTERLINE) > textInfo->h)
|
INTERLINE) > textInfo->h)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* General approach: "unscroll" the last line up
|
* General approach: "unscroll" the last line up
|
||||||
* and then call ScrollDown to do the right thing.
|
* and then call ScrollDown to do the right thing.
|
||||||
*/
|
*/
|
||||||
@ -1197,7 +1197,7 @@ int flagWord; /* DODISP or nothing */
|
|||||||
(textInfo->bottomSpace + INTERLINE +
|
(textInfo->bottomSpace + INTERLINE +
|
||||||
thisLine->lineHeight);
|
thisLine->lineHeight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Just update bottom space */
|
/* Just update bottom space */
|
||||||
textInfo->bottomSpace -= heightDiff;
|
textInfo->bottomSpace -= heightDiff;
|
||||||
@ -1238,7 +1238,7 @@ register char *str; /* 0 terminated string */
|
|||||||
* - A new font can be chosen using the sequence '^F<digit>' where
|
* - A new font can be chosen using the sequence '^F<digit>' where
|
||||||
* <digit> is 0-7. The directive will be ignored if
|
* <digit> is 0-7. The directive will be ignored if
|
||||||
* there is no font in the specified slot.
|
* there is no font in the specified slot.
|
||||||
* Returns 0 if something went wrong.
|
* Returns 0 if something went wrong.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
register int fontIndex;
|
register int fontIndex;
|
||||||
@ -1247,7 +1247,7 @@ register char *str; /* 0 terminated string */
|
|||||||
|
|
||||||
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* See if screen needs to be updated */
|
/* See if screen needs to be updated */
|
||||||
if (textInfo->flagWord & SCREENWRONG) {
|
if (textInfo->flagWord & SCREENWRONG) {
|
||||||
TxtRepaint(display, textInfo->mainWindow);
|
TxtRepaint(display, textInfo->mainWindow);
|
||||||
@ -1279,7 +1279,7 @@ register char *str; /* 0 terminated string */
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inline code for handling normal character case */
|
/* Inline code for handling normal character case */
|
||||||
if ((*str >= LOWCHAR) && (*str <= HIGHCHAR)) {
|
if ((*str >= LOWCHAR) && (*str <= HIGHCHAR)) {
|
||||||
register XFontStruct *thisFont;
|
register XFontStruct *thisFont;
|
||||||
@ -1311,21 +1311,21 @@ register char *str; /* 0 terminated string */
|
|||||||
HandleNewLine(display, textInfo, DODISP | NONEWLINE);
|
HandleNewLine(display, textInfo, DODISP | NONEWLINE);
|
||||||
thisLine = textInfo->txtBuffer[textInfo->curLine];
|
thisLine = textInfo->txtBuffer[textInfo->curLine];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ready to draw character */
|
/* Ready to draw character */
|
||||||
XDrawString(display, textInfo->mainWindow,
|
XDrawString(display, textInfo->mainWindow,
|
||||||
DEFAULT_GC,
|
DEFAULT_GC,
|
||||||
textInfo->curX += charWidth,
|
textInfo->curX += charWidth,
|
||||||
textInfo->curY + thisLine->lineHeight,
|
textInfo->curY + thisLine->lineHeight,
|
||||||
str, 1);
|
str, 1);
|
||||||
|
|
||||||
/* Append character onto main buffer */
|
/* Append character onto main buffer */
|
||||||
if (textInfo->bufSpot >= textInfo->bufAlloc)
|
if (textInfo->bufSpot >= textInfo->bufAlloc)
|
||||||
/* Make room for more characters */
|
/* Make room for more characters */
|
||||||
ExpandBuffer(textInfo);
|
ExpandBuffer(textInfo);
|
||||||
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
||||||
(textInfo->curFont << FONTSHIFT) | (*str);
|
(textInfo->curFont << FONTSHIFT) | (*str);
|
||||||
|
|
||||||
/* Update the line start array */
|
/* Update the line start array */
|
||||||
thisLine->lineLength += 1;
|
thisLine->lineLength += 1;
|
||||||
thisLine->lineWidth += charWidth;
|
thisLine->lineWidth += charWidth;
|
||||||
@ -1371,7 +1371,7 @@ register char *str; /* NULL terminated string */
|
|||||||
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)
|
if ((textInfo = (struct txtWin *) XLookUpAssoc(display, textWindows, (XID) w)
|
||||||
) == 0)
|
) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for ( /* str is ok */ ; (*str != 0) ; str++) {
|
for ( /* str is ok */ ; (*str != 0) ; str++) {
|
||||||
/* Check to see if we are waiting on a font */
|
/* Check to see if we are waiting on a font */
|
||||||
if (textInfo->flagWord & FONTNUMWAIT) {
|
if (textInfo->flagWord & FONTNUMWAIT) {
|
||||||
@ -1389,7 +1389,7 @@ register char *str; /* NULL terminated string */
|
|||||||
register XFontStruct *thisFont;
|
register XFontStruct *thisFont;
|
||||||
register struct txtLine *thisLine;
|
register struct txtLine *thisLine;
|
||||||
register int charWidth;
|
register int charWidth;
|
||||||
|
|
||||||
/* Determine size of character */
|
/* Determine size of character */
|
||||||
thisFont = &(textInfo->theFonts[textInfo->curFont]);
|
thisFont = &(textInfo->theFonts[textInfo->curFont]);
|
||||||
|
|
||||||
@ -1416,7 +1416,7 @@ register char *str; /* NULL terminated string */
|
|||||||
ExpandBuffer(textInfo);
|
ExpandBuffer(textInfo);
|
||||||
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
textInfo->mainBuffer[(textInfo->bufSpot)++] =
|
||||||
(textInfo->curFont << FONTSHIFT) | (*str);
|
(textInfo->curFont << FONTSHIFT) | (*str);
|
||||||
|
|
||||||
/* Update the line start array */
|
/* Update the line start array */
|
||||||
thisLine->lineLength += 1;
|
thisLine->lineLength += 1;
|
||||||
thisLine->lineWidth += charWidth;
|
thisLine->lineWidth += charWidth;
|
||||||
@ -1442,7 +1442,7 @@ Display *display;
|
|||||||
Window w;
|
Window w;
|
||||||
/*
|
/*
|
||||||
* Repaints the given scrollable text window. The routine repaints
|
* Repaints the given scrollable text window. The routine repaints
|
||||||
* the entire window. For handling exposure events, the TxtFilter
|
* the entire window. For handling exposure events, the TxtFilter
|
||||||
* routine should be used.
|
* routine should be used.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@ -1570,7 +1570,7 @@ struct txtWin *textInfo; /* Text window information */
|
|||||||
XClearArea(display, textInfo->mainWindow,
|
XClearArea(display, textInfo->mainWindow,
|
||||||
0, textInfo->h - textInfo->bottomSpace,
|
0, textInfo->h - textInfo->bottomSpace,
|
||||||
textInfo->w, textInfo->bottomSpace);
|
textInfo->w, textInfo->bottomSpace);
|
||||||
|
|
||||||
UpdateExposures(display, textInfo);
|
UpdateExposures(display, textInfo);
|
||||||
UpdateScroll(display, textInfo);
|
UpdateScroll(display, textInfo);
|
||||||
|
|
||||||
@ -1755,7 +1755,7 @@ XEvent *evt;
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((textInfo = (struct txtWin *)
|
if ((textInfo = (struct txtWin *)
|
||||||
XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
XLookUpAssoc(display, textWindows, (XID) w)) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Determine whether it's main window or not */
|
/* Determine whether it's main window or not */
|
||||||
|
@ -20,7 +20,7 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 1994/01/07 11:10:42 $
|
/* RCS Info: $Revision: 1.3 $ on $Date: 1994/11/04 02:11:33 $
|
||||||
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/std.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/std.c,v $
|
||||||
* Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1985 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
*
|
*
|
||||||
@ -62,7 +62,7 @@ copy(str)
|
|||||||
char *str;
|
char *str;
|
||||||
{
|
{
|
||||||
char *p, *tmalloc();
|
char *p, *tmalloc();
|
||||||
|
|
||||||
p = tmalloc(strlen(str) + 1);
|
p = tmalloc(strlen(str) + 1);
|
||||||
strcpy(p, str);
|
strcpy(p, str);
|
||||||
return(p);
|
return(p);
|
||||||
@ -90,7 +90,7 @@ substring(sub, str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Malloc num bytes and initialize to zero. Fatal error if the space can't
|
/* Malloc num bytes and initialize to zero. Fatal error if the space can't
|
||||||
* be malloc'd.
|
* be malloc'd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *
|
char *
|
||||||
@ -375,7 +375,7 @@ setenv(name, value)
|
|||||||
environ = xx;
|
environ = xx;
|
||||||
} else
|
} else
|
||||||
xx = environ;
|
xx = environ;
|
||||||
|
|
||||||
xx[i] = tmalloc(strlen(name) + strlen(value) + 2);
|
xx[i] = tmalloc(strlen(name) + strlen(value) + 2);
|
||||||
sprintf(xx[i], "%s=%s", name, value);
|
sprintf(xx[i], "%s=%s", name, value);
|
||||||
return;
|
return;
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.3 $ on $Date: 86/11/23 17:18:35 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:08 $
|
||||||
* $Source: /users/faustus/xchess/RCS/valid.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/valid.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -49,10 +49,10 @@ valid_move(m, b)
|
|||||||
board_move(&tb, m);
|
board_move(&tb, m);
|
||||||
if (ischeck(&tb, m->piece.color))
|
if (ischeck(&tb, m->piece.color))
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
if (ischeck(&tb, ((m->piece.color == WHITE) ? BLACK : WHITE)))
|
if (ischeck(&tb, ((m->piece.color == WHITE) ? BLACK : WHITE)))
|
||||||
m->check = true;
|
m->check = true;
|
||||||
|
|
||||||
return (true);
|
return (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ couldmove(m, b)
|
|||||||
switch (m->type) {
|
switch (m->type) {
|
||||||
case KCASTLE:
|
case KCASTLE:
|
||||||
if ((m->piece.color == WHITE) && (b->white_cant_castle_k) ||
|
if ((m->piece.color == WHITE) && (b->white_cant_castle_k) ||
|
||||||
(m->piece.color == BLACK) &&
|
(m->piece.color == BLACK) &&
|
||||||
(b->black_cant_castle_k))
|
(b->black_cant_castle_k))
|
||||||
return (false);
|
return (false);
|
||||||
if ((b->square[m->fromy][5].color != NONE) ||
|
if ((b->square[m->fromy][5].color != NONE) ||
|
||||||
@ -78,7 +78,7 @@ couldmove(m, b)
|
|||||||
|
|
||||||
case QCASTLE:
|
case QCASTLE:
|
||||||
if ((m->piece.color == WHITE) && (b->white_cant_castle_q) ||
|
if ((m->piece.color == WHITE) && (b->white_cant_castle_q) ||
|
||||||
(m->piece.color == BLACK) &&
|
(m->piece.color == BLACK) &&
|
||||||
(b->black_cant_castle_q))
|
(b->black_cant_castle_q))
|
||||||
return (false);
|
return (false);
|
||||||
if ((b->square[m->fromy][1].color != NONE) ||
|
if ((b->square[m->fromy][1].color != NONE) ||
|
||||||
@ -129,7 +129,7 @@ couldmove(m, b)
|
|||||||
*/
|
*/
|
||||||
if (m->enpassant) {
|
if (m->enpassant) {
|
||||||
if (b->square[(m->piece.color == WHITE)
|
if (b->square[(m->piece.color == WHITE)
|
||||||
? 3 : 4][m->tox].color ==
|
? 3 : 4][m->tox].color ==
|
||||||
((m->piece.color == WHITE) ?
|
((m->piece.color == WHITE) ?
|
||||||
BLACK : WHITE))
|
BLACK : WHITE))
|
||||||
break;
|
break;
|
||||||
|
@ -19,8 +19,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.5 $ on $Date: 86/11/26 12:11:15 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:08 $
|
||||||
* $Source: /users/faustus/xchess/RCS/window.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/window.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -89,7 +89,7 @@ win_setup(disp1, disp2)
|
|||||||
win2->flipped = true;
|
win2->flipped = true;
|
||||||
win_drawboard(win2);
|
win_drawboard(win2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ win_drawpiece(p, y, x, wnum)
|
|||||||
XSetState(win->display, DefaultGC(win->display, 0),
|
XSetState(win->display, DefaultGC(win->display, 0),
|
||||||
BlackPixel(win->display, 0),
|
BlackPixel(win->display, 0),
|
||||||
WhitePixel(win->display, 0), GXcopy, AllPlanes);
|
WhitePixel(win->display, 0), GXcopy, AllPlanes);
|
||||||
|
|
||||||
tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
|
tmpPM = XCreateBitmapFromData(win->display, win->boardwin,
|
||||||
shade_bits, SQUARE_WIDTH, SQUARE_HEIGHT);
|
shade_bits, SQUARE_WIDTH, SQUARE_HEIGHT);
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ win_drawpiece(p, y, x, wnum)
|
|||||||
y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
|
y * (SQUARE_HEIGHT + BORDER_WIDTH), 1);
|
||||||
|
|
||||||
XFreePixmap(win->display, tmpPM);
|
XFreePixmap(win->display, tmpPM);
|
||||||
|
|
||||||
XSetFunction(win->display, DefaultGC(win->display, 0),
|
XSetFunction(win->display, DefaultGC(win->display, 0),
|
||||||
GXandInverted);
|
GXandInverted);
|
||||||
maskPM = XCreateBitmapFromData(win->display, win->boardwin,
|
maskPM = XCreateBitmapFromData(win->display, win->boardwin,
|
||||||
@ -268,16 +268,16 @@ win_drawpiece(p, y, x, wnum)
|
|||||||
gc.background = win->blacksquare.pixel;
|
gc.background = win->blacksquare.pixel;
|
||||||
|
|
||||||
gc.font = win->small->fid;
|
gc.font = win->small->fid;
|
||||||
|
|
||||||
XChangeGC(win->display, DefaultGC(win->display, 0),
|
XChangeGC(win->display, DefaultGC(win->display, 0),
|
||||||
GCForeground | GCBackground | GCFont, &gc);
|
GCForeground | GCBackground | GCFont, &gc);
|
||||||
|
|
||||||
if (!x) {
|
if (!x) {
|
||||||
sprintf(buf, " %d", SIZE - y);
|
sprintf(buf, " %d", SIZE - y);
|
||||||
XDrawImageString(win->display, win->boardwin,
|
XDrawImageString(win->display, win->boardwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
1, (y + 1) * (SQUARE_HEIGHT +
|
1, (y + 1) * (SQUARE_HEIGHT +
|
||||||
BORDER_WIDTH) - BORDER_WIDTH +
|
BORDER_WIDTH) - BORDER_WIDTH +
|
||||||
win->small->max_bounds.ascent - 1, buf, 2);
|
win->small->max_bounds.ascent - 1, buf, 2);
|
||||||
}
|
}
|
||||||
if (y == SIZE - 1) {
|
if (y == SIZE - 1) {
|
||||||
@ -285,7 +285,7 @@ win_drawpiece(p, y, x, wnum)
|
|||||||
XDrawImageString(win->display, win->boardwin,
|
XDrawImageString(win->display, win->boardwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
|
x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
|
||||||
SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
|
SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
|
||||||
win->small->max_bounds.ascent - 1, buf, 1);
|
win->small->max_bounds.ascent - 1, buf, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,12 +301,12 @@ win_erasepiece(y, x, wnum)
|
|||||||
char buf[BSIZE];
|
char buf[BSIZE];
|
||||||
XGCValues gc;
|
XGCValues gc;
|
||||||
Pixmap tmpPM;
|
Pixmap tmpPM;
|
||||||
|
|
||||||
if (oneboard || (wnum == win1->color))
|
if (oneboard || (wnum == win1->color))
|
||||||
win = win1;
|
win = win1;
|
||||||
else
|
else
|
||||||
win = win2;
|
win = win2;
|
||||||
|
|
||||||
if (win->flipped) {
|
if (win->flipped) {
|
||||||
y = SIZE - y - 1;
|
y = SIZE - y - 1;
|
||||||
x = SIZE - x - 1;
|
x = SIZE - x - 1;
|
||||||
@ -354,16 +354,16 @@ win_erasepiece(y, x, wnum)
|
|||||||
gc.background = win->blacksquare.pixel;
|
gc.background = win->blacksquare.pixel;
|
||||||
|
|
||||||
gc.font = win->small->fid;
|
gc.font = win->small->fid;
|
||||||
|
|
||||||
XChangeGC(win->display, DefaultGC(win->display, 0),
|
XChangeGC(win->display, DefaultGC(win->display, 0),
|
||||||
GCForeground | GCBackground | GCFont, &gc);
|
GCForeground | GCBackground | GCFont, &gc);
|
||||||
|
|
||||||
if (!x) {
|
if (!x) {
|
||||||
sprintf(buf, " %d", SIZE - y);
|
sprintf(buf, " %d", SIZE - y);
|
||||||
XDrawImageString(win->display, win->boardwin,
|
XDrawImageString(win->display, win->boardwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
1, (y + 1) * (SQUARE_HEIGHT +
|
1, (y + 1) * (SQUARE_HEIGHT +
|
||||||
BORDER_WIDTH) - BORDER_WIDTH +
|
BORDER_WIDTH) - BORDER_WIDTH +
|
||||||
win->small->max_bounds.ascent - 1, buf, 2);
|
win->small->max_bounds.ascent - 1, buf, 2);
|
||||||
}
|
}
|
||||||
if (y == SIZE - 1) {
|
if (y == SIZE - 1) {
|
||||||
@ -371,11 +371,11 @@ win_erasepiece(y, x, wnum)
|
|||||||
XDrawImageString(win->display, win->boardwin,
|
XDrawImageString(win->display, win->boardwin,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
|
x * (SQUARE_WIDTH + BORDER_WIDTH) + 1,
|
||||||
SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
|
SIZE * (SQUARE_HEIGHT + BORDER_WIDTH) - BORDER_WIDTH +
|
||||||
win->small->max_bounds.ascent - 1, buf, 1);
|
win->small->max_bounds.ascent - 1, buf, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -392,7 +392,7 @@ win_flash(m, wnum)
|
|||||||
win = win1;
|
win = win1;
|
||||||
else
|
else
|
||||||
win = win2;
|
win = win2;
|
||||||
|
|
||||||
if (win->flipped) {
|
if (win->flipped) {
|
||||||
sx = SIZE - m->fromx - 1;
|
sx = SIZE - m->fromx - 1;
|
||||||
sy = SIZE - m->fromy - 1;
|
sy = SIZE - m->fromy - 1;
|
||||||
@ -417,7 +417,7 @@ win_flash(m, wnum)
|
|||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
sx, sy, ex, ey);
|
sx, sy, ex, ey);
|
||||||
}
|
}
|
||||||
|
|
||||||
XSetFunction(win->display, DefaultGC(win->display, 0), GXcopy);
|
XSetFunction(win->display, DefaultGC(win->display, 0), GXcopy);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -598,7 +598,7 @@ win_redraw(win, event)
|
|||||||
x2 = SIZE - x1 - 1;
|
x2 = SIZE - x1 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = x1; i <= x2; i++)
|
for (i = x1; i <= x2; i++)
|
||||||
for (j = y1; j <= y2; j++) {
|
for (j = y1; j <= y2; j++) {
|
||||||
if (chessboard->square[j][i].color == NONE)
|
if (chessboard->square[j][i].color == NONE)
|
||||||
win_erasepiece(j, i, WHITE);
|
win_erasepiece(j, i, WHITE);
|
||||||
@ -613,7 +613,7 @@ win_redraw(win, event)
|
|||||||
j, i, BLACK);
|
j, i, BLACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -627,11 +627,11 @@ setup(dispname, win)
|
|||||||
Cursor cur;
|
Cursor cur;
|
||||||
extern char *program, *recfile;
|
extern char *program, *recfile;
|
||||||
XSizeHints xsizes;
|
XSizeHints xsizes;
|
||||||
|
|
||||||
|
|
||||||
if (!(win->display = XOpenDisplay(dispname)))
|
if (!(win->display = XOpenDisplay(dispname)))
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
|
|
||||||
/* Now get boolean defaults... */
|
/* Now get boolean defaults... */
|
||||||
if ((s = XGetDefault(win->display, program, "noisy")) && eq(s, "on"))
|
if ((s = XGetDefault(win->display, program, "noisy")) && eq(s, "on"))
|
||||||
@ -646,13 +646,13 @@ setup(dispname, win)
|
|||||||
quickflag = true;
|
quickflag = true;
|
||||||
if ((s = XGetDefault(win->display, program, "flash")) && eq(s, "on"))
|
if ((s = XGetDefault(win->display, program, "flash")) && eq(s, "on"))
|
||||||
win_flashmove = true;
|
win_flashmove = true;
|
||||||
|
|
||||||
/* ... numeric variables ... */
|
/* ... numeric variables ... */
|
||||||
if (s = XGetDefault(win->display, program, "numflashes"))
|
if (s = XGetDefault(win->display, program, "numflashes"))
|
||||||
num_flashes = atoi(s);
|
num_flashes = atoi(s);
|
||||||
if (s = XGetDefault(win->display, program, "flashsize"))
|
if (s = XGetDefault(win->display, program, "flashsize"))
|
||||||
flash_size = atoi(s);
|
flash_size = atoi(s);
|
||||||
|
|
||||||
/* ... and strings. */
|
/* ... and strings. */
|
||||||
if (s = XGetDefault(win->display, program, "progname"))
|
if (s = XGetDefault(win->display, program, "progname"))
|
||||||
progname = s;
|
progname = s;
|
||||||
@ -683,7 +683,7 @@ setup(dispname, win)
|
|||||||
|
|
||||||
if ((DisplayPlanes(win->display, 0) == 1) || bnwflag)
|
if ((DisplayPlanes(win->display, 0) == 1) || bnwflag)
|
||||||
win->bnw = true;
|
win->bnw = true;
|
||||||
|
|
||||||
/* Allocate colors... */
|
/* Allocate colors... */
|
||||||
if (win->bnw) {
|
if (win->bnw) {
|
||||||
win->blackpiece.pixel = BlackPixel (win->display, 0);
|
win->blackpiece.pixel = BlackPixel (win->display, 0);
|
||||||
@ -699,64 +699,64 @@ setup(dispname, win)
|
|||||||
} else {
|
} else {
|
||||||
if (!XParseColor(win->display,
|
if (!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
black_piece_color, &win->blackpiece) ||
|
black_piece_color, &win->blackpiece) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
white_piece_color, &win->whitepiece) ||
|
white_piece_color, &win->whitepiece) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
black_square_color, &win->blacksquare) ||
|
black_square_color, &win->blacksquare) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
white_square_color, &win->whitesquare) ||
|
white_square_color, &win->whitesquare) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
border_color, &win->border) ||
|
border_color, &win->border) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
text_color, &win->textcolor) ||
|
text_color, &win->textcolor) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
text_back, &win->textback) ||
|
text_back, &win->textback) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
error_text, &win->errortext) ||
|
error_text, &win->errortext) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
player_text, &win->playertext) ||
|
player_text, &win->playertext) ||
|
||||||
!XParseColor(win->display,
|
!XParseColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
cursor_color, &win->cursorcolor) ||
|
cursor_color, &win->cursorcolor) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->blackpiece) ||
|
&win->blackpiece) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->whitepiece) ||
|
&win->whitepiece) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->blacksquare) ||
|
&win->blacksquare) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->whitesquare) ||
|
&win->whitesquare) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->border) ||
|
&win->border) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->textcolor) ||
|
&win->textcolor) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->textback) ||
|
&win->textback) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->errortext) ||
|
&win->errortext) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->playertext) ||
|
&win->playertext) ||
|
||||||
!XAllocColor(win->display,
|
!XAllocColor(win->display,
|
||||||
DefaultColormap(win->display, 0),
|
DefaultColormap(win->display, 0),
|
||||||
&win->cursorcolor))
|
&win->cursorcolor))
|
||||||
fprintf(stderr, "Can't get colors...\n");
|
fprintf(stderr, "Can't get colors...\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,17 +773,17 @@ setup(dispname, win)
|
|||||||
NULL)
|
NULL)
|
||||||
fprintf(stderr, "Can't get large font...\n");
|
fprintf(stderr, "Can't get large font...\n");
|
||||||
|
|
||||||
|
|
||||||
/* Create the windows... */
|
/* Create the windows... */
|
||||||
|
|
||||||
win->basewin =
|
win->basewin =
|
||||||
XCreateSimpleWindow(win->display,DefaultRootWindow(win->display),
|
XCreateSimpleWindow(win->display,DefaultRootWindow(win->display),
|
||||||
BASE_XPOS, BASE_YPOS,
|
BASE_XPOS, BASE_YPOS,
|
||||||
BASE_WIDTH, BASE_HEIGHT, 0,
|
BASE_WIDTH, BASE_HEIGHT, 0,
|
||||||
BlackPixel(win->display, 0),
|
BlackPixel(win->display, 0),
|
||||||
WhitePixel(win->display, 0));
|
WhitePixel(win->display, 0));
|
||||||
win->boardwin = XCreateSimpleWindow(win->display,win->basewin,
|
win->boardwin = XCreateSimpleWindow(win->display,win->basewin,
|
||||||
BOARD_XPOS, BOARD_YPOS,
|
BOARD_XPOS, BOARD_YPOS,
|
||||||
BOARD_WIDTH, BOARD_HEIGHT,
|
BOARD_WIDTH, BOARD_HEIGHT,
|
||||||
BORDER_WIDTH,
|
BORDER_WIDTH,
|
||||||
win->border.pixel,
|
win->border.pixel,
|
||||||
@ -819,7 +819,7 @@ setup(dispname, win)
|
|||||||
BUTTON_WIDTH, BUTTON_HEIGHT,
|
BUTTON_WIDTH, BUTTON_HEIGHT,
|
||||||
BORDER_WIDTH, win->border.pixel,
|
BORDER_WIDTH, win->border.pixel,
|
||||||
win->textback.pixel);
|
win->textback.pixel);
|
||||||
|
|
||||||
/* Let's define an icon... */
|
/* Let's define an icon... */
|
||||||
win->iconpixmap = XCreatePixmapFromBitmapData(win->display,
|
win->iconpixmap = XCreatePixmapFromBitmapData(win->display,
|
||||||
win->basewin, icon_bits,
|
win->basewin, icon_bits,
|
||||||
@ -835,7 +835,7 @@ setup(dispname, win)
|
|||||||
XSetStandardProperties(win->display, win->basewin,
|
XSetStandardProperties(win->display, win->basewin,
|
||||||
program, program, win->iconpixmap,
|
program, program, win->iconpixmap,
|
||||||
0, NULL, &xsizes);
|
0, NULL, &xsizes);
|
||||||
|
|
||||||
bm = XCreateBitmapFromData(win->display,
|
bm = XCreateBitmapFromData(win->display,
|
||||||
win->basewin, xchess_bits,
|
win->basewin, xchess_bits,
|
||||||
xchess_width, xchess_height);
|
xchess_width, xchess_height);
|
||||||
@ -848,7 +848,7 @@ setup(dispname, win)
|
|||||||
xchess_x_hot, xchess_y_hot);
|
xchess_x_hot, xchess_y_hot);
|
||||||
XFreePixmap(win->display, bm);
|
XFreePixmap(win->display, bm);
|
||||||
XFreePixmap(win->display, bmask);
|
XFreePixmap(win->display, bmask);
|
||||||
|
|
||||||
XDefineCursor(win->display,win->basewin, cur);
|
XDefineCursor(win->display,win->basewin, cur);
|
||||||
|
|
||||||
XMapSubwindows(win->display,win->basewin);
|
XMapSubwindows(win->display,win->basewin);
|
||||||
@ -866,7 +866,7 @@ setup(dispname, win)
|
|||||||
ButtonReleaseMask | ExposureMask);
|
ButtonReleaseMask | ExposureMask);
|
||||||
XSelectInput(win->display,win->buttonwin,
|
XSelectInput(win->display,win->buttonwin,
|
||||||
ButtonPressMask | ExposureMask);
|
ButtonPressMask | ExposureMask);
|
||||||
|
|
||||||
message_init(win);
|
message_init(win);
|
||||||
record_init(win);
|
record_init(win);
|
||||||
button_draw(win);
|
button_draw(win);
|
||||||
@ -900,12 +900,12 @@ drawgrid(win)
|
|||||||
gc.foreground = win->border.pixel;
|
gc.foreground = win->border.pixel;
|
||||||
gc.line_width = 0;
|
gc.line_width = 0;
|
||||||
gc.line_style = LineSolid;
|
gc.line_style = LineSolid;
|
||||||
|
|
||||||
XChangeGC(win->display,
|
XChangeGC(win->display,
|
||||||
DefaultGC(win->display, 0),
|
DefaultGC(win->display, 0),
|
||||||
GCFunction | GCPlaneMask | GCForeground |
|
GCFunction | GCPlaneMask | GCForeground |
|
||||||
GCLineWidth | GCLineStyle, &gc);
|
GCLineWidth | GCLineStyle, &gc);
|
||||||
|
|
||||||
/* Draw the lines... horizontal, */
|
/* Draw the lines... horizontal, */
|
||||||
for (i = 1; i < SIZE; i++)
|
for (i = 1; i < SIZE; i++)
|
||||||
XDrawLine(win->display, win->boardwin,
|
XDrawLine(win->display, win->boardwin,
|
||||||
@ -923,7 +923,7 @@ drawgrid(win)
|
|||||||
i * (SQUARE_WIDTH + BORDER_WIDTH) -
|
i * (SQUARE_WIDTH + BORDER_WIDTH) -
|
||||||
BORDER_WIDTH / 2, 0,
|
BORDER_WIDTH / 2, 0,
|
||||||
i * (SQUARE_WIDTH + BORDER_WIDTH) -
|
i * (SQUARE_WIDTH + BORDER_WIDTH) -
|
||||||
BORDER_WIDTH / 2,
|
BORDER_WIDTH / 2,
|
||||||
SIZE * (SQUARE_WIDTH + BORDER_WIDTH));
|
SIZE * (SQUARE_WIDTH + BORDER_WIDTH));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ file named COPYING. Among other things, the copyright notice
|
|||||||
and this notice must be preserved on all copies. */
|
and this notice must be preserved on all copies. */
|
||||||
|
|
||||||
|
|
||||||
/* RCS Info: $Revision: 1.2 $ on $Date: 89/04/28 08:44:02 $
|
/* RCS Info: $Revision: 1.1.1.1 $ on $Date: 1993/06/12 14:41:09 $
|
||||||
* $Source: /usr/local/src/source/X.V11R3/contrib/games/xchess/Xchess/RCS/xchess.c,v $
|
* $Source: /home/ncvs/src/gnu/games/chess/Xchess/xchess.c,v $
|
||||||
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
* Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
|
||||||
* Permission is granted to do anything with this code except sell it
|
* Permission is granted to do anything with this code except sell it
|
||||||
* or remove this message.
|
* or remove this message.
|
||||||
@ -82,7 +82,7 @@ main(ac, av)
|
|||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
program = av[0];
|
program = av[0];
|
||||||
|
|
||||||
#ifdef notdef
|
#ifdef notdef
|
||||||
signal(SIGCHLD, die);
|
signal(SIGCHLD, die);
|
||||||
#endif
|
#endif
|
||||||
@ -157,7 +157,7 @@ main(ac, av)
|
|||||||
|
|
||||||
if (!dispname2)
|
if (!dispname2)
|
||||||
oneboard = true;
|
oneboard = true;
|
||||||
|
|
||||||
srandom(getpid());
|
srandom(getpid());
|
||||||
|
|
||||||
if (!oneboard && randflag && (random() % 2)) {
|
if (!oneboard && randflag && (random() % 2)) {
|
||||||
@ -165,10 +165,10 @@ main(ac, av)
|
|||||||
dispname1 = dispname2;
|
dispname1 = dispname2;
|
||||||
dispname2 = s;
|
dispname2 = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dispname1)
|
if (!dispname1)
|
||||||
dispname1 = getenv("DISPLAY");
|
dispname1 = getenv("DISPLAY");
|
||||||
|
|
||||||
/* Set up the board. */
|
/* Set up the board. */
|
||||||
board_setup();
|
board_setup();
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
C source for CHESS
|
C source for CHESS
|
||||||
|
|
||||||
Revision: 4-25-88
|
Revision: 4-25-88
|
||||||
|
|
||||||
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
#define neutral 2
|
#define neutral 2
|
||||||
#define white 0
|
#define white 0
|
||||||
#define black 1
|
#define black 1
|
||||||
#define no_piece 0
|
#define no_piece 0
|
||||||
#define pawn 1
|
#define pawn 1
|
||||||
#define knight 2
|
#define knight 2
|
||||||
@ -164,7 +164,7 @@ short unmap[120]=
|
|||||||
40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1,
|
40,41,42,43,44,45,46,47,-1,-1,-1,-1,-1,-1,-1,-1,
|
||||||
48,49,50,51,52,53,54,55,-1,-1,-1,-1,-1,-1,-1,-1,
|
48,49,50,51,52,53,54,55,-1,-1,-1,-1,-1,-1,-1,-1,
|
||||||
56,57,58,59,60,61,62,63};
|
56,57,58,59,60,61,62,63};
|
||||||
short Dcode[120]=
|
short Dcode[120]=
|
||||||
{0,1,1,1,1,1,1,1,0,0,0,0,0,0,0x0E,0x0F,
|
{0,1,1,1,1,1,1,1,0,0,0,0,0,0,0x0E,0x0F,
|
||||||
0x10,0x11,0x12,0,0,0,0,0,0,0,0,0,0,0,0x0F,0x1F,
|
0x10,0x11,0x12,0,0,0,0,0,0,0,0,0,0,0,0x0F,0x1F,
|
||||||
0x10,0x21,0x11,0,0,0,0,0,0,0,0,0,0,0x0F,0,0,
|
0x10,0x21,0x11,0,0,0,0,0,0,0,0,0,0,0x0F,0,0,
|
||||||
@ -287,7 +287,7 @@ short PawnAdvance[64]=
|
|||||||
12,16,24,32,32,24,16,12,
|
12,16,24,32,32,24,16,12,
|
||||||
12,16,24,32,32,24,16,12,
|
12,16,24,32,32,24,16,12,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0};
|
0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
main(argc,argv)
|
main(argc,argv)
|
||||||
int argc; char *argv[];
|
int argc; char *argv[];
|
||||||
@ -331,8 +331,8 @@ short iop;
|
|||||||
unsigned short *mv;
|
unsigned short *mv;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compare the string 's' to the list of legal moves available for the
|
Compare the string 's' to the list of legal moves available for the
|
||||||
opponent. If a match is found, make the move on the board.
|
opponent. If a match is found, make the move on the board.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -373,7 +373,7 @@ struct leaf *node;
|
|||||||
if (xnode.flags & epmask) UpdateDisplay(0,0,1,0);
|
if (xnode.flags & epmask) UpdateDisplay(0,0,1,0);
|
||||||
else UpdateDisplay(xnode.f,xnode.t,0,xnode.flags & cstlmask);
|
else UpdateDisplay(xnode.f,xnode.t,0,xnode.flags & cstlmask);
|
||||||
if (xnode.flags & cstlmask) Game50 = GameCnt;
|
if (xnode.flags & cstlmask) Game50 = GameCnt;
|
||||||
else if (board[xnode.t] == pawn || (xnode.flags & capture))
|
else if (board[xnode.t] == pawn || (xnode.flags & capture))
|
||||||
Game50 = GameCnt;
|
Game50 = GameCnt;
|
||||||
GameList[GameCnt].depth = GameList[GameCnt].score = 0;
|
GameList[GameCnt].depth = GameList[GameCnt].score = 0;
|
||||||
GameList[GameCnt].nodes = 0;
|
GameList[GameCnt].nodes = 0;
|
||||||
@ -384,7 +384,7 @@ struct leaf *node;
|
|||||||
*mv = (xnode.f << 8) + xnode.t;
|
*mv = (xnode.f << 8) + xnode.t;
|
||||||
algbr(xnode.f,xnode.t,false);
|
algbr(xnode.f,xnode.t,false);
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cnt > 1) ShowMessage("Ambiguous Move!");
|
if (cnt > 1) ShowMessage("Ambiguous Move!");
|
||||||
return(false);
|
return(false);
|
||||||
@ -464,12 +464,12 @@ SelectMove(side,iop)
|
|||||||
short side,iop;
|
short side,iop;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Select a move by calling function search() at progressively deeper
|
Select a move by calling function search() at progressively deeper
|
||||||
ply until time is up or a mate or draw is reached. An alpha-beta
|
ply until time is up or a mate or draw is reached. An alpha-beta
|
||||||
window of -90 to +90 points is set around the score returned from the
|
window of -90 to +90 points is set around the score returned from the
|
||||||
previous iteration. If Sdepth != 0 then the program has correctly
|
previous iteration. If Sdepth != 0 then the program has correctly
|
||||||
predicted the opponents move and the search will start at a depth of
|
predicted the opponents move and the search will start at a depth of
|
||||||
Sdepth+1 rather than a depth of 1.
|
Sdepth+1 rather than a depth of 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -495,7 +495,7 @@ static short i,alpha,beta,score,tempb,tempc,tempsf,tempst,xside,rpt;
|
|||||||
ExaminePosition();
|
ExaminePosition();
|
||||||
ScorePosition(side,&score);
|
ScorePosition(side,&score);
|
||||||
ShowSidetomove();
|
ShowSidetomove();
|
||||||
|
|
||||||
if (Sdepth == 0)
|
if (Sdepth == 0)
|
||||||
{
|
{
|
||||||
ZeroTTable();
|
ZeroTTable();
|
||||||
@ -516,7 +516,7 @@ static short i,alpha,beta,score,tempb,tempc,tempsf,tempst,xside,rpt;
|
|||||||
NodeCnt = ETnodes = EvalNodes = HashCnt = 0;
|
NodeCnt = ETnodes = EvalNodes = HashCnt = 0;
|
||||||
Zscore = 0; zwndw = 20;
|
Zscore = 0; zwndw = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!timeout && Sdepth < MaxSearchDepth)
|
while (!timeout && Sdepth < MaxSearchDepth)
|
||||||
{
|
{
|
||||||
Sdepth++;
|
Sdepth++;
|
||||||
@ -576,7 +576,7 @@ static short i,alpha,beta,score,tempb,tempc,tempsf,tempst,xside,rpt;
|
|||||||
if (score == -9999 || score == 9998) mate = true;
|
if (score == -9999 || score == 9998) mate = true;
|
||||||
if (mate) hint = 0;
|
if (mate) hint = 0;
|
||||||
if (root->flags & cstlmask) Game50 = GameCnt;
|
if (root->flags & cstlmask) Game50 = GameCnt;
|
||||||
else if (board[root->t] == pawn || (root->flags & capture))
|
else if (board[root->t] == pawn || (root->flags & capture))
|
||||||
Game50 = GameCnt;
|
Game50 = GameCnt;
|
||||||
GameList[GameCnt].score = score;
|
GameList[GameCnt].score = score;
|
||||||
GameList[GameCnt].nodes = NodeCnt;
|
GameList[GameCnt].nodes = NodeCnt;
|
||||||
@ -599,13 +599,13 @@ static short i,alpha,beta,score,tempb,tempc,tempsf,tempst,xside,rpt;
|
|||||||
OpeningBook()
|
OpeningBook()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Go thru each of the opening lines of play and check for a match with
|
Go thru each of the opening lines of play and check for a match with
|
||||||
the current game listing. If a match occurs, generate a random number.
|
the current game listing. If a match occurs, generate a random number.
|
||||||
If this number is the largest generated so far then the next move in
|
If this number is the largest generated so far then the next move in
|
||||||
this line becomes the current "candidate". After all lines are
|
this line becomes the current "candidate". After all lines are
|
||||||
checked, the candidate move is put at the top of the Tree[] array and
|
checked, the candidate move is put at the top of the Tree[] array and
|
||||||
will be played by the program. Note that the program does not handle
|
will be played by the program. Note that the program does not handle
|
||||||
book transpositions.
|
book transpositions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -630,7 +630,7 @@ struct BookEntry *p;
|
|||||||
}
|
}
|
||||||
p = p->next;
|
p = p->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (pnt = TrPnt[1]; pnt < TrPnt[2]; pnt++)
|
for (pnt = TrPnt[1]; pnt < TrPnt[2]; pnt++)
|
||||||
if ((Tree[pnt].f<<8) + Tree[pnt].t == m) Tree[pnt].score = 0;
|
if ((Tree[pnt].f<<8) + Tree[pnt].t == m) Tree[pnt].score = 0;
|
||||||
pick(TrPnt[1],TrPnt[2]-1);
|
pick(TrPnt[1],TrPnt[2]-1);
|
||||||
@ -658,12 +658,12 @@ short side,ply,depth,alpha,beta,*rpt;
|
|||||||
unsigned short bstline[];
|
unsigned short bstline[];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Perform an alpha-beta search to determine the score for the current
|
Perform an alpha-beta search to determine the score for the current
|
||||||
board position. If depth <= 0 only capturing moves, pawn promotions
|
board position. If depth <= 0 only capturing moves, pawn promotions
|
||||||
and responses to check are generated and searched, otherwise all
|
and responses to check are generated and searched, otherwise all
|
||||||
moves are processed. The search depth is modified for check evasions,
|
moves are processed. The search depth is modified for check evasions,
|
||||||
certain re-captures and threats. Extensions may continue for up to 11
|
certain re-captures and threats. Extensions may continue for up to 11
|
||||||
ply beyond the nominal search depth.
|
ply beyond the nominal search depth.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define prune (cf && score+node->score < alpha)
|
#define prune (cf && score+node->score < alpha)
|
||||||
@ -683,7 +683,7 @@ struct leaf *node,tmp;
|
|||||||
NodeCnt++;
|
NodeCnt++;
|
||||||
xside = otherside[side];
|
xside = otherside[side];
|
||||||
if (depth < 0) depth = 0;
|
if (depth < 0) depth = 0;
|
||||||
|
|
||||||
if (ply <= Sdepth+3) repetition(rpt); else *rpt = 0;
|
if (ply <= Sdepth+3) repetition(rpt); else *rpt = 0;
|
||||||
if (*rpt >= 2) return(0);
|
if (*rpt >= 2) return(0);
|
||||||
|
|
||||||
@ -693,7 +693,7 @@ struct leaf *node,tmp;
|
|||||||
bstline[ply] = 0;
|
bstline[ply] = 0;
|
||||||
return(score);
|
return(score);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depth > 0)
|
if (depth > 0)
|
||||||
{
|
{
|
||||||
if (InChk || PawnThreat[ply-1] || ReCapture) ++depth;
|
if (InChk || PawnThreat[ply-1] || ReCapture) ++depth;
|
||||||
@ -704,7 +704,7 @@ struct leaf *node,tmp;
|
|||||||
(InChk || PawnThreat[ply-1] || Threat[ply-1])) ++depth;
|
(InChk || PawnThreat[ply-1] || Threat[ply-1])) ++depth;
|
||||||
else if (score <= beta && MateThreat) ++depth;
|
else if (score <= beta && MateThreat) ++depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depth > 0 && hashflag && ply > 1)
|
if (depth > 0 && hashflag && ply > 1)
|
||||||
{
|
{
|
||||||
ProbeTTable(side,depth,&alpha,&beta,&score);
|
ProbeTTable(side,depth,&alpha,&beta,&score);
|
||||||
@ -713,21 +713,21 @@ struct leaf *node,tmp;
|
|||||||
if (beta == -20000) return(score);
|
if (beta == -20000) return(score);
|
||||||
if (alpha > beta) return(alpha);
|
if (alpha > beta) return(alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Sdepth == 1) d = 7; else d = 11;
|
if (Sdepth == 1) d = 7; else d = 11;
|
||||||
if (ply > Sdepth+d || (depth < 1 && score > beta)) return(score);
|
if (ply > Sdepth+d || (depth < 1 && score > beta)) return(score);
|
||||||
|
|
||||||
if (ply > 1)
|
if (ply > 1)
|
||||||
if (depth > 0) MoveList(side,ply);
|
if (depth > 0) MoveList(side,ply);
|
||||||
else CaptureList(side,xside,ply);
|
else CaptureList(side,xside,ply);
|
||||||
|
|
||||||
if (TrPnt[ply] == TrPnt[ply+1]) return(score);
|
if (TrPnt[ply] == TrPnt[ply+1]) return(score);
|
||||||
|
|
||||||
cf = (depth < 1 && ply > Sdepth+1 && !ChkFlag[ply-2] && !slk);
|
cf = (depth < 1 && ply > Sdepth+1 && !ChkFlag[ply-2] && !slk);
|
||||||
|
|
||||||
if (depth > 0) best = -12000; else best = score;
|
if (depth > 0) best = -12000; else best = score;
|
||||||
if (best > alpha) alpha = best;
|
if (best > alpha) alpha = best;
|
||||||
|
|
||||||
for (pnt = pbst = TrPnt[ply];
|
for (pnt = pbst = TrPnt[ply];
|
||||||
pnt < TrPnt[ply+1] && best <= beta;
|
pnt < TrPnt[ply+1] && best <= beta;
|
||||||
pnt++)
|
pnt++)
|
||||||
@ -736,7 +736,7 @@ struct leaf *node,tmp;
|
|||||||
node = &Tree[pnt];
|
node = &Tree[pnt];
|
||||||
mv = (node->f << 8) + node->t;
|
mv = (node->f << 8) + node->t;
|
||||||
nxtline[ply+1] = 0;
|
nxtline[ply+1] = 0;
|
||||||
|
|
||||||
if (prune) break;
|
if (prune) break;
|
||||||
if (ply == 1) UpdateSearchStatus;
|
if (ply == 1) UpdateSearchStatus;
|
||||||
|
|
||||||
@ -789,7 +789,7 @@ struct leaf *node,tmp;
|
|||||||
if (NodeCnt > ETnodes) ElapsedTime(0);
|
if (NodeCnt > ETnodes) ElapsedTime(0);
|
||||||
if (timeout) return(-Tscore[ply-1]);
|
if (timeout) return(-Tscore[ply-1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
node = &Tree[pbst];
|
node = &Tree[pbst];
|
||||||
mv = (node->f<<8) + node->t;
|
mv = (node->f<<8) + node->t;
|
||||||
if (hashflag && ply <= Sdepth && *rpt == 0 && best == alpha)
|
if (hashflag && ply <= Sdepth && *rpt == 0 && best == alpha)
|
||||||
@ -815,13 +815,13 @@ evaluate(side,xside,ply,alpha,beta)
|
|||||||
short side,xside,ply,alpha,beta;
|
short side,xside,ply,alpha,beta;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Compute an estimate of the score by adding the positional score from
|
Compute an estimate of the score by adding the positional score from
|
||||||
the previous ply to the material difference. If this score falls
|
the previous ply to the material difference. If this score falls
|
||||||
inside a window which is 180 points wider than the alpha-beta window
|
inside a window which is 180 points wider than the alpha-beta window
|
||||||
(or within a 50 point window during quiescence search) call
|
(or within a 50 point window during quiescence search) call
|
||||||
ScorePosition() to determine a score, otherwise return the estimated
|
ScorePosition() to determine a score, otherwise return the estimated
|
||||||
score. If one side has only a king and the other either has no pawns
|
score. If one side has only a king and the other either has no pawns
|
||||||
or no pieces then the function ScoreLoneKing() is called.
|
or no pieces then the function ScoreLoneKing() is called.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -832,14 +832,14 @@ short s,evflag;
|
|||||||
(mtl[black] == valueK && (pmtl[white] == 0 || emtl[white] == 0)));
|
(mtl[black] == valueK && (pmtl[white] == 0 || emtl[white] == 0)));
|
||||||
s = -Pscore[ply-1] + mtl[side] - mtl[xside];
|
s = -Pscore[ply-1] + mtl[side] - mtl[xside];
|
||||||
s -= INCscore;
|
s -= INCscore;
|
||||||
|
|
||||||
if (slk) evflag = false;
|
if (slk) evflag = false;
|
||||||
else evflag =
|
else evflag =
|
||||||
(ply == 1 || ply < Sdepth ||
|
(ply == 1 || ply < Sdepth ||
|
||||||
((ply == Sdepth+1 || ply == Sdepth+2) &&
|
((ply == Sdepth+1 || ply == Sdepth+2) &&
|
||||||
(s > alpha-xwndw && s < beta+xwndw)) ||
|
(s > alpha-xwndw && s < beta+xwndw)) ||
|
||||||
(ply > Sdepth+2 && s >= alpha-25 && s <= beta+25));
|
(ply > Sdepth+2 && s >= alpha-25 && s <= beta+25));
|
||||||
|
|
||||||
if (evflag)
|
if (evflag)
|
||||||
{
|
{
|
||||||
EvalNodes++;
|
EvalNodes++;
|
||||||
@ -855,7 +855,7 @@ short s,evflag;
|
|||||||
InChk = SqAtakd(PieceList[side][0],xside);
|
InChk = SqAtakd(PieceList[side][0],xside);
|
||||||
if (slk) ScoreLoneKing(side,&s);
|
if (slk) ScoreLoneKing(side,&s);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pscore[ply] = s - mtl[side] + mtl[xside];
|
Pscore[ply] = s - mtl[side] + mtl[xside];
|
||||||
if (InChk) ChkFlag[ply-1] = Pindex[TOsquare];
|
if (InChk) ChkFlag[ply-1] = Pindex[TOsquare];
|
||||||
else ChkFlag[ply-1] = 0;
|
else ChkFlag[ply-1] = 0;
|
||||||
@ -867,7 +867,7 @@ short s,evflag;
|
|||||||
ProbeTTable(side,depth,alpha,beta,score)
|
ProbeTTable(side,depth,alpha,beta,score)
|
||||||
short side,depth,*alpha,*beta,*score;
|
short side,depth,*alpha,*beta,*score;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Look for the current board position in the transposition table.
|
Look for the current board position in the transposition table.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -916,7 +916,7 @@ short hindx;
|
|||||||
ptbl = (ttable + hindx);
|
ptbl = (ttable + hindx);
|
||||||
ptbl->hashbd = hashbd;
|
ptbl->hashbd = hashbd;
|
||||||
ptbl->depth = depth;
|
ptbl->depth = depth;
|
||||||
ptbl->score = score;
|
ptbl->score = score;
|
||||||
ptbl->mv = mv;
|
ptbl->mv = mv;
|
||||||
ptbl->flags = 0;
|
ptbl->flags = 0;
|
||||||
if (score < alpha) ptbl->flags |= upperbound;
|
if (score < alpha) ptbl->flags |= upperbound;
|
||||||
@ -941,10 +941,10 @@ MoveList(side,ply)
|
|||||||
short side,ply;
|
short side,ply;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Fill the array Tree[] with all available moves for side to play. Array
|
Fill the array Tree[] with all available moves for side to play. Array
|
||||||
TrPnt[ply] contains the index into Tree[] of the first move at a ply.
|
TrPnt[ply] contains the index into Tree[] of the first move at a ply.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
register short i;
|
register short i;
|
||||||
short xside,f;
|
short xside,f;
|
||||||
@ -979,16 +979,16 @@ GenMoves(ply,sq,side,xside)
|
|||||||
short ply,sq,side,xside;
|
short ply,sq,side,xside;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Generate moves for a piece. The from square is mapped onto a special
|
Generate moves for a piece. The from square is mapped onto a special
|
||||||
board and offsets (taken from array Dir[]) are added to the mapped
|
board and offsets (taken from array Dir[]) are added to the mapped
|
||||||
location. The newly generated square is tested to see if it falls off
|
location. The newly generated square is tested to see if it falls off
|
||||||
the board by ANDing the square with 88 HEX. Legal moves are linked
|
the board by ANDing the square with 88 HEX. Legal moves are linked
|
||||||
into the tree.
|
into the tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
register short m,u,d;
|
register short m,u,d;
|
||||||
short i,m0,piece;
|
short i,m0,piece;
|
||||||
|
|
||||||
piece = board[sq]; m0 = map[sq];
|
piece = board[sq]; m0 = map[sq];
|
||||||
if (sweep[piece])
|
if (sweep[piece])
|
||||||
@ -1057,7 +1057,7 @@ short ply,f,t,xside;
|
|||||||
2. Capture of last moved piece
|
2. Capture of last moved piece
|
||||||
3. Other captures (major pieces first)
|
3. Other captures (major pieces first)
|
||||||
4. Killer moves
|
4. Killer moves
|
||||||
5. "history" killers
|
5. "history" killers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1140,7 +1140,7 @@ struct leaf *node;
|
|||||||
}
|
}
|
||||||
PL = PieceList[side];
|
PL = PieceList[side];
|
||||||
for (i = 0; i <= PieceCnt[side]; i++)
|
for (i = 0; i <= PieceCnt[side]; i++)
|
||||||
{
|
{
|
||||||
sq = PL[i];
|
sq = PL[i];
|
||||||
m0 = map[sq]; piece = board[sq];
|
m0 = map[sq]; piece = board[sq];
|
||||||
j1 = Dstart[piece]; j2 = Dstop[piece];
|
j1 = Dstart[piece]; j2 = Dstop[piece];
|
||||||
@ -1176,7 +1176,7 @@ struct leaf *node;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int castle(side,kf,kt,iop)
|
int castle(side,kf,kt,iop)
|
||||||
short side,kf,kt,iop;
|
short side,kf,kt,iop;
|
||||||
|
|
||||||
@ -1244,7 +1244,7 @@ short l;
|
|||||||
{
|
{
|
||||||
board[l] = no_piece; color[l] = neutral;
|
board[l] = no_piece; color[l] = neutral;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
board[l] = pawn; color[l] = xside;
|
board[l] = pawn; color[l] = xside;
|
||||||
}
|
}
|
||||||
@ -1257,11 +1257,11 @@ short side,*tempc,*tempb,*tempsf,*tempst;
|
|||||||
struct leaf *node;
|
struct leaf *node;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Update Arrays board[], color[], and Pindex[] to reflect the new board
|
Update Arrays board[], color[], and Pindex[] to reflect the new board
|
||||||
position obtained after making the move pointed to by node. Also
|
position obtained after making the move pointed to by node. Also
|
||||||
update miscellaneous stuff that changes when a move is made.
|
update miscellaneous stuff that changes when a move is made.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
register short f,t;
|
register short f,t;
|
||||||
short xside,ct,cf;
|
short xside,ct,cf;
|
||||||
@ -1323,7 +1323,7 @@ short xside,ct,cf;
|
|||||||
UpdateHashbd(side,queen,f,-1);
|
UpdateHashbd(side,queen,f,-1);
|
||||||
}
|
}
|
||||||
INCscore -= *tempsf;
|
INCscore -= *tempsf;
|
||||||
}
|
}
|
||||||
if (board[t] == king) ++kingmoved[side];
|
if (board[t] == king) ++kingmoved[side];
|
||||||
if (node->flags & epmask) EnPassant(xside,f,t,1);
|
if (node->flags & epmask) EnPassant(xside,f,t,1);
|
||||||
else if (hashflag) UpdateHashbd(side,board[t],f,t);
|
else if (hashflag) UpdateHashbd(side,board[t],f,t);
|
||||||
@ -1363,7 +1363,7 @@ short xside;
|
|||||||
UpdateHashbd(side,queen,-1,t);
|
UpdateHashbd(side,queen,-1,t);
|
||||||
UpdateHashbd(side,pawn,-1,t);
|
UpdateHashbd(side,pawn,-1,t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (*tempc != neutral)
|
if (*tempc != neutral)
|
||||||
{
|
{
|
||||||
UpdatePieceList(*tempc,t,2);
|
UpdatePieceList(*tempc,t,2);
|
||||||
@ -1388,10 +1388,10 @@ UpdateHashbd(side,piece,f,t)
|
|||||||
short side,piece,f,t;
|
short side,piece,f,t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
hashbd contains a 32 bit "signature" of the board position. hashkey
|
hashbd contains a 32 bit "signature" of the board position. hashkey
|
||||||
contains a 16 bit code used to address the hash table. When a move is
|
contains a 16 bit code used to address the hash table. When a move is
|
||||||
made, XOR'ing the hashcode of moved piece on the from and to squares
|
made, XOR'ing the hashcode of moved piece on the from and to squares
|
||||||
with the hashbd and hashkey values keeps things current.
|
with the hashbd and hashkey values keeps things current.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1412,8 +1412,8 @@ UpdatePieceList(side,sq,iop)
|
|||||||
short side,sq,iop;
|
short side,sq,iop;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Update the PieceList and Pindex arrays when a piece is captured or
|
Update the PieceList and Pindex arrays when a piece is captured or
|
||||||
when a capture is unmade.
|
when a capture is unmade.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1439,13 +1439,13 @@ register short i;
|
|||||||
InitializeStats()
|
InitializeStats()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Scan thru the board seeing what's on each square. If a piece is found,
|
Scan thru the board seeing what's on each square. If a piece is found,
|
||||||
update the variables PieceCnt, PawnCnt, Pindex and PieceList. Also
|
update the variables PieceCnt, PawnCnt, Pindex and PieceList. Also
|
||||||
determine the material for each side and set the hashkey and hashbd
|
determine the material for each side and set the hashkey and hashbd
|
||||||
variables to represent the current board position. Array
|
variables to represent the current board position. Array
|
||||||
PieceList[side][indx] contains the location of all the pieces of
|
PieceList[side][indx] contains the location of all the pieces of
|
||||||
either side. Array Pindex[sq] contains the indx into PieceList for a
|
either side. Array Pindex[sq] contains the indx into PieceList for a
|
||||||
given square.
|
given square.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1477,9 +1477,9 @@ register short i,sq;
|
|||||||
pick(p1,p2)
|
pick(p1,p2)
|
||||||
short p1,p2;
|
short p1,p2;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Find the best move in the tree between indexes p1 and p2. Swap the
|
Find the best move in the tree between indexes p1 and p2. Swap the
|
||||||
best move into the p1 element.
|
best move into the p1 element.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1535,7 +1535,7 @@ short sq,side;
|
|||||||
/*
|
/*
|
||||||
See if any piece with color 'side' ataks sq. First check for pawns
|
See if any piece with color 'side' ataks sq. First check for pawns
|
||||||
or king, then try other pieces. Array Dcode is used to check for
|
or king, then try other pieces. Array Dcode is used to check for
|
||||||
knight attacks or R,B,Q co-linearity.
|
knight attacks or R,B,Q co-linearity.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1550,7 +1550,7 @@ short i,m0,m1,loc,piece,*PL;
|
|||||||
if (!(m & 0x88))
|
if (!(m & 0x88))
|
||||||
if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true);
|
if (board[unmap[m]] == pawn && color[unmap[m]] == side) return(true);
|
||||||
if (distance(sq,PieceList[side][0]) == 1) return(true);
|
if (distance(sq,PieceList[side][0]) == 1) return(true);
|
||||||
|
|
||||||
PL = PieceList[side];
|
PL = PieceList[side];
|
||||||
for (i = 1; i <= PieceCnt[side]; i++)
|
for (i = 1; i <= PieceCnt[side]; i++)
|
||||||
{
|
{
|
||||||
@ -1584,7 +1584,7 @@ short side,*a;
|
|||||||
{
|
{
|
||||||
register short u,m;
|
register short u,m;
|
||||||
short d,c,j,j1,j2,piece,i,m0,sq,*PL;
|
short d,c,j,j1,j2,piece,i,m0,sq,*PL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
memset((char *)a,0,64*sizeof(short));
|
memset((char *)a,0,64*sizeof(short));
|
||||||
*/
|
*/
|
||||||
@ -1626,9 +1626,9 @@ ScorePosition(side,score)
|
|||||||
short side,*score;
|
short side,*score;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Perform normal static evaluation of board position. A score is
|
Perform normal static evaluation of board position. A score is
|
||||||
generated for each piece and these are summed to get a score for each
|
generated for each piece and these are summed to get a score for each
|
||||||
side.
|
side.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1656,17 +1656,17 @@ short i,xside,pscore[3];
|
|||||||
}
|
}
|
||||||
if (hung[side] > 1) pscore[side] += HUNGX;
|
if (hung[side] > 1) pscore[side] += HUNGX;
|
||||||
if (hung[xside] > 1) pscore[xside] += HUNGX;
|
if (hung[xside] > 1) pscore[xside] += HUNGX;
|
||||||
|
|
||||||
*score = mtl[side] - mtl[xside] + pscore[side] - pscore[xside] + 10;
|
*score = mtl[side] - mtl[xside] + pscore[side] - pscore[xside] + 10;
|
||||||
if (dither) *score += rand() % dither;
|
if (dither) *score += rand() % dither;
|
||||||
|
|
||||||
if (*score > 0 && pmtl[side] == 0)
|
if (*score > 0 && pmtl[side] == 0)
|
||||||
if (emtl[side] < valueR) *score = 0;
|
if (emtl[side] < valueR) *score = 0;
|
||||||
else if (*score < valueR) *score /= 2;
|
else if (*score < valueR) *score /= 2;
|
||||||
if (*score < 0 && pmtl[xside] == 0)
|
if (*score < 0 && pmtl[xside] == 0)
|
||||||
if (emtl[xside] < valueR) *score = 0;
|
if (emtl[xside] < valueR) *score = 0;
|
||||||
else if (-*score < valueR) *score /= 2;
|
else if (-*score < valueR) *score /= 2;
|
||||||
|
|
||||||
if (mtl[xside] == valueK && emtl[side] > valueB) *score += 200;
|
if (mtl[xside] == valueK && emtl[side] > valueB) *score += 200;
|
||||||
if (mtl[side] == valueK && emtl[xside] > valueB) *score -= 200;
|
if (mtl[side] == valueK && emtl[xside] > valueB) *score -= 200;
|
||||||
}
|
}
|
||||||
@ -1675,7 +1675,7 @@ short i,xside,pscore[3];
|
|||||||
ScoreLoneKing(side,score)
|
ScoreLoneKing(side,score)
|
||||||
short side,*score;
|
short side,*score;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Static evaluation when loser has only a king and winner has no pawns
|
Static evaluation when loser has only a king and winner has no pawns
|
||||||
or no pieces.
|
or no pieces.
|
||||||
*/
|
*/
|
||||||
@ -1687,19 +1687,19 @@ short winner,loser,king1,king2,s,i;
|
|||||||
if (mtl[white] > mtl[black]) winner = white; else winner = black;
|
if (mtl[white] > mtl[black]) winner = white; else winner = black;
|
||||||
loser = otherside[winner];
|
loser = otherside[winner];
|
||||||
king1 = PieceList[winner][0]; king2 = PieceList[loser][0];
|
king1 = PieceList[winner][0]; king2 = PieceList[loser][0];
|
||||||
|
|
||||||
s = 0;
|
s = 0;
|
||||||
|
|
||||||
if (pmtl[winner] > 0)
|
if (pmtl[winner] > 0)
|
||||||
for (i = 1; i <= PieceCnt[winner]; i++)
|
for (i = 1; i <= PieceCnt[winner]; i++)
|
||||||
s += ScoreKPK(side,winner,loser,king1,king2,PieceList[winner][i]);
|
s += ScoreKPK(side,winner,loser,king1,king2,PieceList[winner][i]);
|
||||||
|
|
||||||
else if (emtl[winner] == valueB+valueN)
|
else if (emtl[winner] == valueB+valueN)
|
||||||
s = ScoreKBNK(winner,king1,king2);
|
s = ScoreKBNK(winner,king1,king2);
|
||||||
|
|
||||||
else if (emtl[winner] > valueB)
|
else if (emtl[winner] > valueB)
|
||||||
s = 500 + emtl[winner] - DyingKing[king2] - 2*distance(king1,king2);
|
s = 500 + emtl[winner] - DyingKing[king2] - 2*distance(king1,king2);
|
||||||
|
|
||||||
if (side == winner) *score = s; else *score = -s;
|
if (side == winner) *score = s; else *score = -s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1713,7 +1713,7 @@ short side,winner,loser,king1,king2,sq;
|
|||||||
|
|
||||||
{
|
{
|
||||||
short s,r;
|
short s,r;
|
||||||
|
|
||||||
if (PieceCnt[winner] == 1) s = 50; else s = 120;
|
if (PieceCnt[winner] == 1) s = 50; else s = 120;
|
||||||
if (winner == white)
|
if (winner == white)
|
||||||
{
|
{
|
||||||
@ -1883,8 +1883,8 @@ short s,piece,a1,a2,in_square,r,mob,e,c;
|
|||||||
if (PC2[7] == 0) s += KHOPNX;
|
if (PC2[7] == 0) s += KHOPNX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a2 > 0)
|
if (a2 > 0)
|
||||||
{
|
{
|
||||||
c = (control[piece] & 0x4FFF);
|
c = (control[piece] & 0x4FFF);
|
||||||
if (a1 == 0 || a2 > c+1)
|
if (a1 == 0 || a2 > c+1)
|
||||||
@ -1977,8 +1977,8 @@ BRscan(sq,s,mob)
|
|||||||
short sq,*s,*mob;
|
short sq,*s,*mob;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the
|
Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the
|
||||||
hung[] array if a pin is found.
|
hung[] array if a pin is found.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2077,9 +2077,9 @@ short i,m0;
|
|||||||
ExaminePosition()
|
ExaminePosition()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is done one time before the search is started. Set up arrays
|
This is done one time before the search is started. Set up arrays
|
||||||
Mwpawn, Mbpawn, Mknight, Mbishop, Mking which are used in the
|
Mwpawn, Mbpawn, Mknight, Mbishop, Mking which are used in the
|
||||||
SqValue() function to determine the positional value of each piece.
|
SqValue() function to determine the positional value of each piece.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2114,14 +2114,14 @@ short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank;
|
|||||||
if (!PawnStorm && stage < 5)
|
if (!PawnStorm && stage < 5)
|
||||||
PawnStorm = ((column[wking] < 3 && column[bking] > 4) ||
|
PawnStorm = ((column[wking] < 3 && column[bking] > 4) ||
|
||||||
(column[wking] > 4 && column[bking] < 3));
|
(column[wking] > 4 && column[bking] < 3));
|
||||||
|
|
||||||
CopyBoard(pknight,Mknight[white]);
|
CopyBoard(pknight,Mknight[white]);
|
||||||
CopyBoard(pknight,Mknight[black]);
|
CopyBoard(pknight,Mknight[black]);
|
||||||
CopyBoard(pbishop,Mbishop[white]);
|
CopyBoard(pbishop,Mbishop[white]);
|
||||||
CopyBoard(pbishop,Mbishop[black]);
|
CopyBoard(pbishop,Mbishop[black]);
|
||||||
BlendBoard(KingOpening,KingEnding,Mking[white]);
|
BlendBoard(KingOpening,KingEnding,Mking[white]);
|
||||||
BlendBoard(KingOpening,KingEnding,Mking[black]);
|
BlendBoard(KingOpening,KingEnding,Mking[black]);
|
||||||
|
|
||||||
for (sq = 0; sq < 64; sq++)
|
for (sq = 0; sq < 64; sq++)
|
||||||
{
|
{
|
||||||
fyle = column[sq]; rank = row[sq];
|
fyle = column[sq]; rank = row[sq];
|
||||||
@ -2159,7 +2159,7 @@ short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank;
|
|||||||
if ((column[bking] < 4 && fyle > 4) ||
|
if ((column[bking] < 4 && fyle > 4) ||
|
||||||
(column[bking] > 3 && fyle < 3)) Mbpawn[sq] -= 3*rank;
|
(column[bking] > 3 && fyle < 3)) Mbpawn[sq] -= 3*rank;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mknight[white][sq] += 5 - distance(sq,bking);
|
Mknight[white][sq] += 5 - distance(sq,bking);
|
||||||
Mknight[white][sq] += 5 - distance(sq,wking);
|
Mknight[white][sq] += 5 - distance(sq,wking);
|
||||||
Mknight[black][sq] += 5 - distance(sq,wking);
|
Mknight[black][sq] += 5 - distance(sq,wking);
|
||||||
@ -2176,19 +2176,19 @@ short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank;
|
|||||||
if (bstrong) Mknight[black][sq] += KNIGHTSTRONG;
|
if (bstrong) Mknight[black][sq] += KNIGHTSTRONG;
|
||||||
if (wstrong) Mbishop[white][sq] += BISHOPSTRONG;
|
if (wstrong) Mbishop[white][sq] += BISHOPSTRONG;
|
||||||
if (bstrong) Mbishop[black][sq] += BISHOPSTRONG;
|
if (bstrong) Mbishop[black][sq] += BISHOPSTRONG;
|
||||||
|
|
||||||
if (HasBishop[white] == 2) Mbishop[white][sq] += 8;
|
if (HasBishop[white] == 2) Mbishop[white][sq] += 8;
|
||||||
if (HasBishop[black] == 2) Mbishop[black][sq] += 8;
|
if (HasBishop[black] == 2) Mbishop[black][sq] += 8;
|
||||||
if (HasKnight[white] == 2) Mknight[white][sq] += 5;
|
if (HasKnight[white] == 2) Mknight[white][sq] += 5;
|
||||||
if (HasKnight[black] == 2) Mknight[black][sq] += 5;
|
if (HasKnight[black] == 2) Mknight[black][sq] += 5;
|
||||||
|
|
||||||
if (board[sq] == bishop)
|
if (board[sq] == bishop)
|
||||||
if (rank % 2 == fyle % 2) KBNKsq = 0; else KBNKsq = 7;
|
if (rank % 2 == fyle % 2) KBNKsq = 0; else KBNKsq = 7;
|
||||||
|
|
||||||
Kfield[white][sq] = Kfield[black][sq] = 0;
|
Kfield[white][sq] = Kfield[black][sq] = 0;
|
||||||
if (distance(sq,wking) == 1) Kfield[black][sq] = KATAK;
|
if (distance(sq,wking) == 1) Kfield[black][sq] = KATAK;
|
||||||
if (distance(sq,bking) == 1) Kfield[white][sq] = KATAK;
|
if (distance(sq,bking) == 1) Kfield[white][sq] = KATAK;
|
||||||
|
|
||||||
Pd = 0;
|
Pd = 0;
|
||||||
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
||||||
if (board[i] == pawn)
|
if (board[i] == pawn)
|
||||||
@ -2221,9 +2221,9 @@ short wpadv,bpadv,wstrong,bstrong,z,side,pp,j,val,Pd,fyle,rank;
|
|||||||
|
|
||||||
UpdateWeights()
|
UpdateWeights()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If material balance has changed, determine the values for the
|
If material balance has changed, determine the values for the
|
||||||
positional evaluation terms.
|
positional evaluation terms.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -2241,7 +2241,7 @@ short tmtl;
|
|||||||
if (tmtl > 3600) stage2 = 0;
|
if (tmtl > 3600) stage2 = 0;
|
||||||
else if (tmtl < 1400) stage2 = 10;
|
else if (tmtl < 1400) stage2 = 10;
|
||||||
else stage2 = (3600-tmtl) / 220;
|
else stage2 = (3600-tmtl) / 220;
|
||||||
|
|
||||||
PEDRNK2B = -15; /* centre pawn on 2nd rank & blocked */
|
PEDRNK2B = -15; /* centre pawn on 2nd rank & blocked */
|
||||||
PBLOK = -4; /* blocked backward pawn */
|
PBLOK = -4; /* blocked backward pawn */
|
||||||
PDOUBLED = -14; /* doubled pawn */
|
PDOUBLED = -14; /* doubled pawn */
|
||||||
@ -2250,27 +2250,27 @@ short tmtl;
|
|||||||
PADVNCM = 10; /* advanced pawn multiplier */
|
PADVNCM = 10; /* advanced pawn multiplier */
|
||||||
PADVNCI = 7; /* muliplier for isolated pawn */
|
PADVNCI = 7; /* muliplier for isolated pawn */
|
||||||
PawnBonus = stage;
|
PawnBonus = stage;
|
||||||
|
|
||||||
KNIGHTPOST = (stage+2)/3; /* knight near enemy pieces */
|
KNIGHTPOST = (stage+2)/3; /* knight near enemy pieces */
|
||||||
KNIGHTSTRONG = (stage+6)/2; /* occupies pawn hole */
|
KNIGHTSTRONG = (stage+6)/2; /* occupies pawn hole */
|
||||||
|
|
||||||
BISHOPSTRONG = (stage+6)/2; /* occupies pawn hole */
|
BISHOPSTRONG = (stage+6)/2; /* occupies pawn hole */
|
||||||
BishopBonus = 2*stage;
|
BishopBonus = 2*stage;
|
||||||
|
|
||||||
RHOPN = 10; /* rook on half open file */
|
RHOPN = 10; /* rook on half open file */
|
||||||
RHOPNX = 4;
|
RHOPNX = 4;
|
||||||
RookBonus = 6*stage;
|
RookBonus = 6*stage;
|
||||||
|
|
||||||
XRAY = 8; /* Xray attack on piece */
|
XRAY = 8; /* Xray attack on piece */
|
||||||
PINVAL = 10; /* Pin */
|
PINVAL = 10; /* Pin */
|
||||||
|
|
||||||
KHOPN = (3*stage-30) / 2; /* king on half open file */
|
KHOPN = (3*stage-30) / 2; /* king on half open file */
|
||||||
KHOPNX = KHOPN / 2;
|
KHOPNX = KHOPN / 2;
|
||||||
KCASTLD = 10 - stage;
|
KCASTLD = 10 - stage;
|
||||||
KMOVD = -40 / (stage+1); /* king moved before castling */
|
KMOVD = -40 / (stage+1); /* king moved before castling */
|
||||||
KATAK = (10-stage) / 2; /* B,R attacks near enemy king */
|
KATAK = (10-stage) / 2; /* B,R attacks near enemy king */
|
||||||
if (stage < 8) KSFTY = 16-2*stage; else KSFTY = 0;
|
if (stage < 8) KSFTY = 16-2*stage; else KSFTY = 0;
|
||||||
|
|
||||||
ATAKD = -6; /* defender > attacker */
|
ATAKD = -6; /* defender > attacker */
|
||||||
HUNGP = -8; /* each hung piece */
|
HUNGP = -8; /* each hung piece */
|
||||||
HUNGX = -12; /* extra for >1 hung piece */
|
HUNGX = -12; /* extra for >1 hung piece */
|
||||||
|
@ -21,11 +21,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* Header file for GNU CHESS */
|
/* Header file for GNU CHESS */
|
||||||
|
|
||||||
#define neutral 2
|
#define neutral 2
|
||||||
#define white 0
|
#define white 0
|
||||||
#define black 1
|
#define black 1
|
||||||
#define no_piece 0
|
#define no_piece 0
|
||||||
#define pawn 1
|
#define pawn 1
|
||||||
#define knight 2
|
#define knight 2
|
||||||
|
@ -161,7 +161,7 @@ short sq,side;
|
|||||||
u = p[u].nextpos;
|
u = p[u].nextpos;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (color[u] == side &&
|
if (color[u] == side &&
|
||||||
(board[u] == queen || board[u] == bishop))
|
(board[u] == queen || board[u] == bishop))
|
||||||
return(true);
|
return(true);
|
||||||
u = p[u].nextdir;
|
u = p[u].nextdir;
|
||||||
@ -175,7 +175,7 @@ short sq,side;
|
|||||||
u = p[u].nextpos;
|
u = p[u].nextpos;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (color[u] == side &&
|
if (color[u] == side &&
|
||||||
(board[u] == queen || board[u] == rook))
|
(board[u] == queen || board[u] == rook))
|
||||||
return(true);
|
return(true);
|
||||||
u = p[u].nextdir;
|
u = p[u].nextdir;
|
||||||
@ -201,8 +201,8 @@ short sq,side;
|
|||||||
BRscan(sq,s,mob)
|
BRscan(sq,s,mob)
|
||||||
short sq,*s,*mob;
|
short sq,*s,*mob;
|
||||||
/*
|
/*
|
||||||
Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the
|
Find Bishop and Rook mobility, XRAY attacks, and pins. Increment the
|
||||||
hung[] array if a pin is found.
|
hung[] array if a pin is found.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
register short u,piece,pin;
|
register short u,piece,pin;
|
||||||
@ -260,7 +260,7 @@ short side,xside,ply;
|
|||||||
register struct sqdata *p;
|
register struct sqdata *p;
|
||||||
short i,piece,*PL;
|
short i,piece,*PL;
|
||||||
struct leaf *node;
|
struct leaf *node;
|
||||||
|
|
||||||
TrPnt[ply+1] = TrPnt[ply];
|
TrPnt[ply+1] = TrPnt[ply];
|
||||||
node = &Tree[TrPnt[ply]];
|
node = &Tree[TrPnt[ply]];
|
||||||
PL = PieceList[side];
|
PL = PieceList[side];
|
||||||
@ -312,17 +312,17 @@ short side,xside,ply;
|
|||||||
#if (NEWMOVE > 5)
|
#if (NEWMOVE > 5)
|
||||||
GenMoves(ply,sq,side,xside)
|
GenMoves(ply,sq,side,xside)
|
||||||
short ply,sq,side,xside;
|
short ply,sq,side,xside;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Generate moves for a piece. The moves are taken from the
|
Generate moves for a piece. The moves are taken from the
|
||||||
precalulated array posdata. If the board is free, next move
|
precalulated array posdata. If the board is free, next move
|
||||||
is choosen from nextpos else from nextdir.
|
is choosen from nextpos else from nextdir.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
register short u,piece;
|
register short u,piece;
|
||||||
register struct sqdata *p;
|
register struct sqdata *p;
|
||||||
|
|
||||||
piece = board[sq];
|
piece = board[sq];
|
||||||
p = posdata[side][piece][sq];
|
p = posdata[side][piece][sq];
|
||||||
if (piece == pawn) {
|
if (piece == pawn) {
|
||||||
@ -339,7 +339,7 @@ GenMoves(ply,sq,side,xside)
|
|||||||
}
|
}
|
||||||
u = p[u].nextpos;
|
u = p[u].nextpos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u = p[sq].nextpos;
|
u = p[sq].nextpos;
|
||||||
while (u != sq) {
|
while (u != sq) {
|
||||||
@ -352,6 +352,6 @@ GenMoves(ply,sq,side,xside)
|
|||||||
u = p[u].nextdir;
|
u = p[u].nextdir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -11,7 +11,7 @@ extern short taxidata[64][64];
|
|||||||
|
|
||||||
extern void Initialize_dist();
|
extern void Initialize_dist();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (NEWMOVE >= 2)
|
#if (NEWMOVE >= 2)
|
||||||
struct sqdata {
|
struct sqdata {
|
||||||
short nextpos;
|
short nextpos;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess
|
UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess
|
||||||
|
|
||||||
Revision: 4-25-88
|
Revision: 4-25-88
|
||||||
|
|
||||||
Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
|
Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
|
||||||
Copyright (c) 1988 John Stanback
|
Copyright (c) 1988 John Stanback
|
||||||
|
|
||||||
@ -90,12 +90,12 @@ TerminateSearch()
|
|||||||
InputCommand()
|
InputCommand()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Process the users command. If easy mode is OFF (the computer is
|
Process the users command. If easy mode is OFF (the computer is
|
||||||
thinking on opponents time) and the program is out of book, then make
|
thinking on opponents time) and the program is out of book, then make
|
||||||
the 'hint' move on the board and call SelectMove() to find a response.
|
the 'hint' move on the board and call SelectMove() to find a response.
|
||||||
The user terminates the search by entering ^C (quit siqnal) before
|
The user terminates the search by entering ^C (quit siqnal) before
|
||||||
entering a command. If the opponent does not make the hint move, then
|
entering a command. If the opponent does not make the hint move, then
|
||||||
set Sdepth to zero.
|
set Sdepth to zero.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -124,7 +124,7 @@ char s[80];
|
|||||||
ft = time((long *)0) - time0;
|
ft = time((long *)0) - time0;
|
||||||
epsquare = tmp;
|
epsquare = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MSDOS
|
#ifndef MSDOS
|
||||||
#endif
|
#endif
|
||||||
while (!(ok || quit))
|
while (!(ok || quit))
|
||||||
@ -139,7 +139,7 @@ char s[80];
|
|||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
ft = 0;
|
ft = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(s,"bd") == 0)
|
if (strcmp(s,"bd") == 0)
|
||||||
{
|
{
|
||||||
ClrScreen();
|
ClrScreen();
|
||||||
@ -183,7 +183,7 @@ char s[80];
|
|||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
ok = true;
|
ok = true;
|
||||||
}
|
}
|
||||||
if (strcmp(s,"white") == 0)
|
if (strcmp(s,"white") == 0)
|
||||||
{
|
{
|
||||||
computer = white; opponent = black;
|
computer = white; opponent = black;
|
||||||
ok = true; force = false;
|
ok = true; force = false;
|
||||||
@ -196,7 +196,7 @@ char s[80];
|
|||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
}
|
}
|
||||||
if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo();
|
if (strcmp(s,"undo") == 0 && GameCnt >= 0) Undo();
|
||||||
if (strcmp(s,"remove") == 0 && GameCnt >= 1)
|
if (strcmp(s,"remove") == 0 && GameCnt >= 1)
|
||||||
{
|
{
|
||||||
Undo(); Undo();
|
Undo(); Undo();
|
||||||
}
|
}
|
||||||
@ -221,7 +221,7 @@ char s[80];
|
|||||||
printz("cnt= %ld rate= %ld\n",cnt,rate);
|
printz("cnt= %ld rate= %ld\n",cnt,rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ElapsedTime(1);
|
ElapsedTime(1);
|
||||||
if (force)
|
if (force)
|
||||||
{
|
{
|
||||||
@ -272,7 +272,7 @@ help()
|
|||||||
printz("Easy mode: ");
|
printz("Easy mode: ");
|
||||||
if (easy) printz("ON\n"); else printz("OFF\n");
|
if (easy) printz("ON\n"); else printz("OFF\n");
|
||||||
printz("Depth: %d\n",MaxSearchDepth);
|
printz("Depth: %d\n",MaxSearchDepth);
|
||||||
printz("Random: ");
|
printz("Random: ");
|
||||||
if (dither) printz("ON\n"); else printz("OFF\n");
|
if (dither) printz("ON\n"); else printz("OFF\n");
|
||||||
printz("Transposition table: ");
|
printz("Transposition table: ");
|
||||||
if (hashflag) printz("ON\n"); else printz("OFF\n");
|
if (hashflag) printz("ON\n"); else printz("OFF\n");
|
||||||
@ -282,10 +282,10 @@ help()
|
|||||||
|
|
||||||
EditBoard()
|
EditBoard()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set up a board position. Pieces are entered by typing the piece
|
Set up a board position. Pieces are entered by typing the piece
|
||||||
followed by the location. For example, Nf3 will place a knight on
|
followed by the location. For example, Nf3 will place a knight on
|
||||||
square f3.
|
square f3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -297,7 +297,7 @@ char s[80];
|
|||||||
printz(". exit to main\n");
|
printz(". exit to main\n");
|
||||||
printz("# clear board\n");
|
printz("# clear board\n");
|
||||||
printz("enter piece & location: \n");
|
printz("enter piece & location: \n");
|
||||||
|
|
||||||
a = white;
|
a = white;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -399,12 +399,12 @@ OutputMove()
|
|||||||
NodeCnt,EvalNodes,HashCnt,evrate);
|
NodeCnt,EvalNodes,HashCnt,evrate);
|
||||||
printz("CPU= %.2ld:%.2ld.%.2ld\n\n",
|
printz("CPU= %.2ld:%.2ld.%.2ld\n\n",
|
||||||
cputimer/6000,(cputimer % 6000)/100,cputimer % 100);
|
cputimer/6000,(cputimer % 6000)/100,cputimer % 100);
|
||||||
|
|
||||||
if (root->flags & epmask) UpdateDisplay(0,0,1,0);
|
if (root->flags & epmask) UpdateDisplay(0,0,1,0);
|
||||||
else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask);
|
else UpdateDisplay(root->f,root->t,0,root->flags & cstlmask);
|
||||||
printz("My move is: %s\n\n",mvstr1);
|
printz("My move is: %s\n\n",mvstr1);
|
||||||
if (beep) printz("%c",7);
|
if (beep) printz("%c",7);
|
||||||
|
|
||||||
if (root->flags & draw) printz("Draw game!\n");
|
if (root->flags & draw) printz("Draw game!\n");
|
||||||
else if (root->score == -9999) printz("opponent mates!\n");
|
else if (root->score == -9999) printz("opponent mates!\n");
|
||||||
else if (root->score == 9998) printz("computer mates!\n");
|
else if (root->score == 9998) printz("computer mates!\n");
|
||||||
@ -417,10 +417,10 @@ OutputMove()
|
|||||||
ElapsedTime(iop)
|
ElapsedTime(iop)
|
||||||
short iop;
|
short iop;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Determine the time that has passed since the search was started. If
|
Determine the time that has passed since the search was started. If
|
||||||
the elapsed time exceeds the target (ResponseTime+ExtraTime) then set
|
the elapsed time exceeds the target (ResponseTime+ExtraTime) then set
|
||||||
timeout to true which will terminate the search.
|
timeout to true which will terminate the search.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -508,12 +508,12 @@ short r,c,l;
|
|||||||
GetOpenings()
|
GetOpenings()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read in the Opening Book file and parse the algebraic notation for a
|
Read in the Opening Book file and parse the algebraic notation for a
|
||||||
move into an unsigned integer format indicating the from and to
|
move into an unsigned integer format indicating the from and to
|
||||||
square. Create a linked list of opening lines of play, with
|
square. Create a linked list of opening lines of play, with
|
||||||
entry->next pointing to the next line and entry->move pointing to a
|
entry->next pointing to the next line and entry->move pointing to a
|
||||||
chunk of memory containing the moves. More Opening lines of up to 256
|
chunk of memory containing the moves. More Opening lines of up to 256
|
||||||
half moves may be added to gnuchess.book.
|
half moves may be added to gnuchess.book.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -542,7 +542,7 @@ unsigned short mv,*mp,tmp[100];
|
|||||||
mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short));
|
mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short));
|
||||||
entry->mv = mp;
|
entry->mv = mp;
|
||||||
entry->next = Book;
|
entry->next = Book;
|
||||||
Book = entry;
|
Book = entry;
|
||||||
for (j = 1; j <= i; j++) *(mp++) = tmp[j];
|
for (j = 1; j <= i; j++) *(mp++) = tmp[j];
|
||||||
*mp = 0;
|
*mp = 0;
|
||||||
i = 0; side = white;
|
i = 0; side = white;
|
||||||
@ -640,7 +640,7 @@ short sq,i,c;
|
|||||||
|
|
||||||
printz("Enter file name: ");
|
printz("Enter file name: ");
|
||||||
scanz("%s",fname);
|
scanz("%s",fname);
|
||||||
|
|
||||||
if (fname[0] == '\0' || access(fname,W_OK) == -1) strcpy(fname,"chess.000");
|
if (fname[0] == '\0' || access(fname,W_OK) == -1) strcpy(fname,"chess.000");
|
||||||
fd = fopen(fname,"w");
|
fd = fopen(fname,"w");
|
||||||
fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50);
|
fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50);
|
||||||
@ -687,7 +687,7 @@ short i,f,t;
|
|||||||
}
|
}
|
||||||
fprintf(fd,"\n\n");
|
fprintf(fd,"\n\n");
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Undo()
|
Undo()
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
/*
|
/*
|
||||||
ALPHA interface for CHESS
|
ALPHA interface for CHESS
|
||||||
|
|
||||||
Revision: 4-25-88
|
Revision: 4-25-88
|
||||||
|
|
||||||
Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
|
Copyright (C) 1986, 1987, 1988 Free Software Foundation, Inc.
|
||||||
Copyright (c) 1988 John Stanback
|
Copyright (c) 1988 John Stanback
|
||||||
|
|
||||||
@ -88,12 +88,12 @@ TerminateSearch()
|
|||||||
InputCommand()
|
InputCommand()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Process the users command. If easy mode is OFF (the computer is
|
Process the users command. If easy mode is OFF (the computer is
|
||||||
thinking on opponents time) and the program is out of book, then make
|
thinking on opponents time) and the program is out of book, then make
|
||||||
the 'hint' move on the board and call SelectMove() to find a response.
|
the 'hint' move on the board and call SelectMove() to find a response.
|
||||||
The user terminates the search by entering ^C (quit siqnal) before
|
The user terminates the search by entering ^C (quit siqnal) before
|
||||||
entering a command. If the opponent does not make the hint move, then
|
entering a command. If the opponent does not make the hint move, then
|
||||||
set Sdepth to zero.
|
set Sdepth to zero.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -123,7 +123,7 @@ char s[80];
|
|||||||
ft = time((time_t *)0) - time0;
|
ft = time((time_t *)0) - time0;
|
||||||
epsquare = tmp;
|
epsquare = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
signal(SIGINT,Die); signal(SIGQUIT,Die);
|
signal(SIGINT,Die); signal(SIGQUIT,Die);
|
||||||
while (!(ok || quit))
|
while (!(ok || quit))
|
||||||
{
|
{
|
||||||
@ -136,7 +136,7 @@ char s[80];
|
|||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
ft = 0;
|
ft = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(s,"bd") == 0)
|
if (strcmp(s,"bd") == 0)
|
||||||
{
|
{
|
||||||
ClrScreen();
|
ClrScreen();
|
||||||
@ -179,7 +179,7 @@ char s[80];
|
|||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
ok = true;
|
ok = true;
|
||||||
}
|
}
|
||||||
if (strcmp(s,"white") == 0)
|
if (strcmp(s,"white") == 0)
|
||||||
{
|
{
|
||||||
computer = white; opponent = black;
|
computer = white; opponent = black;
|
||||||
ok = true; force = false;
|
ok = true; force = false;
|
||||||
@ -191,7 +191,7 @@ char s[80];
|
|||||||
ok = true; force = false;
|
ok = true; force = false;
|
||||||
Sdepth = 0;
|
Sdepth = 0;
|
||||||
}
|
}
|
||||||
if (strcmp(s,"remove") == 0 && GameCnt >= 1)
|
if (strcmp(s,"remove") == 0 && GameCnt >= 1)
|
||||||
{
|
{
|
||||||
Undo(); Undo();
|
Undo(); Undo();
|
||||||
}
|
}
|
||||||
@ -220,7 +220,7 @@ char s[80];
|
|||||||
if (strcmp(s,"p") == 0) ShowPostnValues();
|
if (strcmp(s,"p") == 0) ShowPostnValues();
|
||||||
if (strcmp(s,"debug") == 0) DoDebug();
|
if (strcmp(s,"debug") == 0) DoDebug();
|
||||||
}
|
}
|
||||||
|
|
||||||
ClearMessage();
|
ClearMessage();
|
||||||
ElapsedTime(1);
|
ElapsedTime(1);
|
||||||
if (force)
|
if (force)
|
||||||
@ -234,10 +234,10 @@ char s[80];
|
|||||||
|
|
||||||
EditBoard()
|
EditBoard()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set up a board position. Pieces are entered by typing the piece
|
Set up a board position. Pieces are entered by typing the piece
|
||||||
followed by the location. For example, Nf3 will place a knight on
|
followed by the location. For example, Nf3 will place a knight on
|
||||||
square f3.
|
square f3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -322,7 +322,7 @@ help()
|
|||||||
gotoXY(10,24); printz("Easy mode: ");
|
gotoXY(10,24); printz("Easy mode: ");
|
||||||
if (easy) printz("ON"); else printz("OFF");
|
if (easy) printz("ON"); else printz("OFF");
|
||||||
gotoXY(40,21); printz("Depth: %d",MaxSearchDepth);
|
gotoXY(40,21); printz("Depth: %d",MaxSearchDepth);
|
||||||
gotoXY(40,22); printz("Random: ");
|
gotoXY(40,22); printz("Random: ");
|
||||||
if (dither) printz("ON"); else printz("OFF");
|
if (dither) printz("ON"); else printz("OFF");
|
||||||
gotoXY(40,23); printz("Transposition table: ");
|
gotoXY(40,23); printz("Transposition table: ");
|
||||||
if (hashflag) printz("ON"); else printz("OFF");
|
if (hashflag) printz("ON"); else printz("OFF");
|
||||||
@ -390,7 +390,7 @@ OutputMove()
|
|||||||
gotoXY(50,17); printz("My move is: %s",mvstr1);
|
gotoXY(50,17); printz("My move is: %s",mvstr1);
|
||||||
if (beep) putchar(7);
|
if (beep) putchar(7);
|
||||||
ClrEoln();
|
ClrEoln();
|
||||||
|
|
||||||
gotoXY(50,24);
|
gotoXY(50,24);
|
||||||
if (root->flags & draw) printz("Draw game!");
|
if (root->flags & draw) printz("Draw game!");
|
||||||
else if (root->score == -9999) printz("opponent mates!");
|
else if (root->score == -9999) printz("opponent mates!");
|
||||||
@ -398,7 +398,7 @@ OutputMove()
|
|||||||
else if (root->score < -9000) printz("opponent will soon mate!");
|
else if (root->score < -9000) printz("opponent will soon mate!");
|
||||||
else if (root->score > 9000) printz("computer will soon mate!");
|
else if (root->score > 9000) printz("computer will soon mate!");
|
||||||
ClrEoln();
|
ClrEoln();
|
||||||
|
|
||||||
if (post)
|
if (post)
|
||||||
{
|
{
|
||||||
gotoXY(50,22); printz("Nodes= %6ld",NodeCnt); ClrEoln();
|
gotoXY(50,22); printz("Nodes= %6ld",NodeCnt); ClrEoln();
|
||||||
@ -409,10 +409,10 @@ OutputMove()
|
|||||||
|
|
||||||
ElapsedTime(iop)
|
ElapsedTime(iop)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Determine the time that has passed since the search was started. If
|
Determine the time that has passed since the search was started. If
|
||||||
the elapsed time exceeds the target (ResponseTime+ExtraTime) then set
|
the elapsed time exceeds the target (ResponseTime+ExtraTime) then set
|
||||||
timeout to true which will terminate the search.
|
timeout to true which will terminate the search.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
short iop;
|
short iop;
|
||||||
@ -515,7 +515,7 @@ short r,c; char x;
|
|||||||
UpdateDisplay(f,t,flag,iscastle)
|
UpdateDisplay(f,t,flag,iscastle)
|
||||||
short f,t,flag,iscastle;
|
short f,t,flag,iscastle;
|
||||||
{
|
{
|
||||||
short i,l,z;
|
short i,l,z;
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
gotoXY(56,2); printz("CHESS");
|
gotoXY(56,2); printz("CHESS");
|
||||||
@ -557,12 +557,12 @@ short i,l,z;
|
|||||||
GetOpenings()
|
GetOpenings()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read in the Opening Book file and parse the algebraic notation for a
|
Read in the Opening Book file and parse the algebraic notation for a
|
||||||
move into an unsigned integer format indicating the from and to
|
move into an unsigned integer format indicating the from and to
|
||||||
square. Create a linked list of opening lines of play, with
|
square. Create a linked list of opening lines of play, with
|
||||||
entry->next pointing to the next line and entry->move pointing to a
|
entry->next pointing to the next line and entry->move pointing to a
|
||||||
chunk of memory containing the moves. More Opening lines of up to 256
|
chunk of memory containing the moves. More Opening lines of up to 256
|
||||||
half moves may be added to gnuchess.book.
|
half moves may be added to gnuchess.book.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -587,7 +587,7 @@ unsigned short mv,*mp,tmp[100];
|
|||||||
mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short));
|
mp = (unsigned short *)malloc((i+1)*sizeof(unsigned short));
|
||||||
entry->mv = mp;
|
entry->mv = mp;
|
||||||
entry->next = Book;
|
entry->next = Book;
|
||||||
Book = entry;
|
Book = entry;
|
||||||
for (j = 1; j <= i; j++) *(mp++) = tmp[j];
|
for (j = 1; j <= i; j++) *(mp++) = tmp[j];
|
||||||
*mp = 0;
|
*mp = 0;
|
||||||
i = 0; side = white;
|
i = 0; side = white;
|
||||||
@ -690,7 +690,7 @@ short sq,i,c;
|
|||||||
|
|
||||||
ShowMessage("File name: ");
|
ShowMessage("File name: ");
|
||||||
scanz("%s",fname);
|
scanz("%s",fname);
|
||||||
|
|
||||||
if (fname[0] == '\0' || access(fname,W_OK) == -1) strcpy(fname,"chess.000");
|
if (fname[0] == '\0' || access(fname,W_OK) == -1) strcpy(fname,"chess.000");
|
||||||
fd = fopen(fname,"w");
|
fd = fopen(fname,"w");
|
||||||
fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50);
|
fprintf(fd,"%d %d %d\n",computer+1,opponent+1,Game50);
|
||||||
@ -737,7 +737,7 @@ short i,f,t;
|
|||||||
}
|
}
|
||||||
fprintf(fd,"\n\n");
|
fprintf(fd,"\n\n");
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Undo()
|
Undo()
|
||||||
@ -851,7 +851,7 @@ SelectLevel()
|
|||||||
gotoXY(20,11); printz(" 8. 1 move in 15 minutes");
|
gotoXY(20,11); printz(" 8. 1 move in 15 minutes");
|
||||||
gotoXY(20,12); printz(" 9. 1 move in 60 minutes");
|
gotoXY(20,12); printz(" 9. 1 move in 60 minutes");
|
||||||
gotoXY(20,13); printz("10. 1 move in 600 minutes");
|
gotoXY(20,13); printz("10. 1 move in 600 minutes");
|
||||||
|
|
||||||
OperatorTime = 0; TCmoves = 60; TCminutes = 5;
|
OperatorTime = 0; TCmoves = 60; TCminutes = 5;
|
||||||
|
|
||||||
gotoXY(20,17); printz("Enter Level: ");
|
gotoXY(20,17); printz("Enter Level: ");
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#warning "this file includes <values.h> which is obsoleted, use <limits.h> or <float.h> instead"
|
#warning "this file includes <values.h> which is obsoleted, use <limits.h> or <float.h> instead"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#define DMAXEXP ((1 << _DEXPLEN - 1) - 1 + _IEEE)
|
#define DMAXEXP ((1 << _DEXPLEN - 1) - 1 + _IEEE)
|
||||||
#define FMAXEXP ((1 << _FEXPLEN - 1) - 1 + _IEEE)
|
#define FMAXEXP ((1 << _FEXPLEN - 1) - 1 + _IEEE)
|
||||||
|
|
||||||
#elif defined(sony)
|
#elif defined(sony)
|
||||||
#define MAXDOUBLE 1.79769313486231470e+308
|
#define MAXDOUBLE 1.79769313486231470e+308
|
||||||
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
||||||
#define MINDOUBLE 2.2250738585072010e-308
|
#define MINDOUBLE 2.2250738585072010e-308
|
||||||
@ -150,7 +150,7 @@ extern float _maxfloat, _minfloat;
|
|||||||
|
|
||||||
/* #elif defined(vax) */
|
/* #elif defined(vax) */
|
||||||
/* use vax versions by default -- they seem to be the most conservative */
|
/* use vax versions by default -- they seem to be the most conservative */
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define MAXDOUBLE 1.701411834604692293e+38
|
#define MAXDOUBLE 1.701411834604692293e+38
|
||||||
#define MINDOUBLE (2.938735877055718770e-39)
|
#define MINDOUBLE (2.938735877055718770e-39)
|
||||||
|
@ -79,7 +79,7 @@ int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, in
|
|||||||
/* center dialog box on screen */
|
/* center dialog box on screen */
|
||||||
x = (COLS - width)/2;
|
x = (COLS - width)/2;
|
||||||
y = (LINES - height)/2;
|
y = (LINES - height)/2;
|
||||||
|
|
||||||
#ifdef HAVE_NCURSES
|
#ifdef HAVE_NCURSES
|
||||||
if (use_shadow)
|
if (use_shadow)
|
||||||
draw_shadow(stdscr, y, x, height, width);
|
draw_shadow(stdscr, y, x, height, width);
|
||||||
@ -156,7 +156,7 @@ int dialog_checklist(unsigned char *title, unsigned char *prompt, int height, in
|
|||||||
if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*3][0]))
|
if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*3][0]))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
||||||
key == KEY_UP || key == KEY_DOWN || key == ' ' ||
|
key == KEY_UP || key == KEY_DOWN || key == ' ' ||
|
||||||
key == '+' || key == '-' ) {
|
key == '+' || key == '-' ) {
|
||||||
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attribute names
|
* Attribute names
|
||||||
*/
|
*/
|
||||||
#define screen_attr attributes[0]
|
#define screen_attr attributes[0]
|
||||||
@ -115,5 +115,5 @@ void use_helpfile(char *helpfile);
|
|||||||
void use_helpline(char *helpline);
|
void use_helpline(char *helpline);
|
||||||
char *get_helpline(void);
|
char *get_helpline(void);
|
||||||
void restore_helpline(char *helpline);
|
void restore_helpline(char *helpline);
|
||||||
void dialog_gauge(char *title, char *prompt, int y, int x,
|
void dialog_gauge(char *title, char *prompt, int y, int x,
|
||||||
int height, int width, int perc);
|
int height, int width, int perc);
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
#ifndef ctrl
|
#ifndef ctrl
|
||||||
#define ctrl(a) ((a) - 'a' + 1)
|
#define ctrl(a) ((a) - 'a' + 1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HAVE_NCURSES
|
#ifndef HAVE_NCURSES
|
||||||
#ifndef ACS_ULCORNER
|
#ifndef ACS_ULCORNER
|
||||||
@ -101,7 +101,7 @@ bool use_shadow = USE_SHADOW;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Attribute values, default is for mono display
|
* Attribute values, default is for mono display
|
||||||
*/
|
*/
|
||||||
chtype attributes[] = {
|
chtype attributes[] = {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Program: dir.c
|
* Program: dir.c
|
||||||
* Author: Marc van Kempen
|
* Author: Marc van Kempen
|
||||||
* desc: Directory routines, sorting and reading
|
* desc: Directory routines, sorting and reading
|
||||||
*
|
*
|
||||||
* Copyright (c) 1995, Marc van Kempen
|
* Copyright (c) 1995, Marc van Kempen
|
||||||
*
|
*
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -71,7 +71,7 @@ static int _showdotfiles = TRUE;
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_select_nd(
|
dir_select_nd(
|
||||||
#if defined __linux__
|
#if defined __linux__
|
||||||
const struct dirent *d
|
const struct dirent *d
|
||||||
@ -79,8 +79,8 @@ dir_select_nd(
|
|||||||
struct dirent *d
|
struct dirent *d
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
* desc: allways include a directory entry <d>, except
|
* desc: allways include a directory entry <d>, except
|
||||||
* for the current directory and other dot-files
|
* for the current directory and other dot-files
|
||||||
* keep '..' however.
|
* keep '..' however.
|
||||||
* pre: <d> points to a dirent
|
* pre: <d> points to a dirent
|
||||||
@ -90,13 +90,13 @@ dir_select_nd(
|
|||||||
if (strcmp(d->d_name, ".")==0 ||
|
if (strcmp(d->d_name, ".")==0 ||
|
||||||
(d->d_name[0] == '.' && strlen(d->d_name) > 1 && d->d_name[1] != '.')) {
|
(d->d_name[0] == '.' && strlen(d->d_name) > 1 && d->d_name[1] != '.')) {
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
} else {
|
} else {
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
}/* dir_select_nd() */
|
}/* dir_select_nd() */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_select(
|
dir_select(
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const struct dirent *d
|
const struct dirent *d
|
||||||
@ -104,8 +104,8 @@ dir_select(
|
|||||||
struct dirent *d
|
struct dirent *d
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
* desc: allways include a directory entry <d>, except
|
* desc: allways include a directory entry <d>, except
|
||||||
* for the current directory
|
* for the current directory
|
||||||
* pre: <d> points to a dirent
|
* pre: <d> points to a dirent
|
||||||
* post: returns TRUE if d->d_name != "." else FALSE
|
* post: returns TRUE if d->d_name != "." else FALSE
|
||||||
@ -118,16 +118,16 @@ dir_select(
|
|||||||
}
|
}
|
||||||
} /* dir_select() */
|
} /* dir_select() */
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_select_root_nd(
|
dir_select_root_nd(
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const struct dirent *d
|
const struct dirent *d
|
||||||
#else
|
#else
|
||||||
struct dirent *d
|
struct dirent *d
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
* desc: allways include a directory entry <d>, except
|
* desc: allways include a directory entry <d>, except
|
||||||
* for the current directory and the parent directory.
|
* for the current directory and the parent directory.
|
||||||
* Also skip any other dot-files.
|
* Also skip any other dot-files.
|
||||||
* pre: <d> points to a dirent
|
* pre: <d> points to a dirent
|
||||||
@ -142,22 +142,22 @@ dir_select_root_nd(
|
|||||||
} /* dir_select_root_nd() */
|
} /* dir_select_root_nd() */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_select_root(
|
dir_select_root(
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const struct dirent *d
|
const struct dirent *d
|
||||||
#else
|
#else
|
||||||
struct dirent *d
|
struct dirent *d
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
* desc: allways include a directory entry <d>, except
|
* desc: allways include a directory entry <d>, except
|
||||||
* for the current directory and the parent directory
|
* for the current directory and the parent directory
|
||||||
* pre: <d> points to a dirent
|
* pre: <d> points to a dirent
|
||||||
* post: returns TRUE if d->d_name[0] != "." else FALSE
|
* post: returns TRUE if d->d_name[0] != "." else FALSE
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
|
if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
} else {
|
} else {
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
@ -185,7 +185,7 @@ dir_alphasort(const void *d1, const void *d2)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
DirList *f1 = ((DirList *) d1),
|
DirList *f1 = ((DirList *) d1),
|
||||||
*f2 = ((DirList *) d2);
|
*f2 = ((DirList *) d2);
|
||||||
struct stat *s1 = &(f1->filestatus);
|
struct stat *s1 = &(f1->filestatus);
|
||||||
struct stat *s2 = &(f2->filestatus);
|
struct stat *s2 = &(f2->filestatus);
|
||||||
@ -197,7 +197,7 @@ dir_alphasort(const void *d1, const void *d2)
|
|||||||
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* put directories first */
|
/* put directories first */
|
||||||
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
||||||
return(strcmp(f1->filename, f2->filename));
|
return(strcmp(f1->filename, f2->filename));
|
||||||
@ -212,7 +212,7 @@ dir_alphasort(const void *d1, const void *d2)
|
|||||||
|
|
||||||
} /* dir_alphasort() */
|
} /* dir_alphasort() */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_sizesort(const void *d1, const void *d2)
|
dir_sizesort(const void *d1, const void *d2)
|
||||||
/*
|
/*
|
||||||
@ -220,7 +220,7 @@ dir_sizesort(const void *d1, const void *d2)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
DirList *f1 = ((DirList *) d1),
|
DirList *f1 = ((DirList *) d1),
|
||||||
*f2 = ((DirList *) d2);
|
*f2 = ((DirList *) d2);
|
||||||
struct stat *s1 = &(f1->filestatus);
|
struct stat *s1 = &(f1->filestatus);
|
||||||
struct stat *s2 = &(f2->filestatus);
|
struct stat *s2 = &(f2->filestatus);
|
||||||
@ -232,12 +232,12 @@ dir_sizesort(const void *d1, const void *d2)
|
|||||||
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* put directories first */
|
/* put directories first */
|
||||||
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
||||||
return(s1->st_size < s2->st_size ?
|
return(s1->st_size < s2->st_size ?
|
||||||
-1
|
-1
|
||||||
:
|
:
|
||||||
s1->st_size >= s2->st_size);
|
s1->st_size >= s2->st_size);
|
||||||
};
|
};
|
||||||
if (s1->st_mode & S_IFDIR) {
|
if (s1->st_mode & S_IFDIR) {
|
||||||
@ -246,11 +246,11 @@ dir_sizesort(const void *d1, const void *d2)
|
|||||||
if (s2->st_mode & S_IFDIR) {
|
if (s2->st_mode & S_IFDIR) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
return(s1->st_size < s2->st_size ?
|
return(s1->st_size < s2->st_size ?
|
||||||
-1
|
-1
|
||||||
:
|
:
|
||||||
s1->st_size >= s2->st_size);
|
s1->st_size >= s2->st_size);
|
||||||
|
|
||||||
} /* dir_sizesort() */
|
} /* dir_sizesort() */
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -259,11 +259,11 @@ dir_datesort(const void *d1, const void *d2)
|
|||||||
* desc: compare d1 and d2 on date, but put directories always first
|
* desc: compare d1 and d2 on date, but put directories always first
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
DirList *f1 = ((DirList *) d1),
|
DirList *f1 = ((DirList *) d1),
|
||||||
*f2 = ((DirList *) d2);
|
*f2 = ((DirList *) d2);
|
||||||
struct stat *s1 = &(f1->filestatus);
|
struct stat *s1 = &(f1->filestatus);
|
||||||
struct stat *s2 = &(f2->filestatus);
|
struct stat *s2 = &(f2->filestatus);
|
||||||
|
|
||||||
|
|
||||||
/* check for '..' */
|
/* check for '..' */
|
||||||
if (strcmp(((DirList *) d1)->filename, "..") == 0) {
|
if (strcmp(((DirList *) d1)->filename, "..") == 0) {
|
||||||
@ -272,12 +272,12 @@ dir_datesort(const void *d1, const void *d2)
|
|||||||
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* put directories first */
|
/* put directories first */
|
||||||
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
||||||
return(s1->st_mtime < s2->st_mtime ?
|
return(s1->st_mtime < s2->st_mtime ?
|
||||||
-1
|
-1
|
||||||
:
|
:
|
||||||
s1->st_mtime >= s2->st_mtime);
|
s1->st_mtime >= s2->st_mtime);
|
||||||
};
|
};
|
||||||
if (s1->st_mode & S_IFDIR) {
|
if (s1->st_mode & S_IFDIR) {
|
||||||
@ -286,13 +286,13 @@ dir_datesort(const void *d1, const void *d2)
|
|||||||
if (s2->st_mode & S_IFDIR) {
|
if (s2->st_mode & S_IFDIR) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
return(s1->st_mtime < s2->st_mtime ?
|
return(s1->st_mtime < s2->st_mtime ?
|
||||||
-1
|
-1
|
||||||
:
|
:
|
||||||
s1->st_mtime >= s2->st_mtime);
|
s1->st_mtime >= s2->st_mtime);
|
||||||
|
|
||||||
} /* dir_datesort() */
|
} /* dir_datesort() */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
null_strcmp(char *s1, char *s2)
|
null_strcmp(char *s1, char *s2)
|
||||||
@ -303,15 +303,15 @@ null_strcmp(char *s1, char *s2)
|
|||||||
if ((s1 == NULL) && (s2 == NULL)) {
|
if ((s1 == NULL) && (s2 == NULL)) {
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if (s1 == NULL) {
|
if (s1 == NULL) {
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
if (s2 == NULL) {
|
if (s2 == NULL) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
return(strcmp(s1, s2));
|
return(strcmp(s1, s2));
|
||||||
} /* null_strcmp() */
|
} /* null_strcmp() */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
dir_extsort(const void *d1, const void *d2)
|
dir_extsort(const void *d1, const void *d2)
|
||||||
@ -322,7 +322,7 @@ dir_extsort(const void *d1, const void *d2)
|
|||||||
* post: see code
|
* post: see code
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
DirList *f1 = ((DirList *) d1),
|
DirList *f1 = ((DirList *) d1),
|
||||||
*f2 = ((DirList *) d2);
|
*f2 = ((DirList *) d2);
|
||||||
struct stat *s1 = &(f1->filestatus);
|
struct stat *s1 = &(f1->filestatus);
|
||||||
struct stat *s2 = &(f2->filestatus);
|
struct stat *s2 = &(f2->filestatus);
|
||||||
@ -337,10 +337,10 @@ dir_extsort(const void *d1, const void *d2)
|
|||||||
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
if (strcmp(((DirList *) d2)->filename, "..") == 0) {
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* find the first extension */
|
/* find the first extension */
|
||||||
|
|
||||||
ext1 = f1->filename + strlen(f1->filename);
|
ext1 = f1->filename + strlen(f1->filename);
|
||||||
extf = FALSE;
|
extf = FALSE;
|
||||||
while (!extf && (ext1 > f1->filename)) {
|
while (!extf && (ext1 > f1->filename)) {
|
||||||
@ -353,21 +353,21 @@ dir_extsort(const void *d1, const void *d2)
|
|||||||
}
|
}
|
||||||
/* ext1 == NULL if there's no "extension" else ext1 points */
|
/* ext1 == NULL if there's no "extension" else ext1 points */
|
||||||
/* to the first character of the extension string */
|
/* to the first character of the extension string */
|
||||||
|
|
||||||
/* find the second extension */
|
/* find the second extension */
|
||||||
|
|
||||||
ext2 = f2->filename + strlen(f2->filename);
|
ext2 = f2->filename + strlen(f2->filename);
|
||||||
extf = FALSE;
|
extf = FALSE;
|
||||||
while (!extf && (ext2 > f2->filename)) {
|
while (!extf && (ext2 > f2->filename)) {
|
||||||
extf = (*--ext2 == '.');
|
extf = (*--ext2 == '.');
|
||||||
}
|
}
|
||||||
if (!extf) {
|
if (!extf) {
|
||||||
ext2 = NULL;
|
ext2 = NULL;
|
||||||
} else {
|
} else {
|
||||||
ext2++;
|
ext2++;
|
||||||
}
|
}
|
||||||
/* idem as for ext1 */
|
/* idem as for ext1 */
|
||||||
|
|
||||||
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
if ((s1->st_mode & S_IFDIR) && (s2->st_mode & S_IFDIR)) {
|
||||||
ret = null_strcmp(ext1, ext2);
|
ret = null_strcmp(ext1, ext2);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
@ -431,7 +431,7 @@ get_dir(char *dirname, char *fmask, DirList **dir, int *n)
|
|||||||
/* Solution: */
|
/* Solution: */
|
||||||
/* manually insert the parent directory as the only */
|
/* manually insert the parent directory as the only */
|
||||||
/* directory entry, and return. */
|
/* directory entry, and return. */
|
||||||
|
|
||||||
if (*n == -1) {
|
if (*n == -1) {
|
||||||
*n = 1;
|
*n = 1;
|
||||||
*dir = (DirList *) malloc(sizeof(DirList));
|
*dir = (DirList *) malloc(sizeof(DirList));
|
||||||
@ -440,7 +440,7 @@ get_dir(char *dirname, char *fmask, DirList **dir, int *n)
|
|||||||
(*dir)[0].filestatus = status;
|
(*dir)[0].filestatus = status;
|
||||||
(*dir)[0].link = FALSE;
|
(*dir)[0].link = FALSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dir = (DirList *) malloc( *n * sizeof(DirList) );
|
*dir = (DirList *) malloc( *n * sizeof(DirList) );
|
||||||
d = 0;
|
d = 0;
|
||||||
@ -450,7 +450,7 @@ get_dir(char *dirname, char *fmask, DirList **dir, int *n)
|
|||||||
lstat(dire[j]->d_name, &status);
|
lstat(dire[j]->d_name, &status);
|
||||||
/* check if this file is to be included */
|
/* check if this file is to be included */
|
||||||
/* always include directories, the rest is subject to fmask */
|
/* always include directories, the rest is subject to fmask */
|
||||||
if (S_ISDIR(status.st_mode)
|
if (S_ISDIR(status.st_mode)
|
||||||
|| fnmatch(fmask, dire[j]->d_name, FNM_NOESCAPE) != FNM_NOMATCH) {
|
|| fnmatch(fmask, dire[j]->d_name, FNM_NOESCAPE) != FNM_NOMATCH) {
|
||||||
strcpy((*dir)[i].filename, dire[j]->d_name);
|
strcpy((*dir)[i].filename, dire[j]->d_name);
|
||||||
(*dir)[i].filestatus = status;
|
(*dir)[i].filestatus = status;
|
||||||
@ -478,7 +478,7 @@ get_dir(char *dirname, char *fmask, DirList **dir, int *n)
|
|||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
*n = i;
|
*n = i;
|
||||||
|
|
||||||
/* sort the directory with the directory names on top */
|
/* sort the directory with the directory names on top */
|
||||||
qsort((*dir), *n, sizeof(DirList), _sort_func);
|
qsort((*dir), *n, sizeof(DirList), _sort_func);
|
||||||
|
|
||||||
@ -490,13 +490,13 @@ get_dir(char *dirname, char *fmask, DirList **dir, int *n)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}/* get_dir() */
|
}/* get_dir() */
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FreeDir(DirList *d, int n)
|
FreeDir(DirList *d, int n)
|
||||||
/*
|
/*
|
||||||
* desc: free the dirlist d
|
* desc: free the dirlist d
|
||||||
* pre: d != NULL
|
* pre: d != NULL
|
||||||
* post: memory allocated to d has been released
|
* post: memory allocated to d has been released
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* include file for dir.c
|
* include file for dir.c
|
||||||
*
|
*
|
||||||
* Copyright (c) 1995, Marc van Kempen
|
* Copyright (c) 1995, Marc van Kempen
|
||||||
*
|
*
|
||||||
@ -12,7 +12,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -25,7 +25,7 @@ typedef struct DirList { /* structure to hold the directory entries
|
|||||||
int link; /* is it a link ? */
|
int link; /* is it a link ? */
|
||||||
char *linkname; /* the name of the file the link points to */
|
char *linkname; /* the name of the file the link points to */
|
||||||
} DirList;
|
} DirList;
|
||||||
|
|
||||||
#ifndef TRUE
|
#ifndef TRUE
|
||||||
#define TRUE (1)
|
#define TRUE (1)
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* program: fselect.c
|
* program: fselect.c
|
||||||
* author: Marc van Kempen (wmbfmk@urc.tue.nl)
|
* author: Marc van Kempen (wmbfmk@urc.tue.nl)
|
||||||
* Desc: File selection routine
|
* Desc: File selection routine
|
||||||
*
|
*
|
||||||
* Copyright (c) 1995, Marc van Kempen
|
* Copyright (c) 1995, Marc van Kempen
|
||||||
*
|
*
|
||||||
@ -14,7 +14,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
char *dialog_dfselect(char *dir, char *fmask, int is_fselect);
|
char *dialog_dfselect(char *dir, char *fmask, int is_fselect);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions
|
* Functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ get_directories(DirList *d, int n, char ***names, int *nd)
|
|||||||
void
|
void
|
||||||
get_filenames(DirList *d, int n, char ***names, int *nf)
|
get_filenames(DirList *d, int n, char ***names, int *nf)
|
||||||
/*
|
/*
|
||||||
* Desc: return the filenames in <dir> as an arry in
|
* Desc: return the filenames in <dir> as an arry in
|
||||||
* <names>, the # of entries in <nf>, memory allocated
|
* <names>, the # of entries in <nf>, memory allocated
|
||||||
* to *names should be freed when done.
|
* to *names should be freed when done.
|
||||||
*/
|
*/
|
||||||
@ -78,7 +78,7 @@ get_filenames(DirList *d, int n, char ***names, int *nf)
|
|||||||
(*names)[i] = (char *) malloc( strlen(d[i+nd].filename) + 1);
|
(*names)[i] = (char *) malloc( strlen(d[i+nd].filename) + 1);
|
||||||
strcpy((*names)[i], d[i+nd].filename);
|
strcpy((*names)[i], d[i+nd].filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} /* get_filenames() */
|
} /* get_filenames() */
|
||||||
|
|
||||||
@ -102,8 +102,8 @@ FreeNames(char **names, int n)
|
|||||||
int
|
int
|
||||||
dialog_dselect_old(void)
|
dialog_dselect_old(void)
|
||||||
/*
|
/*
|
||||||
* Desc: starting from the current directory,
|
* Desc: starting from the current directory,
|
||||||
* choose a new current directory
|
* choose a new current directory
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
DirList *d = NULL;
|
DirList *d = NULL;
|
||||||
@ -114,12 +114,12 @@ dialog_dselect_old(void)
|
|||||||
StringObj *dir_obj;
|
StringObj *dir_obj;
|
||||||
char o_dir[MAXPATHLEN];
|
char o_dir[MAXPATHLEN];
|
||||||
struct ComposeObj *obj = NULL;
|
struct ComposeObj *obj = NULL;
|
||||||
int n, nd, okbutton, cancelbutton,
|
int n, nd, okbutton, cancelbutton,
|
||||||
quit, cancel, ret;
|
quit, cancel, ret;
|
||||||
|
|
||||||
ds_win = newwin(LINES-8, COLS-30, 4, 15);
|
ds_win = newwin(LINES-8, COLS-30, 4, 15);
|
||||||
if (ds_win == NULL) {
|
if (ds_win == NULL) {
|
||||||
fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n",
|
fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n",
|
||||||
LINES-8, COLS-30, 4, 15);
|
LINES-8, COLS-30, 4, 15);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -137,7 +137,7 @@ dialog_dselect_old(void)
|
|||||||
/* the list of directories */
|
/* the list of directories */
|
||||||
get_dir(".", "*", &d, &n);
|
get_dir(".", "*", &d, &n);
|
||||||
get_directories(d, n, &names, &nd);
|
get_directories(d, n, &names, &nd);
|
||||||
dirs_obj = NewListObj(ds_win, "Directories:", names, o_dir, 5, 2,
|
dirs_obj = NewListObj(ds_win, "Directories:", names, o_dir, 5, 2,
|
||||||
LINES-15, COLS-48, nd);
|
LINES-15, COLS-48, nd);
|
||||||
AddObj(&obj, LISTOBJ, (void *) dirs_obj);
|
AddObj(&obj, LISTOBJ, (void *) dirs_obj);
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ dialog_dselect_old(void)
|
|||||||
okbutton = FALSE;
|
okbutton = FALSE;
|
||||||
okbut = NewButtonObj(ds_win, "Continue", &okbutton, 7, COLS-45);
|
okbut = NewButtonObj(ds_win, "Continue", &okbutton, 7, COLS-45);
|
||||||
AddObj(&obj, BUTTONOBJ, (void *) okbut);
|
AddObj(&obj, BUTTONOBJ, (void *) okbut);
|
||||||
|
|
||||||
/* the Cancel-button */
|
/* the Cancel-button */
|
||||||
cancelbutton = FALSE;
|
cancelbutton = FALSE;
|
||||||
cancelbut = NewButtonObj(ds_win, "Return", &cancelbutton, 11, COLS-44);
|
cancelbut = NewButtonObj(ds_win, "Return", &cancelbutton, 11, COLS-44);
|
||||||
@ -176,7 +176,7 @@ dialog_dselect_old(void)
|
|||||||
strcpy(old_dir, o_dir);
|
strcpy(old_dir, o_dir);
|
||||||
RefreshStringObj(dir_obj);
|
RefreshStringObj(dir_obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
get_dir(".", "*", &d, &n);
|
get_dir(".", "*", &d, &n);
|
||||||
FreeNames(names, nd);
|
FreeNames(names, nd);
|
||||||
get_directories(d, n, &names, &nd);
|
get_directories(d, n, &names, &nd);
|
||||||
@ -194,7 +194,7 @@ dialog_dselect_old(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeNames(names, nd);
|
FreeNames(names, nd);
|
||||||
DelObj(obj);
|
DelObj(obj);
|
||||||
delwin(ds_win);
|
delwin(ds_win);
|
||||||
@ -229,7 +229,7 @@ char *
|
|||||||
dialog_dfselect(char *dir, char *fmask, int is_fselect)
|
dialog_dfselect(char *dir, char *fmask, int is_fselect)
|
||||||
/*
|
/*
|
||||||
* Desc: choose a file from the directory <dir>, which
|
* Desc: choose a file from the directory <dir>, which
|
||||||
* initially display files with the mask <filemask>
|
* initially display files with the mask <filemask>
|
||||||
* pre: <dir> is the initial directory
|
* pre: <dir> is the initial directory
|
||||||
* only files corresponding to the mask <fmask> are displayed
|
* only files corresponding to the mask <fmask> are displayed
|
||||||
* post: returns NULL if no file was selected
|
* post: returns NULL if no file was selected
|
||||||
@ -262,7 +262,7 @@ dialog_dfselect(char *dir, char *fmask, int is_fselect)
|
|||||||
fs_win = newwin(LINES-2, COLS-20, 1, 10);
|
fs_win = newwin(LINES-2, COLS-20, 1, 10);
|
||||||
if (fs_win == NULL) {
|
if (fs_win == NULL) {
|
||||||
endwin();
|
endwin();
|
||||||
fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n",
|
fprintf(stderr, "\nnewwin(%d,%d,%d,%d) failed, maybe wrong dims\n",
|
||||||
LINES-2, COLS-20, 2, 10);
|
LINES-2, COLS-20, 2, 10);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -289,7 +289,7 @@ dialog_dfselect(char *dir, char *fmask, int is_fselect)
|
|||||||
get_dir(".", fmask, &d, &n); /* read the entire directory */
|
get_dir(".", fmask, &d, &n); /* read the entire directory */
|
||||||
get_directories(d, n, &dnames, &nd); /* extract the dir-entries */
|
get_directories(d, n, &dnames, &nd); /* extract the dir-entries */
|
||||||
if (is_fselect) {
|
if (is_fselect) {
|
||||||
dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2,
|
dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2,
|
||||||
LINES-16, (COLS-20)/2-2, nd);
|
LINES-16, (COLS-20)/2-2, nd);
|
||||||
} else {
|
} else {
|
||||||
dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2,
|
dirs_obj = NewListObj(fs_win, "Directories:", dnames, o_dir, 5, 2,
|
||||||
@ -340,7 +340,7 @@ dialog_dfselect(char *dir, char *fmask, int is_fselect)
|
|||||||
switch(ret) {
|
switch(ret) {
|
||||||
case SEL_CR:
|
case SEL_CR:
|
||||||
if (strcmp(old_fmask, o_fm) || strcmp(old_dir, o_dir)) {
|
if (strcmp(old_fmask, o_fm) || strcmp(old_dir, o_dir)) {
|
||||||
/* reread directory and update the listobjects */
|
/* reread directory and update the listobjects */
|
||||||
if (strcmp(old_dir, o_dir)) { /* dir entry was changed */
|
if (strcmp(old_dir, o_dir)) { /* dir entry was changed */
|
||||||
if (chdir(o_dir)) {
|
if (chdir(o_dir)) {
|
||||||
dialog_notify("Could not change into directory");
|
dialog_notify("Could not change into directory");
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
dialog_gauge(char *title, char *prompt, int y, int x,
|
dialog_gauge(char *title, char *prompt, int y, int x,
|
||||||
int height, int width, int perc)
|
int height, int width, int perc)
|
||||||
/*
|
/*
|
||||||
* Desc: display a progress bar, progress indicated by <perc>
|
* Desc: display a progress bar, progress indicated by <perc>
|
||||||
@ -36,7 +36,7 @@ dialog_gauge(char *title, char *prompt, int y, int x,
|
|||||||
height, width, y, x);
|
height, width, y, x);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_box(gw, 0, 0, height, width, dialog_attr, border_attr);
|
draw_box(gw, 0, 0, height, width, dialog_attr, border_attr);
|
||||||
draw_shadow(stdscr, y, x, height, width);
|
draw_shadow(stdscr, y, x, height, width);
|
||||||
|
|
||||||
@ -69,4 +69,4 @@ dialog_gauge(char *title, char *prompt, int y, int x,
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
} /* dialog_gauge() */
|
} /* dialog_gauge() */
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/***************************************************************
|
/***************************************************************
|
||||||
*
|
*
|
||||||
* Program: help.c
|
* Program: help.c
|
||||||
* Author: Marc van Kempen
|
* Author: Marc van Kempen
|
||||||
* Desc: get help
|
* Desc: get help
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -111,7 +111,7 @@ display_helpfile(void)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
} /* display_helpfile() */
|
} /* display_helpfile() */
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
*
|
*
|
||||||
@ -121,7 +121,7 @@ display_helpfile(void)
|
|||||||
|
|
||||||
void
|
void
|
||||||
use_helpline(char *hline)
|
use_helpline(char *hline)
|
||||||
/*
|
/*
|
||||||
* desc: set the helpline to printed in dialogs
|
* desc: set the helpline to printed in dialogs
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@ -177,7 +177,7 @@ get_helpline(void)
|
|||||||
} else {
|
} else {
|
||||||
hlp = NULL;
|
hlp = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(hlp);
|
return(hlp);
|
||||||
} /* get_helpline() */
|
} /* get_helpline() */
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
* 19/12/93 - menu will now scroll if there are more items than can fit
|
* 19/12/93 - menu will now scroll if there are more items than can fit
|
||||||
* on the screen.
|
* on the screen.
|
||||||
* - added 'checklist', a dialog box with a list of options that
|
* - added 'checklist', a dialog box with a list of options that
|
||||||
* can be turned on or off. A list of options that are on is
|
* can be turned on or off. A list of options that are on is
|
||||||
* returned on exit.
|
* returned on exit.
|
||||||
*
|
*
|
||||||
* 20/12/93 - Version 0.15 released.
|
* 20/12/93 - Version 0.15 released.
|
||||||
@ -67,7 +67,7 @@
|
|||||||
* 13/01/94 - some changes for easier porting to other Unix systems (tested
|
* 13/01/94 - some changes for easier porting to other Unix systems (tested
|
||||||
* on Ultrix, SunOS and HPUX)
|
* on Ultrix, SunOS and HPUX)
|
||||||
* - Version 0.3 released.
|
* - Version 0.3 released.
|
||||||
*
|
*
|
||||||
* 08/06/94 - Patches by Stuart Herbert - S.Herbert@shef.ac.uk
|
* 08/06/94 - Patches by Stuart Herbert - S.Herbert@shef.ac.uk
|
||||||
* Fixed attr_clear and the textbox stuff to work with ncurses 1.8.5
|
* Fixed attr_clear and the textbox stuff to work with ncurses 1.8.5
|
||||||
* Fixed the wordwrap routine - it'll actually wrap properly now
|
* Fixed the wordwrap routine - it'll actually wrap properly now
|
||||||
|
@ -71,7 +71,7 @@ int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int wid
|
|||||||
/* center dialog box on screen */
|
/* center dialog box on screen */
|
||||||
x = (COLS - width)/2;
|
x = (COLS - width)/2;
|
||||||
y = (LINES - height)/2;
|
y = (LINES - height)/2;
|
||||||
|
|
||||||
#ifdef HAVE_NCURSES
|
#ifdef HAVE_NCURSES
|
||||||
if (use_shadow)
|
if (use_shadow)
|
||||||
draw_shadow(stdscr, y, x, height, width);
|
draw_shadow(stdscr, y, x, height, width);
|
||||||
@ -149,7 +149,7 @@ int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int wid
|
|||||||
if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*2][0]))
|
if (key < 0x100 && toupper(key) == toupper(items[(scroll+i)*2][0]))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
||||||
key == KEY_UP || key == KEY_DOWN || key == '-' || key == '+') {
|
key == KEY_UP || key == KEY_DOWN || key == '-' || key == '+') {
|
||||||
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
||||||
i = key - '1';
|
i = key - '1';
|
||||||
@ -245,7 +245,7 @@ int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int wid
|
|||||||
*ch = choice;
|
*ch = choice;
|
||||||
if (sc)
|
if (sc)
|
||||||
*sc = scroll;
|
*sc = scroll;
|
||||||
|
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
if (scroll > height-4) { /* can we go up? */
|
if (scroll > height-4) { /* can we go up? */
|
||||||
@ -316,7 +316,7 @@ int dialog_menu(unsigned char *title, unsigned char *prompt, int height, int wid
|
|||||||
}
|
}
|
||||||
if (redraw_menu) {
|
if (redraw_menu) {
|
||||||
for (i = 0; i < max_choice; i++) {
|
for (i = 0; i < max_choice; i++) {
|
||||||
print_item(menu, items[(scroll+i)*2],
|
print_item(menu, items[(scroll+i)*2],
|
||||||
items[(scroll+i)*2 + 1], i, i == choice);
|
items[(scroll+i)*2 + 1], i, i == choice);
|
||||||
}
|
}
|
||||||
wnoutrefresh(menu);
|
wnoutrefresh(menu);
|
||||||
|
@ -226,7 +226,7 @@ dialog_mesgbox(unsigned char *title, unsigned char *prompt, int height, int widt
|
|||||||
display_helpfile();
|
display_helpfile();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
print_page(dialog, theight, width, prompt, startline, hscroll);
|
print_page(dialog, theight, width, prompt, startline, hscroll);
|
||||||
print_perc(dialog, height-3, width-9, (float) (startline+theight)/max_lines);
|
print_perc(dialog, height-3, width-9, (float) (startline+theight)/max_lines);
|
||||||
wmove(dialog, height-2, width/2-2);
|
wmove(dialog, height-2, width/2-2);
|
||||||
wrefresh(dialog);
|
wrefresh(dialog);
|
||||||
@ -284,7 +284,7 @@ getline(unsigned char *buf, int n)
|
|||||||
if (n<0) {
|
if (n<0) {
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
i=0;
|
i=0;
|
||||||
while (*buf && i<n) {
|
while (*buf && i<n) {
|
||||||
if (*buf == '\n' || *buf == '\r') {
|
if (*buf == '\n' || *buf == '\r') {
|
||||||
@ -315,7 +315,7 @@ print_page(WINDOW *win, int height, int width, unsigned char *buf, int startline
|
|||||||
wmove(win, 1+i, 1);
|
wmove(win, 1+i, 1);
|
||||||
for (j=0; j<width-2; j++) waddnstr(win, " ", 1);
|
for (j=0; j<width-2; j++) waddnstr(win, " ", 1);
|
||||||
wmove(win, 1+i, 1);
|
wmove(win, 1+i, 1);
|
||||||
j = 0;
|
j = 0;
|
||||||
/* scroll to the right */
|
/* scroll to the right */
|
||||||
while (*b && (*b != '\n') && (*b != '\r') && (j<hscroll)) {
|
while (*b && (*b != '\n') && (*b != '\r') && (j<hscroll)) {
|
||||||
b++;
|
b++;
|
||||||
@ -336,7 +336,7 @@ print_page(WINDOW *win, int height, int width, unsigned char *buf, int startline
|
|||||||
if (*b) b++; /* skip over '\n', if it exists */
|
if (*b) b++; /* skip over '\n', if it exists */
|
||||||
}
|
}
|
||||||
} /* print_page() */
|
} /* print_page() */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
void
|
void
|
||||||
dialog_notify(char *msg)
|
dialog_notify(char *msg)
|
||||||
/*
|
/*
|
||||||
* Desc: display an error message
|
* Desc: display an error message
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
|
@ -87,7 +87,7 @@ int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, in
|
|||||||
/* center dialog box on screen */
|
/* center dialog box on screen */
|
||||||
x = (COLS - width)/2;
|
x = (COLS - width)/2;
|
||||||
y = (LINES - height)/2;
|
y = (LINES - height)/2;
|
||||||
|
|
||||||
#ifdef HAVE_NCURSES
|
#ifdef HAVE_NCURSES
|
||||||
if (use_shadow)
|
if (use_shadow)
|
||||||
draw_shadow(stdscr, y, x, height, width);
|
draw_shadow(stdscr, y, x, height, width);
|
||||||
@ -164,7 +164,7 @@ int dialog_radiolist(unsigned char *title, unsigned char *prompt, int height, in
|
|||||||
if (toupper(key) == toupper(items[(scroll+i)*3][0]))
|
if (toupper(key) == toupper(items[(scroll+i)*3][0]))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
if (i < max_choice || (key >= '1' && key <= MIN('9', '0'+max_choice)) ||
|
||||||
key == KEY_UP || key == KEY_DOWN || key == ' ' ||
|
key == KEY_UP || key == KEY_DOWN || key == ' ' ||
|
||||||
key == '+' || key == '-' ) {
|
key == '+' || key == '-' ) {
|
||||||
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
if (key >= '1' && key <= MIN('9', '0'+max_choice))
|
||||||
|
@ -53,8 +53,8 @@ static struct pid {
|
|||||||
struct pid *next;
|
struct pid *next;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
} *pidlist;
|
} *pidlist;
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
raw_popen(const char *program, char * const *argv, const char *type)
|
raw_popen(const char *program, char * const *argv, const char *type)
|
||||||
{
|
{
|
||||||
@ -155,6 +155,6 @@ raw_pclose(FILE *iop)
|
|||||||
else
|
else
|
||||||
last->next = cur->next;
|
last->next = cur->next;
|
||||||
free(cur);
|
free(cur);
|
||||||
|
|
||||||
return (pid == -1 ? -1 : pstat.w_status);
|
return (pid == -1 ? -1 : pstat.w_status);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Author: Marc van Kempen
|
* Author: Marc van Kempen
|
||||||
* Desc: Implementation of UI-objects:
|
* Desc: Implementation of UI-objects:
|
||||||
* - String input fields
|
* - String input fields
|
||||||
* - List selection
|
* - List selection
|
||||||
* - Buttons
|
* - Buttons
|
||||||
*
|
*
|
||||||
* Copyright (c) 1995, Marc van Kempen
|
* Copyright (c) 1995, Marc van Kempen
|
||||||
@ -17,7 +17,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -79,14 +79,14 @@ FreeObj(ComposeObj *Obj)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
ComposeObj *o = Obj;
|
ComposeObj *o = Obj;
|
||||||
|
|
||||||
o = Obj;
|
o = Obj;
|
||||||
while (o) {
|
while (o) {
|
||||||
o = Obj->next;
|
o = Obj->next;
|
||||||
free(Obj);
|
free(Obj);
|
||||||
Obj = o;
|
Obj = o;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} /* FreeObj() */
|
} /* FreeObj() */
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ FreeObj(ComposeObj *Obj)
|
|||||||
int
|
int
|
||||||
ReadObj(ComposeObj *Obj)
|
ReadObj(ComposeObj *Obj)
|
||||||
/*
|
/*
|
||||||
* Desc: navigate through the different objects calling their
|
* Desc: navigate through the different objects calling their
|
||||||
* respective navigation routines as necessary
|
* respective navigation routines as necessary
|
||||||
* Pre: Obj != NULL
|
* Pre: Obj != NULL
|
||||||
*/
|
*/
|
||||||
@ -145,7 +145,7 @@ ReadObj(ComposeObj *Obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
|
|
||||||
} /* ReadObj() */
|
} /* ReadObj() */
|
||||||
|
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ DelObj(ComposeObj *Obj)
|
|||||||
|
|
||||||
FreeObj(o);
|
FreeObj(o);
|
||||||
} /* DelObj() */
|
} /* DelObj() */
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* StringObj routines
|
* StringObj routines
|
||||||
@ -265,7 +265,7 @@ NewStringObj(WINDOW *win, char *title, char *s, int y, int x, int w, int len)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
StringObj *so;
|
StringObj *so;
|
||||||
|
|
||||||
/* Initialize a new object */
|
/* Initialize a new object */
|
||||||
so = (StringObj *) malloc( sizeof(StringObj) );
|
so = (StringObj *) malloc( sizeof(StringObj) );
|
||||||
if (!so) {
|
if (!so) {
|
||||||
@ -302,7 +302,7 @@ SelectStringObj(StringObj *so)
|
|||||||
char tmp[so->len+1];
|
char tmp[so->len+1];
|
||||||
|
|
||||||
strcpy(tmp, so->s);
|
strcpy(tmp, so->s);
|
||||||
key = line_edit(so->win, so->y+2, so->x+1,
|
key = line_edit(so->win, so->y+2, so->x+1,
|
||||||
so->len, so->w-2, inputbox_attr, TRUE, tmp);
|
so->len, so->w-2, inputbox_attr, TRUE, tmp);
|
||||||
if ((key == '\n') || (key == '\r') || (key == '\t') || key == (KEY_BTAB) ) {
|
if ((key == '\n') || (key == '\r') || (key == '\t') || key == (KEY_BTAB) ) {
|
||||||
strcpy(so->s, tmp);
|
strcpy(so->s, tmp);
|
||||||
@ -335,7 +335,7 @@ DelStringObj(StringObj *so)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* ListObj routines
|
* ListObj routines
|
||||||
@ -377,7 +377,7 @@ DrawNames(ListObj *lo)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} /* DrawNames() */
|
} /* DrawNames() */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -401,12 +401,12 @@ RefreshListObj(ListObj *lo)
|
|||||||
sprintf(perc, "(%3d%%)", MIN(100, (int) (100 * (lo->sel+lo->h-2) / MAX(1, lo->n))));
|
sprintf(perc, "(%3d%%)", MIN(100, (int) (100 * (lo->sel+lo->h-2) / MAX(1, lo->n))));
|
||||||
wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
|
wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
|
||||||
wattrset(lo->win, dialog_attr);
|
wattrset(lo->win, dialog_attr);
|
||||||
waddstr(lo->win, perc);
|
waddstr(lo->win, perc);
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} /* RefreshListObj() */
|
} /* RefreshListObj() */
|
||||||
|
|
||||||
ListObj *
|
ListObj *
|
||||||
NewListObj(WINDOW *win, char *title, char **list, char *listelt, int y, int x,
|
NewListObj(WINDOW *win, char *title, char **list, char *listelt, int y, int x,
|
||||||
int h, int w, int n)
|
int h, int w, int n)
|
||||||
@ -485,7 +485,7 @@ UpdateListObj(ListObj *lo, char **list, int n)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lo->seld = NULL;
|
lo->seld = NULL;
|
||||||
}
|
}
|
||||||
lo->n = n;
|
lo->n = n;
|
||||||
lo->scroll = 0;
|
lo->scroll = 0;
|
||||||
lo->sel = 0;
|
lo->sel = 0;
|
||||||
@ -521,7 +521,7 @@ SelectListObj(ListObj *lo)
|
|||||||
|
|
||||||
key = wgetch(lo->win);
|
key = wgetch(lo->win);
|
||||||
quit = FALSE;
|
quit = FALSE;
|
||||||
while ((key != '\t') && (key != '\n') && (key != '\r')
|
while ((key != '\t') && (key != '\n') && (key != '\r')
|
||||||
&& (key != ESC) && (key != KEY_F(1)) && (key != '?') && !quit) {
|
&& (key != ESC) && (key != KEY_F(1)) && (key != '?') && !quit) {
|
||||||
/* first draw current item in normal video */
|
/* first draw current item in normal video */
|
||||||
wmove(lo->win, sel_y, sel_x);
|
wmove(lo->win, sel_y, sel_x);
|
||||||
@ -620,11 +620,11 @@ SelectListObj(ListObj *lo)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Draw % indication */
|
/* Draw % indication */
|
||||||
sprintf(perc, "(%3d%%)", MIN(100, (int)
|
sprintf(perc, "(%3d%%)", MIN(100, (int)
|
||||||
(100 * (lo->sel+lo->h - 2) / MAX(1, lo->n))));
|
(100 * (lo->sel+lo->h - 2) / MAX(1, lo->n))));
|
||||||
wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
|
wmove(lo->win, lo->y + lo->h, lo->x + lo->w - 8);
|
||||||
wattrset(lo->win, dialog_attr);
|
wattrset(lo->win, dialog_attr);
|
||||||
waddstr(lo->win, perc);
|
waddstr(lo->win, perc);
|
||||||
|
|
||||||
/* draw current item in inverse */
|
/* draw current item in inverse */
|
||||||
wmove(lo->win, sel_y, sel_x);
|
wmove(lo->win, sel_y, sel_x);
|
||||||
@ -632,8 +632,8 @@ SelectListObj(ListObj *lo)
|
|||||||
if (strlen(lo->name[lo->sel]) > lo->w - 2) {
|
if (strlen(lo->name[lo->sel]) > lo->w - 2) {
|
||||||
/* when printing in inverse video show the last characters in the */
|
/* when printing in inverse video show the last characters in the */
|
||||||
/* name that will fit in the window */
|
/* name that will fit in the window */
|
||||||
strncpy(tmp,
|
strncpy(tmp,
|
||||||
lo->name[lo->sel] + strlen(lo->name[lo->sel]) - (lo->w - 2),
|
lo->name[lo->sel] + strlen(lo->name[lo->sel]) - (lo->w - 2),
|
||||||
lo->w - 2);
|
lo->w - 2);
|
||||||
tmp[lo->w - 2] = 0;
|
tmp[lo->w - 2] = 0;
|
||||||
waddstr(lo->win, tmp);
|
waddstr(lo->win, tmp);
|
||||||
@ -642,7 +642,7 @@ SelectListObj(ListObj *lo)
|
|||||||
}
|
}
|
||||||
if (!quit) key = wgetch(lo->win);
|
if (!quit) key = wgetch(lo->win);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == ESC) {
|
if (key == ESC) {
|
||||||
return(SEL_ESC);
|
return(SEL_ESC);
|
||||||
}
|
}
|
||||||
@ -674,8 +674,8 @@ DelListObj(ListObj *lo)
|
|||||||
|
|
||||||
void
|
void
|
||||||
MarkCurrentListObj(ListObj *lo)
|
MarkCurrentListObj(ListObj *lo)
|
||||||
/*
|
/*
|
||||||
* Desc: mark the current item for the selection list
|
* Desc: mark the current item for the selection list
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
lo->seld[lo->sel] = !(lo->seld[lo->sel]);
|
lo->seld[lo->sel] = !(lo->seld[lo->sel]);
|
||||||
@ -707,7 +707,7 @@ UnMarkAllListObj(ListObj *lo)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<lo->n; i++) {
|
for (i=0; i<lo->n; i++) {
|
||||||
lo->seld[i] = FALSE;
|
lo->seld[i] = FALSE;
|
||||||
}
|
}
|
||||||
@ -745,7 +745,7 @@ NewButtonObj(WINDOW *win, char *title, int *pushed, int y, int x)
|
|||||||
ButtonObj *bo;
|
ButtonObj *bo;
|
||||||
|
|
||||||
bo = (ButtonObj *) malloc( sizeof(ButtonObj) );
|
bo = (ButtonObj *) malloc( sizeof(ButtonObj) );
|
||||||
|
|
||||||
bo->win = win;
|
bo->win = win;
|
||||||
bo->title = (char *) malloc( strlen(title) + 1);
|
bo->title = (char *) malloc( strlen(title) + 1);
|
||||||
strcpy(bo->title, title);
|
strcpy(bo->title, title);
|
||||||
@ -771,7 +771,7 @@ SelectButtonObj(ButtonObj *bo)
|
|||||||
print_button(bo->win, bo->title, bo->y+1, bo->x+2, TRUE);
|
print_button(bo->win, bo->title, bo->y+1, bo->x+2, TRUE);
|
||||||
wmove(bo->win, bo->y+1, bo->x+(bo->w/2)-1);
|
wmove(bo->win, bo->y+1, bo->x+(bo->w/2)-1);
|
||||||
key = wgetch(bo->win);
|
key = wgetch(bo->win);
|
||||||
print_button(bo->win, bo->title, bo->y+1, bo->x+2, FALSE);
|
print_button(bo->win, bo->title, bo->y+1, bo->x+2, FALSE);
|
||||||
switch(key) {
|
switch(key) {
|
||||||
case '\t':
|
case '\t':
|
||||||
return(SEL_TAB);
|
return(SEL_TAB);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* responsible for the proper functioning of this software, nor does
|
* responsible for the proper functioning of this software, nor does
|
||||||
* the author assume any responsibility for damages incurred with
|
* the author assume any responsibility for damages incurred with
|
||||||
* its use.
|
* its use.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
@ -85,13 +85,13 @@ typedef struct ComposeObj {
|
|||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
void RefreshStringObj(StringObj *so);
|
void RefreshStringObj(StringObj *so);
|
||||||
StringObj *NewStringObj(WINDOW *win, char *title, char *s,
|
StringObj *NewStringObj(WINDOW *win, char *title, char *s,
|
||||||
int y, int x, int w, int len);
|
int y, int x, int w, int len);
|
||||||
int SelectStringObj(StringObj *so);
|
int SelectStringObj(StringObj *so);
|
||||||
void DelStringObj(StringObj *so);
|
void DelStringObj(StringObj *so);
|
||||||
|
|
||||||
void RefreshListObj(ListObj *lo);
|
void RefreshListObj(ListObj *lo);
|
||||||
ListObj *NewListObj(WINDOW *win, char *title, char **list,
|
ListObj *NewListObj(WINDOW *win, char *title, char **list,
|
||||||
char *listelt, int y, int x, int h, int w, int n);
|
char *listelt, int y, int x, int h, int w, int n);
|
||||||
void UpdateListObj(ListObj *lo, char **list, int n);
|
void UpdateListObj(ListObj *lo, char **list, int n);
|
||||||
int SelectListObj(ListObj *lo);
|
int SelectListObj(ListObj *lo);
|
||||||
@ -101,7 +101,7 @@ void MarkAllListObj(ListObj *lo);
|
|||||||
void UnMarkAllListObj(ListObj *lo);
|
void UnMarkAllListObj(ListObj *lo);
|
||||||
|
|
||||||
void RefreshButtonObj(ButtonObj *bo);
|
void RefreshButtonObj(ButtonObj *bo);
|
||||||
ButtonObj *NewButtonObj(WINDOW *win, char *title, int *pushed,
|
ButtonObj *NewButtonObj(WINDOW *win, char *title, int *pushed,
|
||||||
int y, int x);
|
int y, int x);
|
||||||
int SelectButtonObj(ButtonObj *bo);
|
int SelectButtonObj(ButtonObj *bo);
|
||||||
void DelButtonObj(ButtonObj *bo);
|
void DelButtonObj(ButtonObj *bo);
|
||||||
|
@ -52,7 +52,7 @@ int dialog_yesno(unsigned char *title, unsigned char * prompt, int height, int w
|
|||||||
/* center dialog box on screen */
|
/* center dialog box on screen */
|
||||||
x = (COLS - width)/2;
|
x = (COLS - width)/2;
|
||||||
y = (LINES - height)/2;
|
y = (LINES - height)/2;
|
||||||
|
|
||||||
#ifdef HAVE_NCURSES
|
#ifdef HAVE_NCURSES
|
||||||
if (use_shadow)
|
if (use_shadow)
|
||||||
draw_shadow(stdscr, y, x, height, width);
|
draw_shadow(stdscr, y, x, height, width);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ License along with this library; if not, write to the Free Software
|
|||||||
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
#ifndef _ACG_h
|
#ifndef _ACG_h
|
||||||
#define _ACG_h 1
|
#define _ACG_h 1
|
||||||
|
|
||||||
#include <RNG.h>
|
#include <RNG.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1989 Free Software Foundation
|
Copyright (C) 1989 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
An AllocRing holds the last n malloc'ed strings, reallocating/reusing
|
An AllocRing holds the last n malloc'ed strings, reallocating/reusing
|
||||||
one only when the queue wraps around. It thus guarantees that the
|
one only when the queue wraps around. It thus guarantees that the
|
||||||
last n allocations are intact. It is useful for things like I/O
|
last n allocations are intact. It is useful for things like I/O
|
||||||
formatting where reasonable restrictions may be made about the
|
formatting where reasonable restrictions may be made about the
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -36,11 +36,11 @@ struct BitSetRep
|
|||||||
unsigned short s[1]; // bits start here
|
unsigned short s[1]; // bits start here
|
||||||
};
|
};
|
||||||
|
|
||||||
extern BitSetRep* BitSetalloc(BitSetRep*, const unsigned short*,
|
extern BitSetRep* BitSetalloc(BitSetRep*, const unsigned short*,
|
||||||
int, int, int);
|
int, int, int);
|
||||||
extern BitSetRep* BitSetcopy(BitSetRep*, const BitSetRep*);
|
extern BitSetRep* BitSetcopy(BitSetRep*, const BitSetRep*);
|
||||||
extern BitSetRep* BitSetresize(BitSetRep*, int);
|
extern BitSetRep* BitSetresize(BitSetRep*, int);
|
||||||
extern BitSetRep* BitSetop(const BitSetRep*, const BitSetRep*,
|
extern BitSetRep* BitSetop(const BitSetRep*, const BitSetRep*,
|
||||||
BitSetRep*, char);
|
BitSetRep*, char);
|
||||||
extern BitSetRep* BitSetcmpl(const BitSetRep*, BitSetRep*);
|
extern BitSetRep* BitSetcmpl(const BitSetRep*, BitSetRep*);
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ class BitSet
|
|||||||
protected:
|
protected:
|
||||||
BitSetRep* rep;
|
BitSetRep* rep;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// constructors
|
// constructors
|
||||||
@ -116,7 +116,7 @@ class BitSet
|
|||||||
int test(int from, int to) const;
|
int test(int from, int to) const;
|
||||||
|
|
||||||
BitSetBit operator [] (int i);
|
BitSetBit operator [] (int i);
|
||||||
|
|
||||||
// iterators
|
// iterators
|
||||||
|
|
||||||
int first(int b = 1) const;
|
int first(int b = 1) const;
|
||||||
@ -132,13 +132,13 @@ class BitSet
|
|||||||
int empty() const;
|
int empty() const;
|
||||||
int virtual_bit() const;
|
int virtual_bit() const;
|
||||||
int count(int b = 1) const;
|
int count(int b = 1) const;
|
||||||
|
|
||||||
// convertors & IO
|
// convertors & IO
|
||||||
|
|
||||||
friend BitSet atoBitSet(const char* s,
|
friend BitSet atoBitSet(const char* s,
|
||||||
char f='0', char t='1', char star='*');
|
char f='0', char t='1', char star='*');
|
||||||
// BitSettoa is deprecated; do not use in new programs.
|
// BitSettoa is deprecated; do not use in new programs.
|
||||||
friend const char* BitSettoa(const BitSet& x,
|
friend const char* BitSettoa(const BitSet& x,
|
||||||
char f='0', char t='1', char star='*');
|
char f='0', char t='1', char star='*');
|
||||||
|
|
||||||
friend BitSet shorttoBitSet(unsigned short w);
|
friend BitSet shorttoBitSet(unsigned short w);
|
||||||
@ -193,7 +193,7 @@ inline BitSet::BitSet(const BitSet& x) :rep(BitSetcopy(0, x.rep)) {}
|
|||||||
inline BitSet::~BitSet() { if (rep != &_nilBitSetRep) delete rep; }
|
inline BitSet::~BitSet() { if (rep != &_nilBitSetRep) delete rep; }
|
||||||
|
|
||||||
inline BitSet& BitSet::operator = (const BitSet& y)
|
inline BitSet& BitSet::operator = (const BitSet& y)
|
||||||
{
|
{
|
||||||
rep = BitSetcopy(rep, y.rep);
|
rep = BitSetcopy(rep, y.rep);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -258,27 +258,27 @@ inline BitSet operator ~ (const BitSet& x) return r
|
|||||||
|
|
||||||
#else /* NO_NRV */
|
#else /* NO_NRV */
|
||||||
|
|
||||||
inline BitSet operator & (const BitSet& x, const BitSet& y)
|
inline BitSet operator & (const BitSet& x, const BitSet& y)
|
||||||
{
|
{
|
||||||
BitSet r; and(x, y, r); return r;
|
BitSet r; and(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitSet operator | (const BitSet& x, const BitSet& y)
|
inline BitSet operator | (const BitSet& x, const BitSet& y)
|
||||||
{
|
{
|
||||||
BitSet r; or(x, y, r); return r;
|
BitSet r; or(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitSet operator ^ (const BitSet& x, const BitSet& y)
|
inline BitSet operator ^ (const BitSet& x, const BitSet& y)
|
||||||
{
|
{
|
||||||
BitSet r; xor(x, y, r); return r;
|
BitSet r; xor(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitSet operator - (const BitSet& x, const BitSet& y)
|
inline BitSet operator - (const BitSet& x, const BitSet& y)
|
||||||
{
|
{
|
||||||
BitSet r; diff(x, y, r); return r;
|
BitSet r; diff(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitSet operator ~ (const BitSet& x)
|
inline BitSet operator ~ (const BitSet& x)
|
||||||
{
|
{
|
||||||
BitSet r; ::complement(x, r); return r;
|
BitSet r; ::complement(x, r); return r;
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ inline int BitSet::test(int p) const
|
|||||||
{
|
{
|
||||||
if (p < 0) error("Illegal bit index");
|
if (p < 0) error("Illegal bit index");
|
||||||
int index = BitSet_index(p);
|
int index = BitSet_index(p);
|
||||||
return (index >= rep->len)? rep->virt :
|
return (index >= rep->len)? rep->virt :
|
||||||
((rep->s[index] & (1 << BitSet_pos(p))) != 0);
|
((rep->s[index] & (1 << BitSet_pos(p))) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ class BitString
|
|||||||
|
|
||||||
friend void complement(const BitString&, BitString&);
|
friend void complement(const BitString&, BitString&);
|
||||||
|
|
||||||
friend int lcompare(const BitString&, const BitString&);
|
friend int lcompare(const BitString&, const BitString&);
|
||||||
|
|
||||||
// assignment-based operators
|
// assignment-based operators
|
||||||
// (constuctive versions decalred inline below
|
// (constuctive versions decalred inline below
|
||||||
@ -162,7 +162,7 @@ class BitString
|
|||||||
|
|
||||||
void clear(int pos);
|
void clear(int pos);
|
||||||
void clear(int from, int to);
|
void clear(int from, int to);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
void invert(int pos);
|
void invert(int pos);
|
||||||
void invert(int from, int to);
|
void invert(int from, int to);
|
||||||
@ -188,7 +188,7 @@ class BitString
|
|||||||
|
|
||||||
// searching & matching
|
// searching & matching
|
||||||
|
|
||||||
int index(unsigned int bit, int startpos = 0) const ;
|
int index(unsigned int bit, int startpos = 0) const ;
|
||||||
int index(const BitString&, int startpos = 0) const;
|
int index(const BitString&, int startpos = 0) const;
|
||||||
int index(const BitSubString&, int startpos = 0) const;
|
int index(const BitSubString&, int startpos = 0) const;
|
||||||
int index(const BitPattern&, int startpos = 0) const;
|
int index(const BitPattern&, int startpos = 0) const;
|
||||||
@ -208,9 +208,9 @@ class BitString
|
|||||||
// BitSubString extraction
|
// BitSubString extraction
|
||||||
|
|
||||||
BitSubString at(int pos, int len);
|
BitSubString at(int pos, int len);
|
||||||
BitSubString at(const BitString&, int startpos = 0);
|
BitSubString at(const BitString&, int startpos = 0);
|
||||||
BitSubString at(const BitSubString&, int startpos = 0);
|
BitSubString at(const BitSubString&, int startpos = 0);
|
||||||
BitSubString at(const BitPattern&, int startpos = 0);
|
BitSubString at(const BitPattern&, int startpos = 0);
|
||||||
|
|
||||||
BitSubString before(int pos);
|
BitSubString before(int pos);
|
||||||
BitSubString before(const BitString&, int startpos = 0);
|
BitSubString before(const BitString&, int startpos = 0);
|
||||||
@ -224,9 +224,9 @@ class BitString
|
|||||||
|
|
||||||
// other friends & utilities
|
// other friends & utilities
|
||||||
|
|
||||||
friend BitString common_prefix(const BitString&, const BitString&,
|
friend BitString common_prefix(const BitString&, const BitString&,
|
||||||
int pos = 0);
|
int pos = 0);
|
||||||
friend BitString common_suffix(const BitString&, const BitString&,
|
friend BitString common_suffix(const BitString&, const BitString&,
|
||||||
int pos = -1);
|
int pos = -1);
|
||||||
friend BitString reverse(const BitString&);
|
friend BitString reverse(const BitString&);
|
||||||
|
|
||||||
@ -259,7 +259,7 @@ class BitString
|
|||||||
|
|
||||||
friend BitPattern atoBitPattern(const char* s,
|
friend BitPattern atoBitPattern(const char* s,
|
||||||
char f='0',char t='1',char x='X');
|
char f='0',char t='1',char x='X');
|
||||||
friend const char* BitPatterntoa(const BitPattern& p,
|
friend const char* BitPatterntoa(const BitPattern& p,
|
||||||
char f='0',char t='1',char x='X');
|
char f='0',char t='1',char x='X');
|
||||||
int OK() const;
|
int OK() const;
|
||||||
};
|
};
|
||||||
@ -277,7 +277,7 @@ class BitPattern
|
|||||||
|
|
||||||
~BitPattern();
|
~BitPattern();
|
||||||
|
|
||||||
friend const char* BitPatterntoa(const BitPattern& p,
|
friend const char* BitPatterntoa(const BitPattern& p,
|
||||||
char f/*='0'*/,char t/*='1'*/,char x/*='X'*/);
|
char f/*='0'*/,char t/*='1'*/,char x/*='X'*/);
|
||||||
void printon(ostream&, char f='0',char t='1',char x='X') const;
|
void printon(ostream&, char f='0',char t='1',char x='X') const;
|
||||||
friend BitPattern atoBitPattern(const char* s, char f,char t, char x);
|
friend BitPattern atoBitPattern(const char* s, char f,char t, char x);
|
||||||
@ -320,16 +320,16 @@ inline BitString::BitString() :rep(&_nilBitStrRep) {}
|
|||||||
|
|
||||||
inline BitString::BitString(const BitString& x) :rep(BStr_copy(0, x.rep)) {}
|
inline BitString::BitString(const BitString& x) :rep(BStr_copy(0, x.rep)) {}
|
||||||
|
|
||||||
inline BitString::BitString(const BitSubString& y)
|
inline BitString::BitString(const BitSubString& y)
|
||||||
:rep (BStr_alloc(0, y.S.rep->s, y.pos, y.pos+y.len, y.len)) {}
|
:rep (BStr_alloc(0, y.S.rep->s, y.pos, y.pos+y.len, y.len)) {}
|
||||||
|
|
||||||
inline BitString::~BitString()
|
inline BitString::~BitString()
|
||||||
{
|
{
|
||||||
if (rep != &_nilBitStrRep) delete rep;
|
if (rep != &_nilBitStrRep) delete rep;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString shorttoBitString(unsigned short w)
|
inline BitString shorttoBitString(unsigned short w)
|
||||||
{
|
{
|
||||||
BitString r;
|
BitString r;
|
||||||
_BS_word ww = w;
|
_BS_word ww = w;
|
||||||
#if _BS_BIGENDIAN
|
#if _BS_BIGENDIAN
|
||||||
@ -339,8 +339,8 @@ inline BitString shorttoBitString(unsigned short w)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString longtoBitString(unsigned long w)
|
inline BitString longtoBitString(unsigned long w)
|
||||||
{
|
{
|
||||||
BitString r;
|
BitString r;
|
||||||
#if 1
|
#if 1
|
||||||
_BS_word u = w;
|
_BS_word u = w;
|
||||||
@ -355,13 +355,13 @@ inline BitString longtoBitString(unsigned long w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline BitString& BitString::operator = (const BitString& y)
|
inline BitString& BitString::operator = (const BitString& y)
|
||||||
{
|
{
|
||||||
rep = BStr_copy(rep, y.rep);
|
rep = BStr_copy(rep, y.rep);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString& BitString::operator = (unsigned int b)
|
inline BitString& BitString::operator = (unsigned int b)
|
||||||
{
|
{
|
||||||
_BS_word bit = b;
|
_BS_word bit = b;
|
||||||
rep = BStr_alloc(rep, &bit, 0, 1, 1);
|
rep = BStr_alloc(rep, &bit, 0, 1, 1);
|
||||||
return *this;
|
return *this;
|
||||||
@ -373,7 +373,7 @@ inline BitString& BitString::operator=(const BitSubString& y)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitSubString::BitSubString(const BitSubString& x)
|
inline BitSubString::BitSubString(const BitSubString& x)
|
||||||
:S(x.S), pos(x.pos), len(x.len) {}
|
:S(x.S), pos(x.pos), len(x.len) {}
|
||||||
|
|
||||||
inline BitSubString::BitSubString(BitString& x, int p, int l)
|
inline BitSubString::BitSubString(BitString& x, int p, int l)
|
||||||
@ -544,47 +544,47 @@ inline BitString operator ~ (const BitString& x) return r
|
|||||||
|
|
||||||
#else /* NO_NRV */
|
#else /* NO_NRV */
|
||||||
|
|
||||||
inline BitString operator & (const BitString& x, const BitString& y)
|
inline BitString operator & (const BitString& x, const BitString& y)
|
||||||
{
|
{
|
||||||
BitString r; and(x, y, r); return r;
|
BitString r; and(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator | (const BitString& x, const BitString& y)
|
inline BitString operator | (const BitString& x, const BitString& y)
|
||||||
{
|
{
|
||||||
BitString r; or(x, y, r); return r;
|
BitString r; or(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator ^ (const BitString& x, const BitString& y)
|
inline BitString operator ^ (const BitString& x, const BitString& y)
|
||||||
{
|
{
|
||||||
BitString r; xor(x, y, r); return r;
|
BitString r; xor(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator << (const BitString& x, int y)
|
inline BitString operator << (const BitString& x, int y)
|
||||||
{
|
{
|
||||||
BitString r; lshift(x, y, r); return r;
|
BitString r; lshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator >> (const BitString& x, int y)
|
inline BitString operator >> (const BitString& x, int y)
|
||||||
{
|
{
|
||||||
BitString r; rshift(x, y, r); return r;
|
BitString r; rshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator - (const BitString& x, const BitString& y)
|
inline BitString operator - (const BitString& x, const BitString& y)
|
||||||
{
|
{
|
||||||
BitString r; diff(x, y, r); return r;
|
BitString r; diff(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator + (const BitString& x, const BitString& y)
|
inline BitString operator + (const BitString& x, const BitString& y)
|
||||||
{
|
{
|
||||||
BitString r; cat(x, y, r); return r;
|
BitString r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator + (const BitString& x, unsigned int y)
|
inline BitString operator + (const BitString& x, unsigned int y)
|
||||||
{
|
{
|
||||||
BitString r; cat(x, y, r); return r;
|
BitString r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BitString operator ~ (const BitString& x)
|
inline BitString operator ~ (const BitString& x)
|
||||||
{
|
{
|
||||||
BitString r; complement(x, r); return r;
|
BitString r; complement(x, r); return r;
|
||||||
}
|
}
|
||||||
@ -594,32 +594,32 @@ inline BitString operator ~ (const BitString& x)
|
|||||||
// status, matching
|
// status, matching
|
||||||
|
|
||||||
inline int BitString::length() const
|
inline int BitString::length() const
|
||||||
{
|
{
|
||||||
return rep->len;
|
return rep->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitString::empty() const
|
inline int BitString::empty() const
|
||||||
{
|
{
|
||||||
return rep->len == 0;
|
return rep->len == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitString::index(const BitString& y, int startpos) const
|
inline int BitString::index(const BitString& y, int startpos) const
|
||||||
{
|
{
|
||||||
return search(startpos, rep->len, y.rep->s, 0, y.rep->len);
|
return search(startpos, rep->len, y.rep->s, 0, y.rep->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitString::index(const BitSubString& y, int startpos) const
|
inline int BitString::index(const BitSubString& y, int startpos) const
|
||||||
{
|
{
|
||||||
return search(startpos, rep->len, y.S.rep->s, y.pos, y.pos+y.len);
|
return search(startpos, rep->len, y.S.rep->s, y.pos, y.pos+y.len);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitString::contains(const BitString& y) const
|
inline int BitString::contains(const BitString& y) const
|
||||||
{
|
{
|
||||||
return search(0, rep->len, y.rep->s, 0, y.rep->len) >= 0;
|
return search(0, rep->len, y.rep->s, 0, y.rep->len) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitString::contains(const BitSubString& y) const
|
inline int BitString::contains(const BitSubString& y) const
|
||||||
{
|
{
|
||||||
return search(0, rep->len, y.S.rep->s, y.pos, y.pos+y.len) >= 0;
|
return search(0, rep->len, y.S.rep->s, y.pos, y.pos+y.len) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,12 +664,12 @@ inline int BitString::index(const BitPattern& r, int startpos) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline int BitSubString::length() const
|
inline int BitSubString::length() const
|
||||||
{
|
{
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int BitSubString::empty() const
|
inline int BitSubString::empty() const
|
||||||
{
|
{
|
||||||
return len == 0;
|
return len == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ inline int BitString::index(unsigned int bit, int startpos) const
|
|||||||
return prev(rep->len + startpos + 1, bit);
|
return prev(rep->len + startpos + 1, bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void BitString::right_trim(unsigned int b)
|
inline void BitString::right_trim(unsigned int b)
|
||||||
{
|
{
|
||||||
int nb = (b == 0)? 1 : 0;
|
int nb = (b == 0)? 1 : 0;
|
||||||
rep = BStr_resize(rep, prev(rep->len, nb) + 1);
|
rep = BStr_resize(rep, prev(rep->len, nb) + 1);
|
||||||
@ -721,7 +721,7 @@ inline void BitString::left_trim(unsigned int b)
|
|||||||
|
|
||||||
inline int BitString::test(int i) const
|
inline int BitString::test(int i) const
|
||||||
{
|
{
|
||||||
return ((unsigned)(i) >= rep->len)? 0 :
|
return ((unsigned)(i) >= rep->len)? 0 :
|
||||||
((rep->s[BitStr_index(i)] & (1 << (BitStr_pos(i)))) != 0);
|
((rep->s[BitStr_index(i)] & (1 << (BitStr_pos(i)))) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -754,7 +754,7 @@ inline BitSubString BitString::_substr(int first, int l)
|
|||||||
{
|
{
|
||||||
if (first < 0 || l <= 0 || (unsigned)(first + l) > rep->len)
|
if (first < 0 || l <= 0 || (unsigned)(first + l) > rep->len)
|
||||||
return BitSubString(_nil_BitString, 0, 0) ;
|
return BitSubString(_nil_BitString, 0, 0) ;
|
||||||
else
|
else
|
||||||
return BitSubString(*this, first, l);
|
return BitSubString(*this, first, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -57,8 +57,8 @@ class Complex
|
|||||||
Complex& operator *= (const Complex& y);
|
Complex& operator *= (const Complex& y);
|
||||||
Complex& operator *= (double y);
|
Complex& operator *= (double y);
|
||||||
|
|
||||||
Complex& operator /= (const Complex& y);
|
Complex& operator /= (const Complex& y);
|
||||||
Complex& operator /= (double y);
|
Complex& operator /= (double y);
|
||||||
|
|
||||||
void error(const char* msg) const;
|
void error(const char* msg) const;
|
||||||
};
|
};
|
||||||
@ -83,7 +83,7 @@ Complex pow(const Complex& x, int p);
|
|||||||
Complex pow(const Complex& x, const Complex& p);
|
Complex pow(const Complex& x, const Complex& p);
|
||||||
Complex pow(const Complex& x, double y);
|
Complex pow(const Complex& x, double y);
|
||||||
Complex sqrt(const Complex& x);
|
Complex sqrt(const Complex& x);
|
||||||
|
|
||||||
istream& operator >> (istream& s, Complex& x);
|
istream& operator >> (istream& s, Complex& x);
|
||||||
ostream& operator << (ostream& s, const Complex& x);
|
ostream& operator << (ostream& s, const Complex& x);
|
||||||
|
|
||||||
@ -99,42 +99,42 @@ inline Complex::Complex(double r, double i) :re(r), im(i) {}
|
|||||||
|
|
||||||
inline Complex::~Complex() {}
|
inline Complex::~Complex() {}
|
||||||
|
|
||||||
inline Complex& Complex::operator = (const Complex& y)
|
inline Complex& Complex::operator = (const Complex& y)
|
||||||
{
|
{
|
||||||
re = y.real(); im = y.imag(); return *this;
|
re = y.real(); im = y.imag(); return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator += (const Complex& y)
|
inline Complex& Complex::operator += (const Complex& y)
|
||||||
{
|
{
|
||||||
re += y.real(); im += y.imag(); return *this;
|
re += y.real(); im += y.imag(); return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator += (double y)
|
inline Complex& Complex::operator += (double y)
|
||||||
{
|
{
|
||||||
re += y; return *this;
|
re += y; return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator -= (const Complex& y)
|
inline Complex& Complex::operator -= (const Complex& y)
|
||||||
{
|
{
|
||||||
re -= y.real(); im -= y.imag(); return *this;
|
re -= y.real(); im -= y.imag(); return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator -= (double y)
|
inline Complex& Complex::operator -= (double y)
|
||||||
{
|
{
|
||||||
re -= y; return *this;
|
re -= y; return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator *= (const Complex& y)
|
inline Complex& Complex::operator *= (const Complex& y)
|
||||||
{
|
{
|
||||||
double r = re * y.real() - im * y.imag();
|
double r = re * y.real() - im * y.imag();
|
||||||
im = re * y.imag() + im * y.real();
|
im = re * y.imag() + im * y.real();
|
||||||
re = r;
|
re = r;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Complex& Complex::operator *= (double y)
|
inline Complex& Complex::operator *= (double y)
|
||||||
{
|
{
|
||||||
re *= y; im *= y; return *this;
|
re *= y; im *= y; return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ inline Complex operator - (double x, const Complex& y)
|
|||||||
|
|
||||||
inline Complex operator * (const Complex& x, const Complex& y)
|
inline Complex operator * (const Complex& x, const Complex& y)
|
||||||
{
|
{
|
||||||
return Complex(x.real() * y.real() - x.imag() * y.imag(),
|
return Complex(x.real() * y.real() - x.imag() * y.imag(),
|
||||||
x.real() * y.imag() + x.imag() * y.real());
|
x.real() * y.imag() + x.imag() * y.real());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1989 Free Software Foundation
|
Copyright (C) 1989 Free Software Foundation
|
||||||
written by Eric Newton (newton@rocky.oswego.edu)
|
written by Eric Newton (newton@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ inline int (mvinsch)(int y, int x, char c)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class CursesWindow
|
class CursesWindow
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
static int count; // count of all active windows:
|
static int count; // count of all active windows:
|
||||||
@ -385,102 +385,102 @@ inline int CursesWindow::width()
|
|||||||
return maxx() - begx() + 1;
|
return maxx() - begx() + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::box(char vert, char hor)
|
inline int CursesWindow::box(char vert, char hor)
|
||||||
{
|
{
|
||||||
return ::box(w, vert, hor);
|
return ::box(w, vert, hor);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::overlay(CursesWindow &win)
|
inline int CursesWindow::overlay(CursesWindow &win)
|
||||||
{
|
{
|
||||||
return ::overlay(w, win.w);
|
return ::overlay(w, win.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::overwrite(CursesWindow &win)
|
inline int CursesWindow::overwrite(CursesWindow &win)
|
||||||
{
|
{
|
||||||
return ::overwrite(w, win.w);
|
return ::overwrite(w, win.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::scroll()
|
inline int CursesWindow::scroll()
|
||||||
{
|
{
|
||||||
return ::scroll(w);
|
return ::scroll(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline int CursesWindow::touchwin()
|
inline int CursesWindow::touchwin()
|
||||||
{
|
{
|
||||||
return ::touchwin(w);
|
return ::touchwin(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::addch(const char ch)
|
inline int CursesWindow::addch(const char ch)
|
||||||
{
|
{
|
||||||
return ::waddch(w, ch);
|
return ::waddch(w, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::addstr(const char * str)
|
inline int CursesWindow::addstr(const char * str)
|
||||||
{
|
{
|
||||||
// The (char*) cast is to hack around prototypes in curses.h that
|
// The (char*) cast is to hack around prototypes in curses.h that
|
||||||
// have const missing in the parameter lists. [E.g. SVR4]
|
// have const missing in the parameter lists. [E.g. SVR4]
|
||||||
return ::waddstr(w, (char*)str);
|
return ::waddstr(w, (char*)str);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::clear()
|
inline int CursesWindow::clear()
|
||||||
{
|
{
|
||||||
return ::wclear(w);
|
return ::wclear(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::clrtobot()
|
inline int CursesWindow::clrtobot()
|
||||||
{
|
{
|
||||||
return ::wclrtobot(w);
|
return ::wclrtobot(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::clrtoeol()
|
inline int CursesWindow::clrtoeol()
|
||||||
{
|
{
|
||||||
return ::wclrtoeol(w);
|
return ::wclrtoeol(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::delch()
|
inline int CursesWindow::delch()
|
||||||
{
|
{
|
||||||
return ::wdelch(w);
|
return ::wdelch(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::deleteln()
|
inline int CursesWindow::deleteln()
|
||||||
{
|
{
|
||||||
return ::wdeleteln(w);
|
return ::wdeleteln(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::erase()
|
inline int CursesWindow::erase()
|
||||||
{
|
{
|
||||||
return ::werase(w);
|
return ::werase(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::getch()
|
inline int CursesWindow::getch()
|
||||||
{
|
{
|
||||||
return ::wgetch(w);
|
return ::wgetch(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::getstr(char * str)
|
inline int CursesWindow::getstr(char * str)
|
||||||
{
|
{
|
||||||
return ::wgetstr(w, str);
|
return ::wgetstr(w, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::inch()
|
inline int CursesWindow::inch()
|
||||||
{
|
{
|
||||||
return winch(w);
|
return winch(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::insch(char c)
|
inline int CursesWindow::insch(char c)
|
||||||
{
|
{
|
||||||
return ::winsch(w, c);
|
return ::winsch(w, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::insertln()
|
inline int CursesWindow::insertln()
|
||||||
{
|
{
|
||||||
return ::winsertln(w);
|
return ::winsertln(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::move(int y, int x)
|
inline int CursesWindow::move(int y, int x)
|
||||||
{
|
{
|
||||||
return ::wmove(w, y, x);
|
return ::wmove(w, y, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -524,56 +524,56 @@ inline int CursesWindow::mvinsch(int y, int x, char ch)
|
|||||||
return (::wmove(w, y, x)==ERR) ? ERR : ::winsch(w, ch);
|
return (::wmove(w, y, x)==ERR) ? ERR : ::winsch(w, ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::refresh()
|
inline int CursesWindow::refresh()
|
||||||
{
|
{
|
||||||
return ::wrefresh(w);
|
return ::wrefresh(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::clearok(int bf)
|
inline int CursesWindow::clearok(int bf)
|
||||||
{
|
{
|
||||||
return ::clearok(w,bf);
|
return ::clearok(w,bf);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::leaveok(int bf)
|
inline int CursesWindow::leaveok(int bf)
|
||||||
{
|
{
|
||||||
return ::leaveok(w,bf);
|
return ::leaveok(w,bf);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::scrollok(int bf)
|
inline int CursesWindow::scrollok(int bf)
|
||||||
{
|
{
|
||||||
return ::scrollok(w,bf);
|
return ::scrollok(w,bf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef _no_flushok
|
#ifndef _no_flushok
|
||||||
inline int CursesWindow::flushok(int bf)
|
inline int CursesWindow::flushok(int bf)
|
||||||
{
|
{
|
||||||
return ::flushok(w, bf);
|
return ::flushok(w, bf);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline void CursesWindow::getyx(int& y, int& x)
|
inline void CursesWindow::getyx(int& y, int& x)
|
||||||
{
|
{
|
||||||
::getyx(w, y, x);
|
::getyx(w, y, x);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::standout()
|
inline int CursesWindow::standout()
|
||||||
{
|
{
|
||||||
return ::wstandout(w);
|
return ::wstandout(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::standend()
|
inline int CursesWindow::standend()
|
||||||
{
|
{
|
||||||
return ::wstandend(w);
|
return ::wstandend(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::lines()
|
inline int CursesWindow::lines()
|
||||||
{
|
{
|
||||||
return LINES;
|
return LINES;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int CursesWindow::cols()
|
inline int CursesWindow::cols()
|
||||||
{
|
{
|
||||||
return COLS;
|
return COLS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline CursesWindow* CursesWindow::child()
|
inline CursesWindow* CursesWindow::child()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
|
|
||||||
//
|
//
|
||||||
// The interval [lo..hi)
|
// The interval [lo..hi)
|
||||||
//
|
//
|
||||||
|
|
||||||
class DiscreteUniform: public Random {
|
class DiscreteUniform: public Random {
|
||||||
long pLow;
|
long pLow;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _Erlang_h 1
|
#define _Erlang_h 1
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// -*- C++ -*-
|
// -*- C++ -*-
|
||||||
// Fix.h : variable length fixed point data type
|
// Fix.h : variable length fixed point data type
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef _Fix_h
|
#ifndef _Fix_h
|
||||||
@ -124,7 +124,7 @@ class Fix
|
|||||||
friend char* Ftoa(const Fix&, int width = default_print_width);
|
friend char* Ftoa(const Fix&, int width = default_print_width);
|
||||||
void printon(ostream&, int width = default_print_width) const;
|
void printon(ostream&, int width = default_print_width) const;
|
||||||
friend Fix atoF(const char*, int len = default_length);
|
friend Fix atoF(const char*, int len = default_length);
|
||||||
|
|
||||||
friend istream& operator >> (istream&, Fix&);
|
friend istream& operator >> (istream&, Fix&);
|
||||||
friend ostream& operator << (ostream&, const Fix&);
|
friend ostream& operator << (ostream&, const Fix&);
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ Fix::mask (Fix::Rep* x)
|
|||||||
{
|
{
|
||||||
int n = x->len & 0x0f;
|
int n = x->len & 0x0f;
|
||||||
if ( n )
|
if ( n )
|
||||||
x->s[x->siz - 1] &= 0xffff0000 >> n;
|
x->s[x->siz - 1] &= 0xffff0000 >> n;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix::Rep*
|
inline Fix::Rep*
|
||||||
@ -269,7 +269,7 @@ Fix::operator = (const Fix& y)
|
|||||||
if ( rep->len == y.rep->len ) {
|
if ( rep->len == y.rep->len ) {
|
||||||
++y.rep->ref;
|
++y.rep->ref;
|
||||||
if ( --rep->ref <= 0 ) delete rep;
|
if ( --rep->ref <= 0 ) delete rep;
|
||||||
rep = y.rep;
|
rep = y.rep;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
unique();
|
unique();
|
||||||
@ -290,37 +290,37 @@ Fix::operator = (double d)
|
|||||||
inline int
|
inline int
|
||||||
operator == (const Fix& x, const Fix& y)
|
operator == (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) == 0;
|
return Fix::compare(x.rep, y.rep) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
operator != (const Fix& x, const Fix& y)
|
operator != (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) != 0;
|
return Fix::compare(x.rep, y.rep) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
operator < (const Fix& x, const Fix& y)
|
operator < (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) < 0;
|
return Fix::compare(x.rep, y.rep) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
operator <= (const Fix& x, const Fix& y)
|
operator <= (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) <= 0;
|
return Fix::compare(x.rep, y.rep) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
operator > (const Fix& x, const Fix& y)
|
operator > (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) > 0;
|
return Fix::compare(x.rep, y.rep) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int
|
inline int
|
||||||
operator >= (const Fix& x, const Fix& y)
|
operator >= (const Fix& x, const Fix& y)
|
||||||
{
|
{
|
||||||
return Fix::compare(x.rep, y.rep) >= 0;
|
return Fix::compare(x.rep, y.rep) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix&
|
inline Fix&
|
||||||
@ -415,7 +415,7 @@ operator << (const Fix& x, int y)
|
|||||||
|
|
||||||
inline Fix
|
inline Fix
|
||||||
operator >> (const Fix& x, int y)
|
operator >> (const Fix& x, int y)
|
||||||
{
|
{
|
||||||
Fix::Rep* rep = Fix::shift(x.rep, -y); return rep;
|
Fix::Rep* rep = Fix::shift(x.rep, -y); return rep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
|
written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
|
||||||
adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
|
adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
|
||||||
@ -58,8 +58,8 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
// consists of a 16-bit mantissa (sign bit & 15 data bits).
|
// consists of a 16-bit mantissa (sign bit & 15 data bits).
|
||||||
//
|
//
|
||||||
|
|
||||||
class Fix16
|
class Fix16
|
||||||
{
|
{
|
||||||
friend class Fix32;
|
friend class Fix32;
|
||||||
|
|
||||||
short m;
|
short m;
|
||||||
@ -102,7 +102,7 @@ class Fix16
|
|||||||
Fix16& operator -= (const Fix16& f);
|
Fix16& operator -= (const Fix16& f);
|
||||||
Fix16& operator *= (const Fix16& );
|
Fix16& operator *= (const Fix16& );
|
||||||
Fix16& operator /= (const Fix16& f);
|
Fix16& operator /= (const Fix16& f);
|
||||||
|
|
||||||
Fix16& operator <<=(int b);
|
Fix16& operator <<=(int b);
|
||||||
Fix16& operator >>=(int b);
|
Fix16& operator >>=(int b);
|
||||||
|
|
||||||
@ -124,15 +124,15 @@ class Fix16
|
|||||||
Fix16& operator *= (int g);
|
Fix16& operator *= (int g);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fix32 class: 32-bit Fixed point data type
|
// Fix32 class: 32-bit Fixed point data type
|
||||||
//
|
//
|
||||||
// consists of a 32-bit mantissa (sign bit & 31 data bits).
|
// consists of a 32-bit mantissa (sign bit & 31 data bits).
|
||||||
//
|
//
|
||||||
|
|
||||||
class Fix32
|
class Fix32
|
||||||
{
|
{
|
||||||
friend class Fix16;
|
friend class Fix16;
|
||||||
|
|
||||||
_G_int32_t m;
|
_G_int32_t m;
|
||||||
@ -241,141 +241,141 @@ extern void
|
|||||||
inline Fix16::~Fix16() {}
|
inline Fix16::~Fix16() {}
|
||||||
|
|
||||||
inline short Fix16::round(double d)
|
inline short Fix16::round(double d)
|
||||||
{
|
{
|
||||||
return short( (d >= 0)? d + 0.5 : d - 0.5);
|
return short( (d >= 0)? d + 0.5 : d - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16(short i)
|
inline Fix16::Fix16(short i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16(int i)
|
inline Fix16::Fix16(int i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::operator double() const
|
inline Fix16::operator double() const
|
||||||
{
|
{
|
||||||
return Fix16_div * m;
|
return Fix16_div * m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16()
|
inline Fix16::Fix16()
|
||||||
{
|
{
|
||||||
m = 0;
|
m = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16(const Fix16& f)
|
inline Fix16::Fix16(const Fix16& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16(double d)
|
inline Fix16::Fix16(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Fix16& Fix16::operator=(const Fix16& f)
|
inline Fix16& Fix16::operator=(const Fix16& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16::operator=(double d)
|
inline Fix16& Fix16::operator=(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Fix32::Fix32()
|
inline Fix32::Fix32()
|
||||||
{
|
{
|
||||||
m = 0;
|
m = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32::Fix32(_G_int32_t i)
|
inline Fix32::Fix32(_G_int32_t i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32:: operator double() const
|
inline Fix32:: operator double() const
|
||||||
{
|
{
|
||||||
return Fix32_div * m;
|
return Fix32_div * m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Fix32::Fix32(const Fix32& f)
|
inline Fix32::Fix32(const Fix32& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32::Fix32(const Fix16& f)
|
inline Fix32::Fix32(const Fix16& f)
|
||||||
{
|
{
|
||||||
m = _G_int32_t(f.m) << 16;
|
m = _G_int32_t(f.m) << 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32::Fix32(double d)
|
inline Fix32::Fix32(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16::Fix16(const Fix32& f)
|
inline Fix16::Fix16(const Fix32& f)
|
||||||
{
|
{
|
||||||
m = f.m >> 16;
|
m = f.m >> 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Fix16& Fix16::operator=(const Fix32& f)
|
inline Fix16& Fix16::operator=(const Fix32& f)
|
||||||
{
|
{
|
||||||
m = f.m >> 16;
|
m = f.m >> 16;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator=(const Fix32& f)
|
inline Fix32& Fix32::operator=(const Fix32& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator=(const Fix16& f)
|
inline Fix32& Fix32::operator=(const Fix16& f)
|
||||||
{
|
{
|
||||||
m = _G_int32_t(f.m) << 16;
|
m = _G_int32_t(f.m) << 16;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator=(double d)
|
inline Fix32& Fix32::operator=(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline short& mantissa(Fix16& f)
|
inline short& mantissa(Fix16& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const short& mantissa(const Fix16& f)
|
inline const short& mantissa(const Fix16& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double value(const Fix16& f)
|
inline double value(const Fix16& f)
|
||||||
{
|
{
|
||||||
return double(f);
|
return double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 Fix16::operator+() const
|
inline Fix16 Fix16::operator+() const
|
||||||
{
|
{
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 Fix16::operator-() const
|
inline Fix16 Fix16::operator-() const
|
||||||
{
|
{
|
||||||
return -m;
|
return -m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 operator+(const Fix16& f, const Fix16& g)
|
inline Fix16 operator+(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
short sum = f.m + g.m;
|
short sum = f.m + g.m;
|
||||||
if ( (f.m ^ sum) & (g.m ^ sum) & Fix16_msb )
|
if ( (f.m ^ sum) & (g.m ^ sum) & Fix16_msb )
|
||||||
@ -383,7 +383,7 @@ inline Fix16 operator+(const Fix16& f, const Fix16& g)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 operator-(const Fix16& f, const Fix16& g)
|
inline Fix16 operator-(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
short sum = f.m - g.m;
|
short sum = f.m - g.m;
|
||||||
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix16_msb )
|
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix16_msb )
|
||||||
@ -392,90 +392,90 @@ inline Fix16 operator-(const Fix16& f, const Fix16& g)
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 operator*(const Fix16& f, const Fix16& g)
|
inline Fix32 operator*(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return Fix32( _G_int32_t( _G_int32_t(f.m) * _G_int32_t(g.m) << 1));
|
return Fix32( _G_int32_t( _G_int32_t(f.m) * _G_int32_t(g.m) << 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 operator<<(const Fix16& a, int b)
|
inline Fix16 operator<<(const Fix16& a, int b)
|
||||||
{
|
{
|
||||||
return a.m << b;
|
return a.m << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16 operator>>(const Fix16& a, int b)
|
inline Fix16 operator>>(const Fix16& a, int b)
|
||||||
{
|
{
|
||||||
return a.m >> b;
|
return a.m >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16:: operator+=(const Fix16& f)
|
inline Fix16& Fix16:: operator+=(const Fix16& f)
|
||||||
{
|
{
|
||||||
return *this = *this + f;
|
return *this = *this + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16:: operator-=(const Fix16& f)
|
inline Fix16& Fix16:: operator-=(const Fix16& f)
|
||||||
{
|
{
|
||||||
return *this = *this - f;
|
return *this = *this - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16::operator*=(const Fix16& f)
|
inline Fix16& Fix16::operator*=(const Fix16& f)
|
||||||
{
|
{
|
||||||
return *this = *this * f;
|
return *this = *this * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16:: operator/=(const Fix16& f)
|
inline Fix16& Fix16:: operator/=(const Fix16& f)
|
||||||
{
|
{
|
||||||
return *this = *this / f;
|
return *this = *this / f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16:: operator<<=(int b)
|
inline Fix16& Fix16:: operator<<=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this << b;
|
return *this = *this << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix16& Fix16:: operator>>=(int b)
|
inline Fix16& Fix16:: operator>>=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this >> b;
|
return *this = *this >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const Fix16& f, const Fix16& g)
|
inline int operator==(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m == g.m;
|
return f.m == g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const Fix16& f, const Fix16& g)
|
inline int operator!=(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m != g.m;
|
return f.m != g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const Fix16& f, const Fix16& g)
|
inline int operator>=(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m >= g.m;
|
return f.m >= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const Fix16& f, const Fix16& g)
|
inline int operator<=(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m <= g.m;
|
return f.m <= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const Fix16& f, const Fix16& g)
|
inline int operator>(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m > g.m;
|
return f.m > g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const Fix16& f, const Fix16& g)
|
inline int operator<(const Fix16& f, const Fix16& g)
|
||||||
{
|
{
|
||||||
return f.m < g.m;
|
return f.m < g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline istream& operator>>(istream& s, Fix16& f)
|
inline istream& operator>>(istream& s, Fix16& f)
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
s >> d;
|
s >> d;
|
||||||
f = d;
|
f = d;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ostream& operator<<(ostream& s, const Fix16& f)
|
inline ostream& operator<<(ostream& s, const Fix16& f)
|
||||||
{
|
{
|
||||||
return s << double(f);
|
return s << double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -499,36 +499,36 @@ inline Fix16& Fix16::operator*=(int g)
|
|||||||
inline Fix32::~Fix32() {}
|
inline Fix32::~Fix32() {}
|
||||||
|
|
||||||
inline _G_int32_t Fix32::round(double d)
|
inline _G_int32_t Fix32::round(double d)
|
||||||
{
|
{
|
||||||
return _G_int32_t( (d >= 0)? d + 0.5 : d - 0.5);
|
return _G_int32_t( (d >= 0)? d + 0.5 : d - 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline _G_int32_t& mantissa(Fix32& f)
|
inline _G_int32_t& mantissa(Fix32& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const _G_int32_t& mantissa(const Fix32& f)
|
inline const _G_int32_t& mantissa(const Fix32& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double value(const Fix32& f)
|
inline double value(const Fix32& f)
|
||||||
{
|
{
|
||||||
return double(f);
|
return double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 Fix32::operator+() const
|
inline Fix32 Fix32::operator+() const
|
||||||
{
|
{
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 Fix32::operator-() const
|
inline Fix32 Fix32::operator-() const
|
||||||
{
|
{
|
||||||
return -m;
|
return -m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 operator+(const Fix32& f, const Fix32& g)
|
inline Fix32 operator+(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
_G_int32_t sum = f.m + g.m;
|
_G_int32_t sum = f.m + g.m;
|
||||||
if ( (f.m ^ sum) & (g.m ^ sum) & Fix32_msb )
|
if ( (f.m ^ sum) & (g.m ^ sum) & Fix32_msb )
|
||||||
@ -536,7 +536,7 @@ inline Fix32 operator+(const Fix32& f, const Fix32& g)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 operator-(const Fix32& f, const Fix32& g)
|
inline Fix32 operator-(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
_G_int32_t sum = f.m - g.m;
|
_G_int32_t sum = f.m - g.m;
|
||||||
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix32_msb )
|
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix32_msb )
|
||||||
@ -544,87 +544,87 @@ inline Fix32 operator-(const Fix32& f, const Fix32& g)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 operator<<(const Fix32& a, int b)
|
inline Fix32 operator<<(const Fix32& a, int b)
|
||||||
{
|
{
|
||||||
return a.m << b;
|
return a.m << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32 operator>>(const Fix32& a, int b)
|
inline Fix32 operator>>(const Fix32& a, int b)
|
||||||
{
|
{
|
||||||
return a.m >> b;
|
return a.m >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator+=(const Fix32& f)
|
inline Fix32& Fix32::operator+=(const Fix32& f)
|
||||||
{
|
{
|
||||||
return *this = *this + f;
|
return *this = *this + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator-=(const Fix32& f)
|
inline Fix32& Fix32::operator-=(const Fix32& f)
|
||||||
{
|
{
|
||||||
return *this = *this - f;
|
return *this = *this - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator*=(const Fix32& f)
|
inline Fix32& Fix32::operator*=(const Fix32& f)
|
||||||
{
|
{
|
||||||
return *this = *this * f;
|
return *this = *this * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator/=(const Fix32& f)
|
inline Fix32& Fix32::operator/=(const Fix32& f)
|
||||||
{
|
{
|
||||||
return *this = *this / f;
|
return *this = *this / f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Fix32& Fix32::operator<<=(int b)
|
inline Fix32& Fix32::operator<<=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this << b;
|
return *this = *this << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix32& Fix32::operator>>=(int b)
|
inline Fix32& Fix32::operator>>=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this >> b;
|
return *this = *this >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const Fix32& f, const Fix32& g)
|
inline int operator==(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m == g.m;
|
return f.m == g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const Fix32& f, const Fix32& g)
|
inline int operator!=(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m != g.m;
|
return f.m != g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const Fix32& f, const Fix32& g)
|
inline int operator>=(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m >= g.m;
|
return f.m >= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const Fix32& f, const Fix32& g)
|
inline int operator<=(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m <= g.m;
|
return f.m <= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const Fix32& f, const Fix32& g)
|
inline int operator>(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m > g.m;
|
return f.m > g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const Fix32& f, const Fix32& g)
|
inline int operator<(const Fix32& f, const Fix32& g)
|
||||||
{
|
{
|
||||||
return f.m < g.m;
|
return f.m < g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline istream& operator>>(istream& s, Fix32& f)
|
inline istream& operator>>(istream& s, Fix32& f)
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
s >> d;
|
s >> d;
|
||||||
f = d;
|
f = d;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ostream& operator<<(ostream& s, const Fix32& f)
|
inline ostream& operator<<(ostream& s, const Fix32& f)
|
||||||
{
|
{
|
||||||
return s << double(f);
|
return s << double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
|
written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
|
||||||
adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
|
adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
|
||||||
@ -26,7 +26,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#include <stream.h>
|
#include <stream.h>
|
||||||
#include <std.h>
|
#include <std.h>
|
||||||
|
|
||||||
// extra type definitions
|
// extra type definitions
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
_G_int32_t u;
|
_G_int32_t u;
|
||||||
@ -37,14 +37,14 @@ typedef struct {
|
|||||||
|
|
||||||
static const int
|
static const int
|
||||||
Fix24_shift = 31;
|
Fix24_shift = 31;
|
||||||
|
|
||||||
static const double
|
static const double
|
||||||
Fix24_fs = 2147483648., // 2^Fix24_shift
|
Fix24_fs = 2147483648., // 2^Fix24_shift
|
||||||
Fix24_mult = Fix24_fs,
|
Fix24_mult = Fix24_fs,
|
||||||
Fix24_div = 1./Fix24_fs,
|
Fix24_div = 1./Fix24_fs,
|
||||||
Fix24_max = 1. - .5/Fix24_fs,
|
Fix24_max = 1. - .5/Fix24_fs,
|
||||||
Fix24_min = -1.;
|
Fix24_min = -1.;
|
||||||
|
|
||||||
static const _G_uint32_t
|
static const _G_uint32_t
|
||||||
Fix24_msb = 0x80000000L,
|
Fix24_msb = 0x80000000L,
|
||||||
Fix24_lsb = 0x00000100L,
|
Fix24_lsb = 0x00000100L,
|
||||||
@ -57,21 +57,21 @@ static const double
|
|||||||
Fix48_min = -1.,
|
Fix48_min = -1.,
|
||||||
Fix48_div_u = 1./Fix24_fs,
|
Fix48_div_u = 1./Fix24_fs,
|
||||||
Fix48_div_l = 1./Fix48_fs;
|
Fix48_div_l = 1./Fix48_fs;
|
||||||
|
|
||||||
static const twolongs
|
static const twolongs
|
||||||
Fix48_msb = { 0x80000000L, 0L },
|
Fix48_msb = { 0x80000000L, 0L },
|
||||||
Fix48_lsb = { 0L, 0x00000100L },
|
Fix48_lsb = { 0L, 0x00000100L },
|
||||||
Fix48_m_max = { 0x7fffff00L, 0xffffff00L },
|
Fix48_m_max = { 0x7fffff00L, 0xffffff00L },
|
||||||
Fix48_m_min = { 0x80000000L, 0L };
|
Fix48_m_min = { 0x80000000L, 0L };
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fix24 class: 24-bit Fixed point data type
|
// Fix24 class: 24-bit Fixed point data type
|
||||||
//
|
//
|
||||||
// consists of a 24-bit mantissa (sign bit & 23 data bits).
|
// consists of a 24-bit mantissa (sign bit & 23 data bits).
|
||||||
//
|
//
|
||||||
|
|
||||||
class Fix24
|
class Fix24
|
||||||
{
|
{
|
||||||
friend class Fix48;
|
friend class Fix48;
|
||||||
|
|
||||||
_G_int32_t m;
|
_G_int32_t m;
|
||||||
@ -133,15 +133,15 @@ class Fix24
|
|||||||
void range_error(_G_int32_t&) const;
|
void range_error(_G_int32_t&) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fix48 class: 48-bit Fixed point data type
|
// Fix48 class: 48-bit Fixed point data type
|
||||||
//
|
//
|
||||||
// consists of a 48-bit mantissa (sign bit & 47 data bits).
|
// consists of a 48-bit mantissa (sign bit & 47 data bits).
|
||||||
//
|
//
|
||||||
|
|
||||||
class Fix48
|
class Fix48
|
||||||
{
|
{
|
||||||
friend class Fix24;
|
friend class Fix24;
|
||||||
|
|
||||||
twolongs m;
|
twolongs m;
|
||||||
@ -242,85 +242,85 @@ extern void
|
|||||||
|
|
||||||
inline Fix24::~Fix24() {}
|
inline Fix24::~Fix24() {}
|
||||||
|
|
||||||
inline Fix24::Fix24(long i)
|
inline Fix24::Fix24(long i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::Fix24(int i)
|
inline Fix24::Fix24(int i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::operator double() const
|
inline Fix24::operator double() const
|
||||||
{
|
{
|
||||||
return Fix24_div * m;
|
return Fix24_div * m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::Fix24()
|
inline Fix24::Fix24()
|
||||||
{
|
{
|
||||||
m = 0;
|
m = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::Fix24(const Fix24& f)
|
inline Fix24::Fix24(const Fix24& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::Fix24(double d)
|
inline Fix24::Fix24(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24::Fix24(const Fix48& f)
|
inline Fix24::Fix24(const Fix48& f)
|
||||||
{
|
{
|
||||||
m = f.m.u;
|
m = f.m.u;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24::operator=(const Fix24& f)
|
inline Fix24& Fix24::operator=(const Fix24& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24::operator=(double d)
|
inline Fix24& Fix24::operator=(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24::operator=(const Fix48& f)
|
inline Fix24& Fix24::operator=(const Fix48& f)
|
||||||
{
|
{
|
||||||
m = f.m.u;
|
m = f.m.u;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline _G_int32_t& mantissa(Fix24& f)
|
inline _G_int32_t& mantissa(Fix24& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const _G_int32_t& mantissa(const Fix24& f)
|
inline const _G_int32_t& mantissa(const Fix24& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double value(const Fix24& f)
|
inline double value(const Fix24& f)
|
||||||
{
|
{
|
||||||
return double(f);
|
return double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 Fix24::operator+() const
|
inline Fix24 Fix24::operator+() const
|
||||||
{
|
{
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 Fix24::operator-() const
|
inline Fix24 Fix24::operator-() const
|
||||||
{
|
{
|
||||||
return -m;
|
return -m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator+(const Fix24& f, const Fix24& g)
|
inline Fix24 operator+(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
_G_int32_t sum = f.m + g.m;
|
_G_int32_t sum = f.m + g.m;
|
||||||
if ( (f.m ^ sum) & (g.m ^ sum) & Fix24_msb )
|
if ( (f.m ^ sum) & (g.m ^ sum) & Fix24_msb )
|
||||||
@ -328,7 +328,7 @@ inline Fix24 operator+(const Fix24& f, const Fix24& g)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator-(const Fix24& f, const Fix24& g)
|
inline Fix24 operator-(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
_G_int32_t sum = f.m - g.m;
|
_G_int32_t sum = f.m - g.m;
|
||||||
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix24_msb )
|
if ( (f.m ^ sum) & (-g.m ^ sum) & Fix24_msb )
|
||||||
@ -336,23 +336,23 @@ inline Fix24 operator-(const Fix24& f, const Fix24& g)
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator*(const Fix24& a, int b)
|
inline Fix24 operator*(const Fix24& a, int b)
|
||||||
{
|
{
|
||||||
return a.m * b;
|
return a.m * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator*(int b, const Fix24& a)
|
inline Fix24 operator*(int b, const Fix24& a)
|
||||||
{
|
{
|
||||||
return a * b;
|
return a * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator<<(const Fix24& a, int b)
|
inline Fix24 operator<<(const Fix24& a, int b)
|
||||||
{
|
{
|
||||||
return a.m << b;
|
return a.m << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24 operator>>(const Fix24& a, int b)
|
inline Fix24 operator>>(const Fix24& a, int b)
|
||||||
{
|
{
|
||||||
return (a.m >> b) & ~0xff;
|
return (a.m >> b) & ~0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,236 +361,236 @@ inline Fix24& Fix24:: operator+=(const Fix24& f)
|
|||||||
return *this = *this + f;
|
return *this = *this + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24:: operator-=(const Fix24& f)
|
inline Fix24& Fix24:: operator-=(const Fix24& f)
|
||||||
{
|
{
|
||||||
return *this = *this - f;
|
return *this = *this - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24::operator*=(const Fix24& f)
|
inline Fix24& Fix24::operator*=(const Fix24& f)
|
||||||
{
|
{
|
||||||
return *this = *this * f;
|
return *this = *this * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24:: operator/=(const Fix24& f)
|
inline Fix24& Fix24:: operator/=(const Fix24& f)
|
||||||
{
|
{
|
||||||
return *this = *this / f;
|
return *this = *this / f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24:: operator<<=(int b)
|
inline Fix24& Fix24:: operator<<=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this << b;
|
return *this = *this << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24:: operator>>=(int b)
|
inline Fix24& Fix24:: operator>>=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this >> b;
|
return *this = *this >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix24& Fix24::operator*=(int b)
|
inline Fix24& Fix24::operator*=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this * b;
|
return *this = *this * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const Fix24& f, const Fix24& g)
|
inline int operator==(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m == g.m;
|
return f.m == g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const Fix24& f, const Fix24& g)
|
inline int operator!=(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m != g.m;
|
return f.m != g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const Fix24& f, const Fix24& g)
|
inline int operator>=(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m >= g.m;
|
return f.m >= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const Fix24& f, const Fix24& g)
|
inline int operator<=(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m <= g.m;
|
return f.m <= g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const Fix24& f, const Fix24& g)
|
inline int operator>(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m > g.m;
|
return f.m > g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const Fix24& f, const Fix24& g)
|
inline int operator<(const Fix24& f, const Fix24& g)
|
||||||
{
|
{
|
||||||
return f.m < g.m;
|
return f.m < g.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline istream& operator>>(istream& s, Fix24& f)
|
inline istream& operator>>(istream& s, Fix24& f)
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
s >> d;
|
s >> d;
|
||||||
f = d;
|
f = d;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ostream& operator<<(ostream& s, const Fix24& f)
|
inline ostream& operator<<(ostream& s, const Fix24& f)
|
||||||
{
|
{
|
||||||
return s << double(f);
|
return s << double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48::~Fix48() {}
|
inline Fix48::~Fix48() {}
|
||||||
|
|
||||||
inline Fix48::Fix48(twolongs i)
|
inline Fix48::Fix48(twolongs i)
|
||||||
{
|
{
|
||||||
m = i;
|
m = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48:: operator double() const
|
inline Fix48:: operator double() const
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Note: can't simply do Fix48_div_u * m.u + Fix48_div_l * m.l, because
|
* Note: can't simply do Fix48_div_u * m.u + Fix48_div_l * m.l, because
|
||||||
* m.u is signed and m.l is unsigned.
|
* m.u is signed and m.l is unsigned.
|
||||||
*/
|
*/
|
||||||
return (m.u >= 0)? Fix48_div_u * m.u + Fix48_div_l * m.l :
|
return (m.u >= 0)? Fix48_div_u * m.u + Fix48_div_l * m.l :
|
||||||
(Fix48_div_u * ((_G_uint32_t)(m.u & 0xffffff00))
|
(Fix48_div_u * ((_G_uint32_t)(m.u & 0xffffff00))
|
||||||
+ Fix48_div_l * m.l) - 2;
|
+ Fix48_div_l * m.l) - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48::Fix48()
|
inline Fix48::Fix48()
|
||||||
{
|
{
|
||||||
m.u = 0;
|
m.u = 0;
|
||||||
m.l = 0;
|
m.l = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48::Fix48(const Fix48& f)
|
inline Fix48::Fix48(const Fix48& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48::Fix48(const Fix24& f)
|
inline Fix48::Fix48(const Fix24& f)
|
||||||
{
|
{
|
||||||
m.u = f.m;
|
m.u = f.m;
|
||||||
m.l = 0;
|
m.l = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48::Fix48(double d)
|
inline Fix48::Fix48(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator=(const Fix48& f)
|
inline Fix48& Fix48::operator=(const Fix48& f)
|
||||||
{
|
{
|
||||||
m = f.m;
|
m = f.m;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator=(const Fix24& f)
|
inline Fix48& Fix48::operator=(const Fix24& f)
|
||||||
{
|
{
|
||||||
m.u = f.m;
|
m.u = f.m;
|
||||||
m.l = 0;
|
m.l = 0;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator=(double d)
|
inline Fix48& Fix48::operator=(double d)
|
||||||
{
|
{
|
||||||
m = assign(d);
|
m = assign(d);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline twolongs& mantissa(Fix48& f)
|
inline twolongs& mantissa(Fix48& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const twolongs& mantissa(const Fix48& f)
|
inline const twolongs& mantissa(const Fix48& f)
|
||||||
{
|
{
|
||||||
return f.m;
|
return f.m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double value(const Fix48& f)
|
inline double value(const Fix48& f)
|
||||||
{
|
{
|
||||||
return double(f);
|
return double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48 Fix48::operator+() const
|
inline Fix48 Fix48::operator+() const
|
||||||
{
|
{
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48 Fix48::operator-() const
|
inline Fix48 Fix48::operator-() const
|
||||||
{
|
{
|
||||||
twolongs n;
|
twolongs n;
|
||||||
n.l = -m.l;
|
n.l = -m.l;
|
||||||
n.u = ~m.u + ((n.l ^ m.l) & Fix24_msb ? 0 : Fix24_lsb);
|
n.u = ~m.u + ((n.l ^ m.l) & Fix24_msb ? 0 : Fix24_lsb);
|
||||||
return Fix48(n);
|
return Fix48(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48 operator*(int b, const Fix48& a)
|
inline Fix48 operator*(int b, const Fix48& a)
|
||||||
{
|
{
|
||||||
return a * b;
|
return a * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator+=(const Fix48& f)
|
inline Fix48& Fix48::operator+=(const Fix48& f)
|
||||||
{
|
{
|
||||||
return *this = *this + f;
|
return *this = *this + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator-=(const Fix48& f)
|
inline Fix48& Fix48::operator-=(const Fix48& f)
|
||||||
{
|
{
|
||||||
return *this = *this - f;
|
return *this = *this - f;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator*=(int b)
|
inline Fix48& Fix48::operator*=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this * b;
|
return *this = *this * b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator<<=(int b)
|
inline Fix48& Fix48::operator<<=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this << b;
|
return *this = *this << b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Fix48& Fix48::operator>>=(int b)
|
inline Fix48& Fix48::operator>>=(int b)
|
||||||
{
|
{
|
||||||
return *this = *this >> b;
|
return *this = *this >> b;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const Fix48& f, const Fix48& g)
|
inline int operator==(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u == g.m.u && f.m.l == g.m.l;
|
return f.m.u == g.m.u && f.m.l == g.m.l;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const Fix48& f, const Fix48& g)
|
inline int operator!=(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u != g.m.u || f.m.l != g.m.l;
|
return f.m.u != g.m.u || f.m.l != g.m.l;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const Fix48& f, const Fix48& g)
|
inline int operator>=(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u >= g.m.u || (f.m.u == g.m.u && f.m.l >= g.m.l);
|
return f.m.u >= g.m.u || (f.m.u == g.m.u && f.m.l >= g.m.l);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const Fix48& f, const Fix48& g)
|
inline int operator<=(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u <= g.m.u || (f.m.u == g.m.u && f.m.l <= g.m.l);
|
return f.m.u <= g.m.u || (f.m.u == g.m.u && f.m.l <= g.m.l);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const Fix48& f, const Fix48& g)
|
inline int operator>(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u > g.m.u || (f.m.u == g.m.u && f.m.l > g.m.l);
|
return f.m.u > g.m.u || (f.m.u == g.m.u && f.m.l > g.m.l);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const Fix48& f, const Fix48& g)
|
inline int operator<(const Fix48& f, const Fix48& g)
|
||||||
{
|
{
|
||||||
return f.m.u < g.m.u || (f.m.u == g.m.u && f.m.l < g.m.l);
|
return f.m.u < g.m.u || (f.m.u == g.m.u && f.m.l < g.m.l);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline istream& operator>>(istream& s, Fix48& f)
|
inline istream& operator>>(istream& s, Fix48& f)
|
||||||
{
|
{
|
||||||
double d;
|
double d;
|
||||||
s >> d;
|
s >> d;
|
||||||
f = d;
|
f = d;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ostream& operator<<(ostream& s, const Fix48& f)
|
inline ostream& operator<<(ostream& s, const Fix48& f)
|
||||||
{
|
{
|
||||||
return s << double(f);
|
return s << double(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _Geometric_h
|
#define _Geometric_h
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Getopt for GNU.
|
/* Getopt for GNU.
|
||||||
Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
|
Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
|
||||||
(Modified by Douglas C. Schmidt for use with GNU G++.)
|
(Modified by Douglas C. Schmidt for use with GNU G++.)
|
||||||
|
|
||||||
@ -45,51 +45,51 @@ class GetOpt
|
|||||||
/* The next char to be scanned in the option-element
|
/* The next char to be scanned in the option-element
|
||||||
in which the last option character we returned was found.
|
in which the last option character we returned was found.
|
||||||
This allows us to pick up the scan where we left off.
|
This allows us to pick up the scan where we left off.
|
||||||
|
|
||||||
If this is zero, or a null string, it means resume the scan
|
If this is zero, or a null string, it means resume the scan
|
||||||
by advancing to the next ARGV-element. */
|
by advancing to the next ARGV-element. */
|
||||||
|
|
||||||
static char *nextchar;
|
static char *nextchar;
|
||||||
|
|
||||||
|
|
||||||
/* Describe how to deal with options that follow non-option ARGV-elements.
|
/* Describe how to deal with options that follow non-option ARGV-elements.
|
||||||
|
|
||||||
UNSPECIFIED means the caller did not specify anything;
|
UNSPECIFIED means the caller did not specify anything;
|
||||||
the default is then REQUIRE_ORDER if the environment variable
|
the default is then REQUIRE_ORDER if the environment variable
|
||||||
_OPTIONS_FIRST is defined, PERMUTE otherwise.
|
_OPTIONS_FIRST is defined, PERMUTE otherwise.
|
||||||
|
|
||||||
REQUIRE_ORDER means don't recognize them as options.
|
REQUIRE_ORDER means don't recognize them as options.
|
||||||
Stop option processing when the first non-option is seen.
|
Stop option processing when the first non-option is seen.
|
||||||
This is what Unix does.
|
This is what Unix does.
|
||||||
|
|
||||||
PERMUTE is the default. We permute the contents of `argv' as we scan,
|
PERMUTE is the default. We permute the contents of `argv' as we scan,
|
||||||
so that eventually all the options are at the end. This allows options
|
so that eventually all the options are at the end. This allows options
|
||||||
to be given in any order, even with programs that were not written to
|
to be given in any order, even with programs that were not written to
|
||||||
expect this.
|
expect this.
|
||||||
|
|
||||||
RETURN_IN_ORDER is an option available to programs that were written
|
RETURN_IN_ORDER is an option available to programs that were written
|
||||||
to expect options and other ARGV-elements in any order and that care about
|
to expect options and other ARGV-elements in any order and that care about
|
||||||
the ordering of the two. We describe each non-option ARGV-element
|
the ordering of the two. We describe each non-option ARGV-element
|
||||||
as if it were the argument of an option with character code zero.
|
as if it were the argument of an option with character code zero.
|
||||||
Using `-' as the first character of the list of option characters
|
Using `-' as the first character of the list of option characters
|
||||||
requests this mode of operation.
|
requests this mode of operation.
|
||||||
|
|
||||||
The special argument `--' forces an end of option-scanning regardless
|
The special argument `--' forces an end of option-scanning regardless
|
||||||
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
|
of the value of `ordering'. In the case of RETURN_IN_ORDER, only
|
||||||
`--' can cause `getopt' to return EOF with `optind' != ARGC. */
|
`--' can cause `getopt' to return EOF with `optind' != ARGC. */
|
||||||
|
|
||||||
enum OrderingEnum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };
|
enum OrderingEnum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };
|
||||||
OrderingEnum ordering;
|
OrderingEnum ordering;
|
||||||
|
|
||||||
/* Handle permutation of arguments. */
|
/* Handle permutation of arguments. */
|
||||||
|
|
||||||
/* Describe the part of ARGV that contains non-options that have
|
/* Describe the part of ARGV that contains non-options that have
|
||||||
been skipped. `first_nonopt' is the index in ARGV of the first of them;
|
been skipped. `first_nonopt' is the index in ARGV of the first of them;
|
||||||
`last_nonopt' is the index after the last of them. */
|
`last_nonopt' is the index after the last of them. */
|
||||||
|
|
||||||
static int first_nonopt;
|
static int first_nonopt;
|
||||||
static int last_nonopt;
|
static int last_nonopt;
|
||||||
|
|
||||||
void exchange (char **argv);
|
void exchange (char **argv);
|
||||||
public:
|
public:
|
||||||
/* For communication from `getopt' to the caller.
|
/* For communication from `getopt' to the caller.
|
||||||
@ -97,31 +97,31 @@ class GetOpt
|
|||||||
the argument value is returned here.
|
the argument value is returned here.
|
||||||
Also, when `ordering' is RETURN_IN_ORDER,
|
Also, when `ordering' is RETURN_IN_ORDER,
|
||||||
each non-option ARGV-element is returned here. */
|
each non-option ARGV-element is returned here. */
|
||||||
|
|
||||||
char *optarg;
|
char *optarg;
|
||||||
|
|
||||||
/* Index in ARGV of the next element to be scanned.
|
/* Index in ARGV of the next element to be scanned.
|
||||||
This is used for communication to and from the caller
|
This is used for communication to and from the caller
|
||||||
and for communication between successive calls to `getopt'.
|
and for communication between successive calls to `getopt'.
|
||||||
On entry to `getopt', zero means this is the first call; initialize.
|
On entry to `getopt', zero means this is the first call; initialize.
|
||||||
|
|
||||||
When `getopt' returns EOF, this is the index of the first of the
|
When `getopt' returns EOF, this is the index of the first of the
|
||||||
non-option elements that the caller should itself scan.
|
non-option elements that the caller should itself scan.
|
||||||
|
|
||||||
Otherwise, `optind' communicates from one call to the next
|
Otherwise, `optind' communicates from one call to the next
|
||||||
how much of ARGV has been scanned so far. */
|
how much of ARGV has been scanned so far. */
|
||||||
|
|
||||||
int optind;
|
int optind;
|
||||||
|
|
||||||
/* Callers store zero here to inhibit the error message
|
/* Callers store zero here to inhibit the error message
|
||||||
for unrecognized options. */
|
for unrecognized options. */
|
||||||
|
|
||||||
int opterr;
|
int opterr;
|
||||||
|
|
||||||
int nargc;
|
int nargc;
|
||||||
char **nargv;
|
char **nargv;
|
||||||
const char *noptstring;
|
const char *noptstring;
|
||||||
|
|
||||||
GetOpt (int argc, char **argv, const char *optstring);
|
GetOpt (int argc, char **argv, const char *optstring);
|
||||||
int operator () (void);
|
int operator () (void);
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _HyperGeometric_h
|
#define _HyperGeometric_h
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ struct IntRep // internal Integer representations
|
|||||||
{
|
{
|
||||||
unsigned short len; // current length
|
unsigned short len; // current length
|
||||||
unsigned short sz; // allocated space (0 means static).
|
unsigned short sz; // allocated space (0 means static).
|
||||||
short sgn; // 1 means >= 0; 0 means < 0
|
short sgn; // 1 means >= 0; 0 means < 0
|
||||||
unsigned short s[1]; // represented as ushort array starting here
|
unsigned short s[1]; // represented as ushort array starting here
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ extern int ucompare(const IntRep*, const IntRep*);
|
|||||||
extern int ucompare(const IntRep*, long);
|
extern int ucompare(const IntRep*, long);
|
||||||
extern char* Itoa(const IntRep* x, int base = 10, int width = 0);
|
extern char* Itoa(const IntRep* x, int base = 10, int width = 0);
|
||||||
extern char* cvtItoa(const IntRep* x, char* fmt, int& fmtlen, int base,
|
extern char* cvtItoa(const IntRep* x, char* fmt, int& fmtlen, int base,
|
||||||
int showbase, int width, int align_right,
|
int showbase, int width, int align_right,
|
||||||
char fillchar, char Xcase, int showpos);
|
char fillchar, char Xcase, int showpos);
|
||||||
extern IntRep* atoIntRep(const char* s, int base = 10);
|
extern IntRep* atoIntRep(const char* s, int base = 10);
|
||||||
extern long Itolong(const IntRep*);
|
extern long Itolong(const IntRep*);
|
||||||
@ -152,14 +152,14 @@ class Integer
|
|||||||
friend void negate(const Integer& x, Integer& dest);
|
friend void negate(const Integer& x, Integer& dest);
|
||||||
friend void complement(const Integer& x, Integer& dest);
|
friend void complement(const Integer& x, Integer& dest);
|
||||||
|
|
||||||
friend int compare(const Integer&, const Integer&);
|
friend int compare(const Integer&, const Integer&);
|
||||||
friend int ucompare(const Integer&, const Integer&);
|
friend int ucompare(const Integer&, const Integer&);
|
||||||
friend void add(const Integer& x, const Integer& y, Integer& dest);
|
friend void add(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void sub(const Integer& x, const Integer& y, Integer& dest);
|
friend void sub(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void mul(const Integer& x, const Integer& y, Integer& dest);
|
friend void mul(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void div(const Integer& x, const Integer& y, Integer& dest);
|
friend void div(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void mod(const Integer& x, const Integer& y, Integer& dest);
|
friend void mod(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void divide(const Integer& x, const Integer& y,
|
friend void divide(const Integer& x, const Integer& y,
|
||||||
Integer& q, Integer& r);
|
Integer& q, Integer& r);
|
||||||
friend void and(const Integer& x, const Integer& y, Integer& dest);
|
friend void and(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void or(const Integer& x, const Integer& y, Integer& dest);
|
friend void or(const Integer& x, const Integer& y, Integer& dest);
|
||||||
@ -168,8 +168,8 @@ class Integer
|
|||||||
friend void rshift(const Integer& x, const Integer& y, Integer& dest);
|
friend void rshift(const Integer& x, const Integer& y, Integer& dest);
|
||||||
friend void pow(const Integer& x, const Integer& y, Integer& dest);
|
friend void pow(const Integer& x, const Integer& y, Integer& dest);
|
||||||
|
|
||||||
friend int compare(const Integer&, long);
|
friend int compare(const Integer&, long);
|
||||||
friend int ucompare(const Integer&, long);
|
friend int ucompare(const Integer&, long);
|
||||||
friend void add(const Integer& x, long y, Integer& dest);
|
friend void add(const Integer& x, long y, Integer& dest);
|
||||||
friend void sub(const Integer& x, long y, Integer& dest);
|
friend void sub(const Integer& x, long y, Integer& dest);
|
||||||
friend void mul(const Integer& x, long y, Integer& dest);
|
friend void mul(const Integer& x, long y, Integer& dest);
|
||||||
@ -183,8 +183,8 @@ class Integer
|
|||||||
friend void rshift(const Integer& x, long y, Integer& dest);
|
friend void rshift(const Integer& x, long y, Integer& dest);
|
||||||
friend void pow(const Integer& x, long y, Integer& dest);
|
friend void pow(const Integer& x, long y, Integer& dest);
|
||||||
|
|
||||||
friend int compare(long, const Integer&);
|
friend int compare(long, const Integer&);
|
||||||
friend int ucompare(long, const Integer&);
|
friend int ucompare(long, const Integer&);
|
||||||
friend void add(long x, const Integer& y, Integer& dest);
|
friend void add(long x, const Integer& y, Integer& dest);
|
||||||
friend void sub(long x, const Integer& y, Integer& dest);
|
friend void sub(long x, const Integer& y, Integer& dest);
|
||||||
friend void mul(long x, const Integer& y, Integer& dest);
|
friend void mul(long x, const Integer& y, Integer& dest);
|
||||||
@ -203,7 +203,7 @@ class Integer
|
|||||||
friend char* Itoa(const Integer& x, int base = 10, int width = 0);
|
friend char* Itoa(const Integer& x, int base = 10, int width = 0);
|
||||||
friend Integer atoI(const char* s, int base = 10);
|
friend Integer atoI(const char* s, int base = 10);
|
||||||
void printon(ostream& s, int base = 10, int width = 0) const;
|
void printon(ostream& s, int base = 10, int width = 0) const;
|
||||||
|
|
||||||
friend istream& operator >> (istream& s, Integer& y);
|
friend istream& operator >> (istream& s, Integer& y);
|
||||||
friend ostream& operator << (ostream& s, const Integer& y);
|
friend ostream& operator << (ostream& s, const Integer& y);
|
||||||
|
|
||||||
@ -211,7 +211,7 @@ class Integer
|
|||||||
|
|
||||||
int initialized() const;
|
int initialized() const;
|
||||||
void error(const char* msg) const;
|
void error(const char* msg) const;
|
||||||
int OK() const;
|
int OK() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ class Integer
|
|||||||
|
|
||||||
Integer pow(const Integer& x, const Integer& y);
|
Integer pow(const Integer& x, const Integer& y);
|
||||||
Integer pow(const Integer& x, long y);
|
Integer pow(const Integer& x, long y);
|
||||||
Integer Ipow(long x, long y); // x to the y as Integer
|
Integer Ipow(long x, long y); // x to the y as Integer
|
||||||
|
|
||||||
|
|
||||||
extern char* dec(const Integer& x, int width = 0);
|
extern char* dec(const Integer& x, int width = 0);
|
||||||
@ -498,62 +498,62 @@ inline void xor(long x, const Integer& y, Integer& dest)
|
|||||||
|
|
||||||
inline int operator == (const Integer& x, const Integer& y)
|
inline int operator == (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) == 0;
|
return compare(x, y) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator == (const Integer& x, long y)
|
inline int operator == (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) == 0;
|
return compare(x, y) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator != (const Integer& x, const Integer& y)
|
inline int operator != (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) != 0;
|
return compare(x, y) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator != (const Integer& x, long y)
|
inline int operator != (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) != 0;
|
return compare(x, y) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator < (const Integer& x, const Integer& y)
|
inline int operator < (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator < (const Integer& x, long y)
|
inline int operator < (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator <= (const Integer& x, const Integer& y)
|
inline int operator <= (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator <= (const Integer& x, long y)
|
inline int operator <= (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator > (const Integer& x, const Integer& y)
|
inline int operator > (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator > (const Integer& x, long y)
|
inline int operator > (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator >= (const Integer& x, const Integer& y)
|
inline int operator >= (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator >= (const Integer& x, long y)
|
inline int operator >= (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -738,12 +738,12 @@ inline char* Itoa(const Integer& y, int base, int width)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline long lg(const Integer& x)
|
inline long lg(const Integer& x)
|
||||||
{
|
{
|
||||||
return lg(x.rep);
|
return lg(x.rep);
|
||||||
}
|
}
|
||||||
|
|
||||||
// constructive operations
|
// constructive operations
|
||||||
|
|
||||||
#if defined(__GNUG__) && !defined(_G_NO_NRV)
|
#if defined(__GNUG__) && !defined(_G_NO_NRV)
|
||||||
|
|
||||||
@ -926,179 +926,179 @@ inline Integer gcd(const Integer& x, const Integer& y) return r
|
|||||||
|
|
||||||
#else /* NO_NRV */
|
#else /* NO_NRV */
|
||||||
|
|
||||||
inline Integer operator + (const Integer& x, const Integer& y)
|
inline Integer operator + (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; add(x, y, r); return r;
|
Integer r; add(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator + (const Integer& x, long y)
|
inline Integer operator + (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; add(x, y, r); return r;
|
Integer r; add(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator + (long x, const Integer& y)
|
inline Integer operator + (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; add(x, y, r); return r;
|
Integer r; add(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator - (const Integer& x, const Integer& y)
|
inline Integer operator - (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; sub(x, y, r); return r;
|
Integer r; sub(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator - (const Integer& x, long y)
|
inline Integer operator - (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; sub(x, y, r); return r;
|
Integer r; sub(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator - (long x, const Integer& y)
|
inline Integer operator - (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; sub(x, y, r); return r;
|
Integer r; sub(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator * (const Integer& x, const Integer& y)
|
inline Integer operator * (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; mul(x, y, r); return r;
|
Integer r; mul(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator * (const Integer& x, long y)
|
inline Integer operator * (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; mul(x, y, r); return r;
|
Integer r; mul(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator * (long x, const Integer& y)
|
inline Integer operator * (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; mul(x, y, r); return r;
|
Integer r; mul(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer sqr(const Integer& x)
|
inline Integer sqr(const Integer& x)
|
||||||
{
|
{
|
||||||
Integer r; mul(x, x, r); return r;
|
Integer r; mul(x, x, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator & (const Integer& x, const Integer& y)
|
inline Integer operator & (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; and(x, y, r); return r;
|
Integer r; and(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator & (const Integer& x, long y)
|
inline Integer operator & (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; and(x, y, r); return r;
|
Integer r; and(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator & (long x, const Integer& y)
|
inline Integer operator & (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; and(x, y, r); return r;
|
Integer r; and(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator | (const Integer& x, const Integer& y)
|
inline Integer operator | (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; or(x, y, r); return r;
|
Integer r; or(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator | (const Integer& x, long y)
|
inline Integer operator | (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; or(x, y, r); return r;
|
Integer r; or(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator | (long x, const Integer& y)
|
inline Integer operator | (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; or(x, y, r); return r;
|
Integer r; or(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator ^ (const Integer& x, const Integer& y)
|
inline Integer operator ^ (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; xor(x, y, r); return r;
|
Integer r; xor(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator ^ (const Integer& x, long y)
|
inline Integer operator ^ (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; xor(x, y, r); return r;
|
Integer r; xor(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator ^ (long x, const Integer& y)
|
inline Integer operator ^ (long x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; xor(x, y, r); return r;
|
Integer r; xor(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator / (const Integer& x, const Integer& y)
|
inline Integer operator / (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; div(x, y, r); return r;
|
Integer r; div(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator / (const Integer& x, long y)
|
inline Integer operator / (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; div(x, y, r); return r;
|
Integer r; div(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator % (const Integer& x, const Integer& y)
|
inline Integer operator % (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; mod(x, y, r); return r;
|
Integer r; mod(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator % (const Integer& x, long y)
|
inline Integer operator % (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; mod(x, y, r); return r;
|
Integer r; mod(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator << (const Integer& x, const Integer& y)
|
inline Integer operator << (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; lshift(x, y, r); return r;
|
Integer r; lshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator << (const Integer& x, long y)
|
inline Integer operator << (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; lshift(x, y, r); return r;
|
Integer r; lshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator >> (const Integer& x, const Integer& y)
|
inline Integer operator >> (const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; rshift(x, y, r); return r;
|
Integer r; rshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator >> (const Integer& x, long y)
|
inline Integer operator >> (const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; rshift(x, y, r); return r;
|
Integer r; rshift(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer pow(const Integer& x, long y)
|
inline Integer pow(const Integer& x, long y)
|
||||||
{
|
{
|
||||||
Integer r; pow(x, y, r); return r;
|
Integer r; pow(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer Ipow(long x, long y)
|
inline Integer Ipow(long x, long y)
|
||||||
{
|
{
|
||||||
Integer r(x); pow(r, y, r); return r;
|
Integer r(x); pow(r, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer pow(const Integer& x, const Integer& y)
|
inline Integer pow(const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; pow(x, y, r); return r;
|
Integer r; pow(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline Integer abs(const Integer& x)
|
inline Integer abs(const Integer& x)
|
||||||
{
|
{
|
||||||
Integer r; abs(x, r); return r;
|
Integer r; abs(x, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator - (const Integer& x)
|
inline Integer operator - (const Integer& x)
|
||||||
{
|
{
|
||||||
Integer r; negate(x, r); return r;
|
Integer r; negate(x, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer operator ~ (const Integer& x)
|
inline Integer operator ~ (const Integer& x)
|
||||||
{
|
{
|
||||||
Integer r; complement(x, r); return r;
|
Integer r; complement(x, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer atoI(const char* s, int base)
|
inline Integer atoI(const char* s, int base)
|
||||||
{
|
{
|
||||||
Integer r; r.rep = atoIntRep(s, base); return r;
|
Integer r; r.rep = atoIntRep(s, base); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Integer gcd(const Integer& x, const Integer& y)
|
inline Integer gcd(const Integer& x, const Integer& y)
|
||||||
{
|
{
|
||||||
Integer r; r.rep = gcd(x.rep, y.rep); return r;
|
Integer r; r.rep = gcd(x.rep, y.rep); return r;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _LogNormal_h
|
#define _LogNormal_h
|
||||||
|
|
||||||
#include <Normal.h>
|
#include <Normal.h>
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ inline void LogNormal::setState()
|
|||||||
pMean = log(m2 / sqrt(logVariance + m2) );
|
pMean = log(m2 / sqrt(logVariance + m2) );
|
||||||
// from ch@heike.informatik.uni-dortmund.de:
|
// from ch@heike.informatik.uni-dortmund.de:
|
||||||
// (was pVariance = log((sqrt(logVariance + m2)/m2 )); )
|
// (was pVariance = log((sqrt(logVariance + m2)/m2 )); )
|
||||||
pStdDev = sqrt(log((logVariance + m2)/m2 ));
|
pStdDev = sqrt(log((logVariance + m2)/m2 ));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline LogNormal::LogNormal(double mean, double variance, RNG *gen)
|
inline LogNormal::LogNormal(double mean, double variance, RNG *gen)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ License along with this library; if not, write to the Free Software
|
|||||||
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
#ifndef _MLCG_h
|
#ifndef _MLCG_h
|
||||||
#define _MLCG_h 1
|
#define _MLCG_h 1
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
//
|
//
|
||||||
// Negative Exponential Random Numbers
|
// Negative Exponential Random Numbers
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _Normal_h
|
#define _Normal_h
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ class Normal: public Random {
|
|||||||
double pMean;
|
double pMean;
|
||||||
double pVariance;
|
double pVariance;
|
||||||
double pStdDev;
|
double pStdDev;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Normal(double xmean, double xvariance, RNG *gen);
|
Normal(double xmean, double xvariance, RNG *gen);
|
||||||
double mean();
|
double mean();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -84,127 +84,127 @@ class Obstack
|
|||||||
|
|
||||||
inline Obstack::~Obstack()
|
inline Obstack::~Obstack()
|
||||||
{
|
{
|
||||||
_free(0);
|
_free(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::base()
|
inline void* Obstack::base()
|
||||||
{
|
{
|
||||||
return objectbase;
|
return objectbase;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::next_free()
|
inline void* Obstack::next_free()
|
||||||
{
|
{
|
||||||
return nextfree;
|
return nextfree;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Obstack::alignment_mask()
|
inline int Obstack::alignment_mask()
|
||||||
{
|
{
|
||||||
return alignmentmask;
|
return alignmentmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Obstack::chunk_size()
|
inline int Obstack::chunk_size()
|
||||||
{
|
{
|
||||||
return chunksize;
|
return chunksize;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Obstack::size()
|
inline int Obstack::size()
|
||||||
{
|
{
|
||||||
return nextfree - objectbase;
|
return nextfree - objectbase;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int Obstack::room()
|
inline int Obstack::room()
|
||||||
{
|
{
|
||||||
return chunklimit - nextfree;
|
return chunklimit - nextfree;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: grow(const void* data, int size)
|
inline void Obstack:: grow(const void* data, int size)
|
||||||
{
|
{
|
||||||
if (nextfree+size > chunklimit)
|
if (nextfree+size > chunklimit)
|
||||||
newchunk(size);
|
newchunk(size);
|
||||||
memcpy(nextfree, data, size);
|
memcpy(nextfree, data, size);
|
||||||
nextfree += size;
|
nextfree += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: grow(const void* data, int size, char terminator)
|
inline void Obstack:: grow(const void* data, int size, char terminator)
|
||||||
{
|
{
|
||||||
if (nextfree+size+1 > chunklimit)
|
if (nextfree+size+1 > chunklimit)
|
||||||
newchunk(size+1);
|
newchunk(size+1);
|
||||||
memcpy(nextfree, data, size);
|
memcpy(nextfree, data, size);
|
||||||
nextfree += size;
|
nextfree += size;
|
||||||
*(nextfree)++ = terminator;
|
*(nextfree)++ = terminator;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: grow(const char* s)
|
inline void Obstack:: grow(const char* s)
|
||||||
{
|
{
|
||||||
grow((const void*)s, strlen(s), 0);
|
grow((const void*)s, strlen(s), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: grow(char c)
|
inline void Obstack:: grow(char c)
|
||||||
{
|
{
|
||||||
if (nextfree+1 > chunklimit)
|
if (nextfree+1 > chunklimit)
|
||||||
newchunk(1);
|
newchunk(1);
|
||||||
*(nextfree)++ = c;
|
*(nextfree)++ = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: blank(int size)
|
inline void Obstack:: blank(int size)
|
||||||
{
|
{
|
||||||
if (nextfree+size > chunklimit)
|
if (nextfree+size > chunklimit)
|
||||||
newchunk(size);
|
newchunk(size);
|
||||||
nextfree += size;
|
nextfree += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::finish(char terminator)
|
inline void* Obstack::finish(char terminator)
|
||||||
{
|
{
|
||||||
grow(terminator);
|
grow(terminator);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::copy(const void* data, int size)
|
inline void* Obstack::copy(const void* data, int size)
|
||||||
{
|
{
|
||||||
grow (data, size);
|
grow (data, size);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::copy(const void* data, int size, char terminator)
|
inline void* Obstack::copy(const void* data, int size, char terminator)
|
||||||
{
|
{
|
||||||
grow(data, size, terminator);
|
grow(data, size, terminator);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::copy(const char* s)
|
inline void* Obstack::copy(const char* s)
|
||||||
{
|
{
|
||||||
grow((const void*)s, strlen(s), 0);
|
grow((const void*)s, strlen(s), 0);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::copy(char c)
|
inline void* Obstack::copy(char c)
|
||||||
{
|
{
|
||||||
grow(c);
|
grow(c);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void* Obstack::alloc(int size)
|
inline void* Obstack::alloc(int size)
|
||||||
{
|
{
|
||||||
blank(size);
|
blank(size);
|
||||||
return finish();
|
return finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: free(void* obj)
|
inline void Obstack:: free(void* obj)
|
||||||
{
|
{
|
||||||
if (obj >= (void*)chunk && obj<(void*)chunklimit)
|
if (obj >= (void*)chunk && obj<(void*)chunklimit)
|
||||||
nextfree = objectbase = (char *) obj;
|
nextfree = objectbase = (char *) obj;
|
||||||
else
|
else
|
||||||
_free(obj);
|
_free(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: grow_fast(char c)
|
inline void Obstack:: grow_fast(char c)
|
||||||
{
|
{
|
||||||
*(nextfree)++ = c;
|
*(nextfree)++ = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: blank_fast(int size)
|
inline void Obstack:: blank_fast(int size)
|
||||||
{
|
{
|
||||||
nextfree += size;
|
nextfree += size;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void Obstack:: shrink(int size) // from ken@cs.rochester.edu
|
inline void Obstack:: shrink(int size) // from ken@cs.rochester.edu
|
||||||
|
@ -22,10 +22,10 @@ the resulting executable to be covered by the GNU General Public License.
|
|||||||
This exception does not however invalidate any other reasons why
|
This exception does not however invalidate any other reasons why
|
||||||
the executable file might be covered by the GNU General Public License. */
|
the executable file might be covered by the GNU General Public License. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
a very simple implementation of a class to output unix "plot"
|
a very simple implementation of a class to output unix "plot"
|
||||||
format plotter files. See corresponding unix man pages for
|
format plotter files. See corresponding unix man pages for
|
||||||
more details.
|
more details.
|
||||||
|
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
converted to use iostream library by Per Bothner (bothner@cygnus.com)
|
converted to use iostream library by Per Bothner (bothner@cygnus.com)
|
||||||
@ -39,7 +39,7 @@ the executable file might be covered by the GNU General Public License. */
|
|||||||
|
|
||||||
#include <fstream.h>
|
#include <fstream.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Some plot libraries have the `box' command to draw boxes. Some don't.
|
Some plot libraries have the `box' command to draw boxes. Some don't.
|
||||||
`box' is included here via moves & lines to allow both possiblilties.
|
`box' is included here via moves & lines to allow both possiblilties.
|
||||||
*/
|
*/
|
||||||
@ -51,21 +51,21 @@ class PlotFile : public ofstream
|
|||||||
PlotFile& cmd(char c);
|
PlotFile& cmd(char c);
|
||||||
PlotFile& operator << (const int x);
|
PlotFile& operator << (const int x);
|
||||||
PlotFile& operator << (const char *s);
|
PlotFile& operator << (const char *s);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
PlotFile() : ofstream() { }
|
PlotFile() : ofstream() { }
|
||||||
PlotFile(int fd) : ofstream(fd) { }
|
PlotFile(int fd) : ofstream(fd) { }
|
||||||
PlotFile(const char *name, int mode=ios::out, int prot=0664)
|
PlotFile(const char *name, int mode=ios::out, int prot=0664)
|
||||||
: ofstream(name, mode, prot) { }
|
: ofstream(name, mode, prot) { }
|
||||||
|
|
||||||
// PlotFile& remove() { ofstream::remove(); return *this; }
|
// PlotFile& remove() { ofstream::remove(); return *this; }
|
||||||
|
|
||||||
// int filedesc() { return ofstream::filedesc(); }
|
// int filedesc() { return ofstream::filedesc(); }
|
||||||
// const char* name() { return File::name(); }
|
// const char* name() { return File::name(); }
|
||||||
// void setname(const char* newname) { File::setname(newname); }
|
// void setname(const char* newname) { File::setname(newname); }
|
||||||
// int iocount() { return File::iocount(); }
|
// int iocount() { return File::iocount(); }
|
||||||
|
|
||||||
PlotFile& arc(const int xi, const int yi,
|
PlotFile& arc(const int xi, const int yi,
|
||||||
const int x0, const int y0,
|
const int x0, const int y0,
|
||||||
const int x1, const int y1);
|
const int x1, const int y1);
|
||||||
@ -75,7 +75,7 @@ class PlotFile : public ofstream
|
|||||||
PlotFile& cont(const int xi, const int yi);
|
PlotFile& cont(const int xi, const int yi);
|
||||||
PlotFile& dot(const int xi, const int yi, const int dx,
|
PlotFile& dot(const int xi, const int yi, const int dx,
|
||||||
int n, const int* pat);
|
int n, const int* pat);
|
||||||
PlotFile& erase();
|
PlotFile& erase();
|
||||||
PlotFile& label(const char* s);
|
PlotFile& label(const char* s);
|
||||||
PlotFile& line(const int x0, const int y0,
|
PlotFile& line(const int x0, const int y0,
|
||||||
const int x1, const int y1);
|
const int x1, const int y1);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _Poisson_h
|
#define _Poisson_h
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -171,22 +171,22 @@ inline int operator != (const Rational& x, const Rational& y)
|
|||||||
|
|
||||||
inline int operator < (const Rational& x, const Rational& y)
|
inline int operator < (const Rational& x, const Rational& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator <= (const Rational& x, const Rational& y)
|
inline int operator <= (const Rational& x, const Rational& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator > (const Rational& x, const Rational& y)
|
inline int operator > (const Rational& x, const Rational& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator >= (const Rational& x, const Rational& y)
|
inline int operator >= (const Rational& x, const Rational& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int sign(const Rational& x)
|
inline int sign(const Rational& x)
|
||||||
@ -200,25 +200,25 @@ inline void Rational::negate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline Rational& Rational::operator += (const Rational& y)
|
inline Rational& Rational::operator += (const Rational& y)
|
||||||
{
|
{
|
||||||
add(*this, y, *this);
|
add(*this, y, *this);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Rational& Rational::operator -= (const Rational& y)
|
inline Rational& Rational::operator -= (const Rational& y)
|
||||||
{
|
{
|
||||||
sub(*this, y, *this);
|
sub(*this, y, *this);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Rational& Rational::operator *= (const Rational& y)
|
inline Rational& Rational::operator *= (const Rational& y)
|
||||||
{
|
{
|
||||||
mul(*this, y, *this);
|
mul(*this, y, *this);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Rational& Rational::operator /= (const Rational& y)
|
inline Rational& Rational::operator /= (const Rational& y)
|
||||||
{
|
{
|
||||||
div(*this, y, *this);
|
div(*this, y, *this);
|
||||||
return *this;
|
return *this;
|
||||||
@ -264,7 +264,7 @@ inline Rational operator / (const Rational& x, const Rational& y) return r
|
|||||||
|
|
||||||
#else /* NO_NRV */
|
#else /* NO_NRV */
|
||||||
|
|
||||||
inline Rational operator + (const Rational& x, const Rational& y)
|
inline Rational operator + (const Rational& x, const Rational& y)
|
||||||
{
|
{
|
||||||
Rational r; add(x, y, r); return r;
|
Rational r; add(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -44,15 +44,15 @@ class Regex
|
|||||||
re_registers* reg;
|
re_registers* reg;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Regex(const char* t,
|
Regex(const char* t,
|
||||||
int fast = 0,
|
int fast = 0,
|
||||||
int bufsize = 40,
|
int bufsize = 40,
|
||||||
const char* transtable = 0);
|
const char* transtable = 0);
|
||||||
|
|
||||||
~Regex();
|
~Regex();
|
||||||
|
|
||||||
int match(const char* s, int len, int pos = 0) const;
|
int match(const char* s, int len, int pos = 0) const;
|
||||||
int search(const char* s, int len,
|
int search(const char* s, int len,
|
||||||
int& matchlen, int startpos = 0) const;
|
int& matchlen, int startpos = 0) const;
|
||||||
int match_info(int& start, int& length, int nth = 0) const;
|
int match_info(int& start, int& length, int nth = 0) const;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1990 Free Software Foundation
|
Copyright (C) 1990 Free Software Foundation
|
||||||
adapted from a submission from John Reidl <riedl@cs.purdue.edu>
|
adapted from a submission from John Reidl <riedl@cs.purdue.edu>
|
||||||
|
|
||||||
@ -40,13 +40,13 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
// in a specified range. By default the range is 0..1. Since in my
|
// in a specified range. By default the range is 0..1. Since in my
|
||||||
// experience random numbers are often needed for a wide variety of
|
// experience random numbers are often needed for a wide variety of
|
||||||
// ranges in the same program, this generator accepts a new low or high value
|
// ranges in the same program, this generator accepts a new low or high value
|
||||||
// as an argument to the asLong and operator() methods to temporarily
|
// as an argument to the asLong and operator() methods to temporarily
|
||||||
// override stored values
|
// override stored values
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <RNG.h>
|
#include <RNG.h>
|
||||||
|
|
||||||
class RandomInteger
|
class RandomInteger
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
RNG *pGenerator;
|
RNG *pGenerator;
|
||||||
@ -90,20 +90,20 @@ class RandomInteger
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline RandomInteger::RandomInteger(long low, long high, RNG *gen)
|
inline RandomInteger::RandomInteger(long low, long high, RNG *gen)
|
||||||
: pLow((low < high) ? low : high),
|
: pLow((low < high) ? low : high),
|
||||||
pHigh((low < high) ? high : low),
|
pHigh((low < high) ? high : low),
|
||||||
pGenerator(gen)
|
pGenerator(gen)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
inline RandomInteger::RandomInteger(long high, RNG *gen)
|
inline RandomInteger::RandomInteger(long high, RNG *gen)
|
||||||
: pLow((0 < high) ? 0 : high),
|
: pLow((0 < high) ? 0 : high),
|
||||||
pHigh((0 < high) ? high : 0),
|
pHigh((0 < high) ? high : 0),
|
||||||
pGenerator(gen)
|
pGenerator(gen)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
inline RandomInteger::RandomInteger(RNG *gen)
|
|
||||||
|
inline RandomInteger::RandomInteger(RNG *gen)
|
||||||
: pLow(0),
|
: pLow(0),
|
||||||
pHigh(1),
|
pHigh(1),
|
||||||
pGenerator(gen)
|
pGenerator(gen)
|
||||||
@ -113,28 +113,28 @@ inline RNG* RandomInteger::generator() const { return pGenerator;}
|
|||||||
inline long RandomInteger::low() const { return pLow; }
|
inline long RandomInteger::low() const { return pLow; }
|
||||||
inline long RandomInteger::high() const { return pHigh; }
|
inline long RandomInteger::high() const { return pHigh; }
|
||||||
|
|
||||||
inline RNG* RandomInteger::generator(RNG *gen)
|
inline RNG* RandomInteger::generator(RNG *gen)
|
||||||
{
|
{
|
||||||
RNG *tmp = pGenerator; pGenerator = gen; return tmp;
|
RNG *tmp = pGenerator; pGenerator = gen; return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long RandomInteger::low(long x)
|
inline long RandomInteger::low(long x)
|
||||||
{
|
{
|
||||||
long tmp = pLow; pLow = x; return tmp;
|
long tmp = pLow; pLow = x; return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long RandomInteger:: high(long x)
|
inline long RandomInteger:: high(long x)
|
||||||
{
|
{
|
||||||
long tmp = pHigh; pHigh = x; return tmp;
|
long tmp = pHigh; pHigh = x; return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long RandomInteger:: _asLong(long low, long high)
|
inline long RandomInteger:: _asLong(long low, long high)
|
||||||
{
|
{
|
||||||
return (pGenerator->asLong() % (high-low+1)) + low;
|
return (pGenerator->asLong() % (high-low+1)) + low;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline long RandomInteger:: asLong()
|
inline long RandomInteger:: asLong()
|
||||||
{
|
{
|
||||||
return _asLong(pLow, pHigh);
|
return _asLong(pLow, pHigh);
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ inline long RandomInteger:: asLong(long low, long high)
|
|||||||
return _asLong(low, high);
|
return _asLong(low, high);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long RandomInteger:: operator () ()
|
inline long RandomInteger:: operator () ()
|
||||||
{
|
{
|
||||||
return _asLong(pLow, pHigh);
|
return _asLong(pLow, pHigh);
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ inline long RandomInteger:: operator () (long low, long high)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline int RandomInteger:: asInt()
|
inline int RandomInteger:: asInt()
|
||||||
{
|
{
|
||||||
return int(asLong());
|
return int(asLong());
|
||||||
}
|
}
|
||||||
|
@ -41,10 +41,10 @@ class SFile: public fstream
|
|||||||
SFile(int fd, int size);
|
SFile(int fd, int size);
|
||||||
SFile(const char *name, int size, int mode, int prot=0664);
|
SFile(const char *name, int size, int mode, int prot=0664);
|
||||||
void open(const char *name, int size, int mode, int prot=0664);
|
void open(const char *name, int size, int mode, int prot=0664);
|
||||||
|
|
||||||
int size() { return sz; }
|
int size() { return sz; }
|
||||||
int setsize(int s) { int old = sz; sz = s; return old; }
|
int setsize(int s) { int old = sz; sz = s; return old; }
|
||||||
|
|
||||||
SFile& get(void* x);
|
SFile& get(void* x);
|
||||||
SFile& put(void* x);
|
SFile& put(void* x);
|
||||||
SFile& operator[](long i);
|
SFile& operator[](long i);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988, 1992 Free Software Foundation
|
Copyright (C) 1988, 1992 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ class SLList : public BaseSLList
|
|||||||
Pix ins_after(Pix p, const T& item)
|
Pix ins_after(Pix p, const T& item)
|
||||||
{ return BaseSLList::ins_after(p, &item); }
|
{ return BaseSLList::ins_after(p, &item); }
|
||||||
void join(SLList<T>& a) { BaseSLList::join(a); }
|
void join(SLList<T>& a) { BaseSLList::join(a); }
|
||||||
|
|
||||||
T& front() {
|
T& front() {
|
||||||
if (last == 0) error("front: empty list");
|
if (last == 0) error("front: empty list");
|
||||||
return ((SLNode<T>*)last->tl)->hd; }
|
return ((SLNode<T>*)last->tl)->hd; }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
extern const int SampleHistogramMinimum;
|
extern const int SampleHistogramMinimum;
|
||||||
extern const int SampleHistogramMaximum;
|
extern const int SampleHistogramMaximum;
|
||||||
|
|
||||||
class SampleHistogram : public SampleStatistic
|
class SampleHistogram : public SampleStatistic
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
short howManyBuckets;
|
short howManyBuckets;
|
||||||
@ -36,7 +36,7 @@ class SampleHistogram : public SampleStatistic
|
|||||||
double *bucketLimit;
|
double *bucketLimit;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
SampleHistogram(double low, double hi, double bucketWidth = -1.0);
|
SampleHistogram(double low, double hi, double bucketWidth = -1.0);
|
||||||
|
|
||||||
~SampleHistogram();
|
~SampleHistogram();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ class SampleStatistic {
|
|||||||
|
|
||||||
SampleStatistic();
|
SampleStatistic();
|
||||||
virtual ~SampleStatistic();
|
virtual ~SampleStatistic();
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
|
|
||||||
virtual void operator+=(double);
|
virtual void operator+=(double);
|
||||||
int samples();
|
int samples();
|
||||||
@ -54,7 +54,7 @@ class SampleStatistic {
|
|||||||
extern void default_SampleStatistic_error_handler(const char*);
|
extern void default_SampleStatistic_error_handler(const char*);
|
||||||
extern one_arg_error_handler_t SampleStatistic_error_handler;
|
extern one_arg_error_handler_t SampleStatistic_error_handler;
|
||||||
|
|
||||||
extern one_arg_error_handler_t
|
extern one_arg_error_handler_t
|
||||||
set_SampleStatistic_error_handler(one_arg_error_handler_t f);
|
set_SampleStatistic_error_handler(one_arg_error_handler_t f);
|
||||||
|
|
||||||
inline SampleStatistic:: SampleStatistic(){ reset();}
|
inline SampleStatistic:: SampleStatistic(){ reset();}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -28,9 +28,9 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
|
|
||||||
struct StrRep // internal String representations
|
struct StrRep // internal String representations
|
||||||
{
|
{
|
||||||
unsigned short len; // string length
|
unsigned short len; // string length
|
||||||
unsigned short sz; // allocated space
|
unsigned short sz; // allocated space
|
||||||
char s[1]; // the string starts here
|
char s[1]; // the string starts here
|
||||||
// (at least 1 char for trailing null)
|
// (at least 1 char for trailing null)
|
||||||
// allocated & expanded via non-public fcts
|
// allocated & expanded via non-public fcts
|
||||||
};
|
};
|
||||||
@ -89,7 +89,7 @@ class SubString
|
|||||||
|
|
||||||
int matches(const Regex& r) const;
|
int matches(const Regex& r) const;
|
||||||
|
|
||||||
// IO
|
// IO
|
||||||
|
|
||||||
friend ostream& operator<<(ostream& s, const SubString& x);
|
friend ostream& operator<<(ostream& s, const SubString& x);
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ class SubString
|
|||||||
int empty() const;
|
int empty() const;
|
||||||
const char* chars() const;
|
const char* chars() const;
|
||||||
|
|
||||||
int OK() const;
|
int OK() const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -140,12 +140,12 @@ class String
|
|||||||
|
|
||||||
// concatenation
|
// concatenation
|
||||||
|
|
||||||
String& operator += (const String& y);
|
String& operator += (const String& y);
|
||||||
String& operator += (const SubString& y);
|
String& operator += (const SubString& y);
|
||||||
String& operator += (const char* t);
|
String& operator += (const char* t);
|
||||||
String& operator += (char c);
|
String& operator += (char c);
|
||||||
|
|
||||||
void prepend(const String& y);
|
void prepend(const String& y);
|
||||||
void prepend(const SubString& y);
|
void prepend(const SubString& y);
|
||||||
void prepend(const char* t);
|
void prepend(const char* t);
|
||||||
void prepend(char c);
|
void prepend(char c);
|
||||||
@ -169,7 +169,7 @@ class String
|
|||||||
friend inline void cat(const char*, const char*, String&);
|
friend inline void cat(const char*, const char*, String&);
|
||||||
friend inline void cat(const char*, char, String&);
|
friend inline void cat(const char*, char, String&);
|
||||||
|
|
||||||
// double concatenation, by request. (yes, there are too many versions,
|
// double concatenation, by request. (yes, there are too many versions,
|
||||||
// but if one is supported, then the others should be too...)
|
// but if one is supported, then the others should be too...)
|
||||||
// Concatenate first 3 args, store in last arg
|
// Concatenate first 3 args, store in last arg
|
||||||
|
|
||||||
@ -204,11 +204,11 @@ class String
|
|||||||
|
|
||||||
// return position of target in string or -1 for failure
|
// return position of target in string or -1 for failure
|
||||||
|
|
||||||
int index(char c, int startpos = 0) const;
|
int index(char c, int startpos = 0) const;
|
||||||
int index(const String& y, int startpos = 0) const;
|
int index(const String& y, int startpos = 0) const;
|
||||||
int index(const SubString& y, int startpos = 0) const;
|
int index(const SubString& y, int startpos = 0) const;
|
||||||
int index(const char* t, int startpos = 0) const;
|
int index(const char* t, int startpos = 0) const;
|
||||||
int index(const Regex& r, int startpos = 0) const;
|
int index(const Regex& r, int startpos = 0) const;
|
||||||
|
|
||||||
// return 1 if target appears anyhere in String; else 0
|
// return 1 if target appears anyhere in String; else 0
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ class String
|
|||||||
int contains(const char* t) const;
|
int contains(const char* t) const;
|
||||||
int contains(const Regex& r) const;
|
int contains(const Regex& r) const;
|
||||||
|
|
||||||
// return 1 if target appears anywhere after position pos
|
// return 1 if target appears anywhere after position pos
|
||||||
// (or before, if pos is negative) in String; else 0
|
// (or before, if pos is negative) in String; else 0
|
||||||
|
|
||||||
int contains(char c, int pos) const;
|
int contains(char c, int pos) const;
|
||||||
@ -237,7 +237,7 @@ class String
|
|||||||
|
|
||||||
// return number of occurences of target in String
|
// return number of occurences of target in String
|
||||||
|
|
||||||
int freq(char c) const;
|
int freq(char c) const;
|
||||||
int freq(const String& y) const;
|
int freq(const String& y) const;
|
||||||
int freq(const SubString& y) const;
|
int freq(const SubString& y) const;
|
||||||
int freq(const char* t) const;
|
int freq(const char* t) const;
|
||||||
@ -251,11 +251,11 @@ class String
|
|||||||
SubString at(int pos, int len);
|
SubString at(int pos, int len);
|
||||||
SubString operator () (int pos, int len); // synonym for at
|
SubString operator () (int pos, int len); // synonym for at
|
||||||
|
|
||||||
SubString at(const String& x, int startpos = 0);
|
SubString at(const String& x, int startpos = 0);
|
||||||
SubString at(const SubString& x, int startpos = 0);
|
SubString at(const SubString& x, int startpos = 0);
|
||||||
SubString at(const char* t, int startpos = 0);
|
SubString at(const char* t, int startpos = 0);
|
||||||
SubString at(char c, int startpos = 0);
|
SubString at(char c, int startpos = 0);
|
||||||
SubString at(const Regex& r, int startpos = 0);
|
SubString at(const Regex& r, int startpos = 0);
|
||||||
|
|
||||||
SubString before(int pos);
|
SubString before(int pos);
|
||||||
SubString before(const String& x, int startpos = 0);
|
SubString before(const String& x, int startpos = 0);
|
||||||
@ -311,14 +311,14 @@ class String
|
|||||||
|
|
||||||
// split string into array res at separators; return number of elements
|
// split string into array res at separators; return number of elements
|
||||||
|
|
||||||
friend int split(const String& x, String res[], int maxn,
|
friend int split(const String& x, String res[], int maxn,
|
||||||
const String& sep);
|
const String& sep);
|
||||||
friend int split(const String& x, String res[], int maxn,
|
friend int split(const String& x, String res[], int maxn,
|
||||||
const Regex& sep);
|
const Regex& sep);
|
||||||
|
|
||||||
friend String common_prefix(const String& x, const String& y,
|
friend String common_prefix(const String& x, const String& y,
|
||||||
int startpos = 0);
|
int startpos = 0);
|
||||||
friend String common_suffix(const String& x, const String& y,
|
friend String common_suffix(const String& x, const String& y,
|
||||||
int startpos = -1);
|
int startpos = -1);
|
||||||
friend String replicate(char c, int n);
|
friend String replicate(char c, int n);
|
||||||
friend String replicate(const String& y, int n);
|
friend String replicate(const String& y, int n);
|
||||||
@ -358,7 +358,7 @@ class String
|
|||||||
friend ostream& operator<<(ostream& s, const SubString& x);
|
friend ostream& operator<<(ostream& s, const SubString& x);
|
||||||
friend istream& operator>>(istream& s, String& x);
|
friend istream& operator>>(istream& s, String& x);
|
||||||
|
|
||||||
friend int readline(istream& s, String& x,
|
friend int readline(istream& s, String& x,
|
||||||
char terminator = '\n',
|
char terminator = '\n',
|
||||||
int discard_terminator = 1);
|
int discard_terminator = 1);
|
||||||
|
|
||||||
@ -409,17 +409,17 @@ inline const char* SubString::chars() const { return &(S.rep->s[pos]); }
|
|||||||
|
|
||||||
// constructors
|
// constructors
|
||||||
|
|
||||||
inline String::String()
|
inline String::String()
|
||||||
: rep(&_nilStrRep) {}
|
: rep(&_nilStrRep) {}
|
||||||
inline String::String(const String& x)
|
inline String::String(const String& x)
|
||||||
: rep(Scopy(0, x.rep)) {}
|
: rep(Scopy(0, x.rep)) {}
|
||||||
inline String::String(const char* t)
|
inline String::String(const char* t)
|
||||||
: rep(Salloc(0, t, -1, -1)) {}
|
: rep(Salloc(0, t, -1, -1)) {}
|
||||||
inline String::String(const char* t, int tlen)
|
inline String::String(const char* t, int tlen)
|
||||||
: rep(Salloc(0, t, tlen, tlen)) {}
|
: rep(Salloc(0, t, tlen, tlen)) {}
|
||||||
inline String::String(const SubString& y)
|
inline String::String(const SubString& y)
|
||||||
: rep(Salloc(0, y.chars(), y.length(), y.length())) {}
|
: rep(Salloc(0, y.chars(), y.length(), y.length())) {}
|
||||||
inline String::String(char c)
|
inline String::String(char c)
|
||||||
: rep(Salloc(0, &c, 1, 1)) {}
|
: rep(Salloc(0, &c, 1, 1)) {}
|
||||||
|
|
||||||
inline String::~String() { if (rep != &_nilStrRep) delete rep; }
|
inline String::~String() { if (rep != &_nilStrRep) delete rep; }
|
||||||
@ -434,7 +434,7 @@ inline SubString::~SubString() {}
|
|||||||
// assignment
|
// assignment
|
||||||
|
|
||||||
inline String& String::operator = (const String& y)
|
inline String& String::operator = (const String& y)
|
||||||
{
|
{
|
||||||
rep = Scopy(rep, y.rep);
|
rep = Scopy(rep, y.rep);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -773,67 +773,67 @@ inline String operator + (const String& x, const String& y)
|
|||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const String& x, const SubString& y)
|
inline String operator + (const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const String& x, const char* y)
|
inline String operator + (const String& x, const char* y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const String& x, char y)
|
inline String operator + (const String& x, char y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const SubString& x, const String& y)
|
inline String operator + (const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const SubString& x, const SubString& y)
|
inline String operator + (const SubString& x, const SubString& y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const SubString& x, const char* y)
|
inline String operator + (const SubString& x, const char* y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const SubString& x, char y)
|
inline String operator + (const SubString& x, char y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const char* x, const String& y)
|
inline String operator + (const char* x, const String& y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String operator + (const char* x, const SubString& y)
|
inline String operator + (const char* x, const SubString& y)
|
||||||
{
|
{
|
||||||
String r; cat(x, y, r); return r;
|
String r; cat(x, y, r); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String reverse(const String& x)
|
inline String reverse(const String& x)
|
||||||
{
|
{
|
||||||
String r; r.rep = Sreverse(x.rep, r.rep); return r;
|
String r; r.rep = Sreverse(x.rep, r.rep); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String upcase(const String& x)
|
inline String upcase(const String& x)
|
||||||
{
|
{
|
||||||
String r; r.rep = Supcase(x.rep, r.rep); return r;
|
String r; r.rep = Supcase(x.rep, r.rep); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String downcase(const String& x)
|
inline String downcase(const String& x)
|
||||||
{
|
{
|
||||||
String r; r.rep = Sdowncase(x.rep, r.rep); return r;
|
String r; r.rep = Sdowncase(x.rep, r.rep); return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline String capitalize(const String& x)
|
inline String capitalize(const String& x)
|
||||||
{
|
{
|
||||||
String r; r.rep = Scapitalize(x.rep, r.rep); return r;
|
String r; r.rep = Scapitalize(x.rep, r.rep); return r;
|
||||||
}
|
}
|
||||||
@ -849,12 +849,12 @@ inline void String::prepend(const String& y)
|
|||||||
|
|
||||||
inline void String::prepend(const char* y)
|
inline void String::prepend(const char* y)
|
||||||
{
|
{
|
||||||
rep = Sprepend(rep, y, -1);
|
rep = Sprepend(rep, y, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void String::prepend(char y)
|
inline void String::prepend(char y)
|
||||||
{
|
{
|
||||||
rep = Sprepend(rep, &y, 1);
|
rep = Sprepend(rep, &y, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void String::prepend(const SubString& y)
|
inline void String::prepend(const SubString& y)
|
||||||
@ -890,31 +890,31 @@ inline void String::capitalize()
|
|||||||
|
|
||||||
// element extraction
|
// element extraction
|
||||||
|
|
||||||
inline char& String::operator [] (int i)
|
inline char& String::operator [] (int i)
|
||||||
{
|
{
|
||||||
if (((unsigned)i) >= length()) error("invalid index");
|
if (((unsigned)i) >= length()) error("invalid index");
|
||||||
return rep->s[i];
|
return rep->s[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const char& String::operator [] (int i) const
|
inline const char& String::operator [] (int i) const
|
||||||
{
|
{
|
||||||
if (((unsigned)i) >= length()) error("invalid index");
|
if (((unsigned)i) >= length()) error("invalid index");
|
||||||
return rep->s[i];
|
return rep->s[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline char String::elem (int i) const
|
inline char String::elem (int i) const
|
||||||
{
|
{
|
||||||
if (((unsigned)i) >= length()) error("invalid index");
|
if (((unsigned)i) >= length()) error("invalid index");
|
||||||
return rep->s[i];
|
return rep->s[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline char String::firstchar() const
|
inline char String::firstchar() const
|
||||||
{
|
{
|
||||||
return elem(0);
|
return elem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline char String::lastchar() const
|
inline char String::lastchar() const
|
||||||
{
|
{
|
||||||
return elem(length() - 1);
|
return elem(length() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -926,17 +926,17 @@ inline int String::index(char c, int startpos) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline int String::index(const char* t, int startpos) const
|
inline int String::index(const char* t, int startpos) const
|
||||||
{
|
{
|
||||||
return search(startpos, length(), t);
|
return search(startpos, length(), t);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int String::index(const String& y, int startpos) const
|
inline int String::index(const String& y, int startpos) const
|
||||||
{
|
{
|
||||||
return search(startpos, length(), y.chars(), y.length());
|
return search(startpos, length(), y.chars(), y.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int String::index(const SubString& y, int startpos) const
|
inline int String::index(const SubString& y, int startpos) const
|
||||||
{
|
{
|
||||||
return search(startpos, length(), y.chars(), y.length());
|
return search(startpos, length(), y.chars(), y.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,17 +951,17 @@ inline int String::contains(char c) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline int String::contains(const char* t) const
|
inline int String::contains(const char* t) const
|
||||||
{
|
{
|
||||||
return search(0, length(), t) >= 0;
|
return search(0, length(), t) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int String::contains(const String& y) const
|
inline int String::contains(const String& y) const
|
||||||
{
|
{
|
||||||
return search(0, length(), y.chars(), y.length()) >= 0;
|
return search(0, length(), y.chars(), y.length()) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int String::contains(const SubString& y) const
|
inline int String::contains(const SubString& y) const
|
||||||
{
|
{
|
||||||
return search(0, length(), y.chars(), y.length()) >= 0;
|
return search(0, length(), y.chars(), y.length()) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1024,17 +1024,17 @@ inline int String::matches(const Regex& r, int p) const
|
|||||||
|
|
||||||
|
|
||||||
inline int SubString::contains(const char* t) const
|
inline int SubString::contains(const char* t) const
|
||||||
{
|
{
|
||||||
return S.search(pos, pos+len, t) >= 0;
|
return S.search(pos, pos+len, t) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int SubString::contains(const String& y) const
|
inline int SubString::contains(const String& y) const
|
||||||
{
|
{
|
||||||
return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
|
return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int SubString::contains(const SubString& y) const
|
inline int SubString::contains(const SubString& y) const
|
||||||
{
|
{
|
||||||
return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
|
return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1088,99 +1088,99 @@ inline ostream& operator<<(ostream& s, const String& x)
|
|||||||
|
|
||||||
// a zillion comparison operators
|
// a zillion comparison operators
|
||||||
|
|
||||||
inline int operator==(const String& x, const String& y)
|
inline int operator==(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) == 0;
|
return compare(x, y) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const String& x, const String& y)
|
inline int operator!=(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) != 0;
|
return compare(x, y) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const String& x, const String& y)
|
inline int operator>(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const String& x, const String& y)
|
inline int operator>=(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const String& x, const String& y)
|
inline int operator<(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const String& x, const String& y)
|
inline int operator<=(const String& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const String& x, const SubString& y)
|
inline int operator==(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) == 0;
|
return compare(x, y) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const String& x, const SubString& y)
|
inline int operator!=(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) != 0;
|
return compare(x, y) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const String& x, const SubString& y)
|
inline int operator>(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const String& x, const SubString& y)
|
inline int operator>=(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const String& x, const SubString& y)
|
inline int operator<(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const String& x, const SubString& y)
|
inline int operator<=(const String& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const String& x, const char* t)
|
inline int operator==(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) == 0;
|
return compare(x, t) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const String& x, const char* t)
|
inline int operator!=(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) != 0;
|
return compare(x, t) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const String& x, const char* t)
|
inline int operator>(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) > 0;
|
return compare(x, t) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const String& x, const char* t)
|
inline int operator>=(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) >= 0;
|
return compare(x, t) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const String& x, const char* t)
|
inline int operator<(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) < 0;
|
return compare(x, t) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const String& x, const char* t)
|
inline int operator<=(const String& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) <= 0;
|
return compare(x, t) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const SubString& x, const String& y)
|
inline int operator==(const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(y, x) == 0;
|
return compare(y, x) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const SubString& x, const String& y)
|
inline int operator!=(const SubString& x, const String& y)
|
||||||
@ -1188,29 +1188,29 @@ inline int operator!=(const SubString& x, const String& y)
|
|||||||
return compare(y, x) != 0;
|
return compare(y, x) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const SubString& x, const String& y)
|
inline int operator>(const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(y, x) < 0;
|
return compare(y, x) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const SubString& x, const String& y)
|
inline int operator>=(const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(y, x) <= 0;
|
return compare(y, x) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const SubString& x, const String& y)
|
inline int operator<(const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(y, x) > 0;
|
return compare(y, x) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const SubString& x, const String& y)
|
inline int operator<=(const SubString& x, const String& y)
|
||||||
{
|
{
|
||||||
return compare(y, x) >= 0;
|
return compare(y, x) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const SubString& x, const SubString& y)
|
inline int operator==(const SubString& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) == 0;
|
return compare(x, y) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const SubString& x, const SubString& y)
|
inline int operator!=(const SubString& x, const SubString& y)
|
||||||
@ -1218,7 +1218,7 @@ inline int operator!=(const SubString& x, const SubString& y)
|
|||||||
return compare(x, y) != 0;
|
return compare(x, y) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const SubString& x, const SubString& y)
|
inline int operator>(const SubString& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) > 0;
|
return compare(x, y) > 0;
|
||||||
}
|
}
|
||||||
@ -1228,7 +1228,7 @@ inline int operator>=(const SubString& x, const SubString& y)
|
|||||||
return compare(x, y) >= 0;
|
return compare(x, y) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const SubString& x, const SubString& y)
|
inline int operator<(const SubString& x, const SubString& y)
|
||||||
{
|
{
|
||||||
return compare(x, y) < 0;
|
return compare(x, y) < 0;
|
||||||
}
|
}
|
||||||
@ -1238,34 +1238,34 @@ inline int operator<=(const SubString& x, const SubString& y)
|
|||||||
return compare(x, y) <= 0;
|
return compare(x, y) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator==(const SubString& x, const char* t)
|
inline int operator==(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) == 0;
|
return compare(x, t) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator!=(const SubString& x, const char* t)
|
inline int operator!=(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) != 0;
|
return compare(x, t) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>(const SubString& x, const char* t)
|
inline int operator>(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) > 0;
|
return compare(x, t) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator>=(const SubString& x, const char* t)
|
inline int operator>=(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) >= 0;
|
return compare(x, t) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<(const SubString& x, const char* t)
|
inline int operator<(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) < 0;
|
return compare(x, t) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int operator<=(const SubString& x, const char* t)
|
inline int operator<=(const SubString& x, const char* t)
|
||||||
{
|
{
|
||||||
return compare(x, t) <= 0;
|
return compare(x, t) <= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1275,7 +1275,7 @@ inline SubString String::_substr(int first, int l)
|
|||||||
{
|
{
|
||||||
if (first < 0 || (unsigned)(first + l) > length() )
|
if (first < 0 || (unsigned)(first + l) > length() )
|
||||||
return SubString(_nilString, 0, 0) ;
|
return SubString(_nilString, 0, 0) ;
|
||||||
else
|
else
|
||||||
return SubString(*this, first, l);
|
return SubString(*this, first, l);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
|
|
||||||
//
|
//
|
||||||
// The interval [lo..hi]
|
// The interval [lo..hi]
|
||||||
//
|
//
|
||||||
|
|
||||||
class Uniform: public Random {
|
class Uniform: public Random {
|
||||||
double pLow;
|
double pLow;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
written by Dirk Grunwald (grunwald@cs.uiuc.edu)
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
#pragma interface
|
#pragma interface
|
||||||
#endif
|
#endif
|
||||||
#define _Weibull_h
|
#define _Weibull_h
|
||||||
|
|
||||||
#include <Random.h>
|
#include <Random.h>
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ class Weibull: public Random {
|
|||||||
double pBeta;
|
double pBeta;
|
||||||
|
|
||||||
void setState();
|
void setState();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Weibull(double alpha, double beta, RNG *gen);
|
Weibull(double alpha, double beta, RNG *gen);
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ class Weibull: public Random {
|
|||||||
inline void Weibull::setState() {
|
inline void Weibull::setState() {
|
||||||
pInvAlpha = 1.0 / pAlpha;
|
pInvAlpha = 1.0 / pAlpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Weibull::Weibull(double alpha, double beta, RNG *gen) : Random(gen)
|
inline Weibull::Weibull(double alpha, double beta, RNG *gen) : Random(gen)
|
||||||
{
|
{
|
||||||
pAlpha = alpha;
|
pAlpha = alpha;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* AUTOMATICALLY GENERATED; DO NOT EDIT! */
|
/* AUTOMATICALLY GENERATED; DO NOT EDIT! */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#ifndef _G_config_h
|
#ifndef _G_config_h
|
||||||
#define _G_config_h
|
#define _G_config_h
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988, 1992 Free Software Foundation
|
Copyright (C) 1988, 1992 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ typedef void (*one_arg_error_handler_t)(const char*);
|
|||||||
typedef void (*two_arg_error_handler_t)(const char*, const char*);
|
typedef void (*two_arg_error_handler_t)(const char*, const char*);
|
||||||
|
|
||||||
long gcd(long, long);
|
long gcd(long, long);
|
||||||
long lg(unsigned long);
|
long lg(unsigned long);
|
||||||
double pow(double, long);
|
double pow(double, long);
|
||||||
long pow(long, long);
|
long pow(long, long);
|
||||||
|
|
||||||
@ -60,30 +60,30 @@ extern _VOLATILE_VOID default_two_arg_error_handler(const char*, const char*);
|
|||||||
|
|
||||||
extern two_arg_error_handler_t lib_error_handler;
|
extern two_arg_error_handler_t lib_error_handler;
|
||||||
|
|
||||||
extern two_arg_error_handler_t
|
extern two_arg_error_handler_t
|
||||||
set_lib_error_handler(two_arg_error_handler_t f);
|
set_lib_error_handler(two_arg_error_handler_t f);
|
||||||
|
|
||||||
|
|
||||||
#if !defined(IV)
|
#if !defined(IV)
|
||||||
|
|
||||||
#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
|
#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
|
||||||
inline double abs(double arg)
|
inline double abs(double arg)
|
||||||
{
|
{
|
||||||
return (arg < 0.0)? -arg : arg;
|
return (arg < 0.0)? -arg : arg;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inline float abs(float arg)
|
inline float abs(float arg)
|
||||||
{
|
{
|
||||||
return (arg < 0.0)? -arg : arg;
|
return (arg < 0.0)? -arg : arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline short abs(short arg)
|
inline short abs(short arg)
|
||||||
{
|
{
|
||||||
return (arg < 0)? -arg : arg;
|
return (arg < 0)? -arg : arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline long abs(long arg)
|
inline long abs(long arg)
|
||||||
{
|
{
|
||||||
return (arg < 0)? -arg : arg;
|
return (arg < 0)? -arg : arg;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988 Free Software Foundation
|
Copyright (C) 1988 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1994 Free Software Foundation
|
Copyright (C) 1994 Free Software Foundation
|
||||||
written by Jason Merrill (jason@cygnus.com)
|
written by Jason Merrill (jason@cygnus.com)
|
||||||
|
|
||||||
|
@ -39,9 +39,9 @@ typedef /*unsigned*/ char buf_char;
|
|||||||
|
|
||||||
// Logical pos from start of buffer (does not count gap).
|
// Logical pos from start of buffer (does not count gap).
|
||||||
typedef long buf_index;
|
typedef long buf_index;
|
||||||
|
|
||||||
// Pos from start of buffer, possibly including gap_size.
|
// Pos from start of buffer, possibly including gap_size.
|
||||||
typedef long buf_offset;
|
typedef long buf_offset;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
struct buf_cookie {
|
struct buf_cookie {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -42,10 +42,10 @@ template<class TP> class smanip; // TP = Type Param
|
|||||||
|
|
||||||
template<class TP> class sapp {
|
template<class TP> class sapp {
|
||||||
ios& (*_f)(ios&, TP);
|
ios& (*_f)(ios&, TP);
|
||||||
public:
|
public:
|
||||||
sapp(ios& (*f)(ios&, TP)) : _f(f) {}
|
sapp(ios& (*f)(ios&, TP)) : _f(f) {}
|
||||||
//
|
//
|
||||||
smanip<TP> operator()(TP a)
|
smanip<TP> operator()(TP a)
|
||||||
{ return smanip<TP>(_f, a); }
|
{ return smanip<TP>(_f, a); }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ template <class TP> class smanip {
|
|||||||
public:
|
public:
|
||||||
smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {}
|
smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {}
|
||||||
//
|
//
|
||||||
friend
|
friend
|
||||||
istream& operator>>(istream& i, const smanip<TP>& m);
|
istream& operator>>(istream& i, const smanip<TP>& m);
|
||||||
friend
|
friend
|
||||||
ostream& operator<<(ostream& o, const smanip<TP>& m);
|
ostream& operator<<(ostream& o, const smanip<TP>& m);
|
||||||
@ -85,11 +85,11 @@ extern template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
|
|||||||
// Input-Stream Manipulators
|
// Input-Stream Manipulators
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
template<class TP> class imanip;
|
template<class TP> class imanip;
|
||||||
|
|
||||||
template<class TP> class iapp {
|
template<class TP> class iapp {
|
||||||
istream& (*_f)(istream&, TP);
|
istream& (*_f)(istream&, TP);
|
||||||
public:
|
public:
|
||||||
iapp(istream& (*f)(istream&,TP)) : _f(f) {}
|
iapp(istream& (*f)(istream&,TP)) : _f(f) {}
|
||||||
//
|
//
|
||||||
imanip<TP> operator()(TP a)
|
imanip<TP> operator()(TP a)
|
||||||
@ -102,7 +102,7 @@ template <class TP> class imanip {
|
|||||||
public:
|
public:
|
||||||
imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {}
|
imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {}
|
||||||
//
|
//
|
||||||
friend
|
friend
|
||||||
istream& operator>>(istream& i, const imanip<TP>& m)
|
istream& operator>>(istream& i, const imanip<TP>& m)
|
||||||
{ return (*m._f)( i, m._a); }
|
{ return (*m._f)( i, m._a); }
|
||||||
};
|
};
|
||||||
@ -112,11 +112,11 @@ template <class TP> class imanip {
|
|||||||
// Output-Stream Manipulators
|
// Output-Stream Manipulators
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
template<class TP> class omanip;
|
template<class TP> class omanip;
|
||||||
|
|
||||||
template<class TP> class oapp {
|
template<class TP> class oapp {
|
||||||
ostream& (*_f)(ostream&, TP);
|
ostream& (*_f)(ostream&, TP);
|
||||||
public:
|
public:
|
||||||
oapp(ostream& (*f)(ostream&,TP)) : _f(f) {}
|
oapp(ostream& (*f)(ostream&,TP)) : _f(f) {}
|
||||||
//
|
//
|
||||||
omanip<TP> operator()(TP a)
|
omanip<TP> operator()(TP a)
|
||||||
@ -141,7 +141,7 @@ template <class TP> class omanip {
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Macro to define an iomanip function, with one argument
|
// Macro to define an iomanip function, with one argument
|
||||||
// The underlying function is `__iomanip_<name>'
|
// The underlying function is `__iomanip_<name>'
|
||||||
//
|
//
|
||||||
#define __DEFINE_IOMANIP_FN1(type,param,function) \
|
#define __DEFINE_IOMANIP_FN1(type,param,function) \
|
||||||
extern ios& __iomanip_##function (ios&, param); \
|
extern ios& __iomanip_##function (ios&, param); \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
|
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
@ -185,21 +185,21 @@ struct _IO_FILE {
|
|||||||
char *_IO_save_end; /* Pointer to end of non-current get area. */
|
char *_IO_save_end; /* Pointer to end of non-current get area. */
|
||||||
|
|
||||||
struct _IO_marker *_markers;
|
struct _IO_marker *_markers;
|
||||||
|
|
||||||
struct _IO_FILE *_chain;
|
struct _IO_FILE *_chain;
|
||||||
|
|
||||||
struct _IO_jump_t *_jumps; /* Jump table */
|
struct _IO_jump_t *_jumps; /* Jump table */
|
||||||
|
|
||||||
int _fileno;
|
int _fileno;
|
||||||
int _blksize;
|
int _blksize;
|
||||||
_IO_off_t _offset;
|
_IO_off_t _offset;
|
||||||
|
|
||||||
#define __HAVE_COLUMN /* temporary */
|
#define __HAVE_COLUMN /* temporary */
|
||||||
/* 1+column number of pbase(); 0 is unknown. */
|
/* 1+column number of pbase(); 0 is unknown. */
|
||||||
unsigned short _cur_column;
|
unsigned short _cur_column;
|
||||||
char _unused;
|
char _unused;
|
||||||
char _shortbuf[1];
|
char _shortbuf[1];
|
||||||
|
|
||||||
/* char* _save_gptr; char* _save_egptr; */
|
/* char* _save_gptr; char* _save_egptr; */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -67,7 +67,7 @@ class parsebuf : public streambuf {
|
|||||||
|
|
||||||
// Length of current line, not counting either '\n'.
|
// Length of current line, not counting either '\n'.
|
||||||
int line_length() { return _line_length; }
|
int line_length() { return _line_length; }
|
||||||
// Current line - not a copy, so file ops may trash it.
|
// Current line - not a copy, so file ops may trash it.
|
||||||
virtual char* current_line();
|
virtual char* current_line();
|
||||||
virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
|
virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
|
||||||
virtual streambuf* setbuf(char* p, int len);
|
virtual streambuf* setbuf(char* p, int len);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
|||||||
// This may look like C code, but it is really -*- C++ -*-
|
// This may look like C code, but it is really -*- C++ -*-
|
||||||
/*
|
/*
|
||||||
Copyright (C) 1988, 1992 Free Software Foundation
|
Copyright (C) 1988, 1992 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
@ -32,4 +32,4 @@ extern "C" {
|
|||||||
int strcasecmp _G_ARGS((const char*, const char*));
|
int strcasecmp _G_ARGS((const char*, const char*));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -314,7 +314,7 @@ struct streambuf : public _IO_FILE { // protected??
|
|||||||
void setp(char* p, char* ep)
|
void setp(char* p, char* ep)
|
||||||
{ _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
|
{ _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
|
||||||
void setg(char* eb, char* g, char *eg) {
|
void setg(char* eb, char* g, char *eg) {
|
||||||
if (_IO_file_flags & _IO_IN_BACKUP) _IO_free_backup_area(this);
|
if (_IO_file_flags & _IO_IN_BACKUP) _IO_free_backup_area(this);
|
||||||
_IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
|
_IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
|
||||||
char *shortbuf() { return _shortbuf; }
|
char *shortbuf() { return _shortbuf; }
|
||||||
|
|
||||||
@ -336,7 +336,7 @@ struct streambuf : public _IO_FILE { // protected??
|
|||||||
void unsave_markers(); // Make all streammarkers !saving().
|
void unsave_markers(); // Make all streammarkers !saving().
|
||||||
int put_mode() { return _flags & _IO_CURRENTLY_PUTTING; }
|
int put_mode() { return _flags & _IO_CURRENTLY_PUTTING; }
|
||||||
int switch_to_get_mode();
|
int switch_to_get_mode();
|
||||||
|
|
||||||
streambuf(int flags=0);
|
streambuf(int flags=0);
|
||||||
public:
|
public:
|
||||||
static int flush_all();
|
static int flush_all();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1993 Free Software Foundation
|
Copyright (C) 1993 Free Software Foundation
|
||||||
|
|
||||||
This file is part of the GNU IO Library. This library is free
|
This file is part of the GNU IO Library. This library is free
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (C) 1990, 1992 Free Software Foundation
|
Copyright (C) 1990, 1992 Free Software Foundation
|
||||||
written by Doug Lea (dl@rocky.oswego.edu)
|
written by Doug Lea (dl@rocky.oswego.edu)
|
||||||
|
|
||||||
@ -22,9 +22,9 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
/* Timing functions from Doug Schmidt... */
|
/* Timing functions from Doug Schmidt... */
|
||||||
|
|
||||||
/* no such thing as "negative time"! */
|
/* no such thing as "negative time"! */
|
||||||
#define TIMER_ERROR_VALUE -1.0
|
#define TIMER_ERROR_VALUE -1.0
|
||||||
|
|
||||||
/* If this does not work on your system, change this to #if 0, and
|
/* If this does not work on your system, change this to #if 0, and
|
||||||
report the problem. */
|
report the problem. */
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
@ -73,7 +73,7 @@ return_elapsed_time(Last_Time)
|
|||||||
{
|
{
|
||||||
if (!Timer_Set) {
|
if (!Timer_Set) {
|
||||||
return(TIMER_ERROR_VALUE);
|
return(TIMER_ERROR_VALUE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* get process time */
|
/* get process time */
|
||||||
#ifdef USE_TIMES
|
#ifdef USE_TIMES
|
||||||
@ -85,8 +85,8 @@ return_elapsed_time(Last_Time)
|
|||||||
#ifdef USE_TIMES
|
#ifdef USE_TIMES
|
||||||
return((double) (New_Time.tms_utime - Old_Time.tms_utime) / HZ);
|
return((double) (New_Time.tms_utime - Old_Time.tms_utime) / HZ);
|
||||||
#else
|
#else
|
||||||
return((New_Time.ru_utime.tv_sec - Old_Time.ru_utime.tv_sec) +
|
return((New_Time.ru_utime.tv_sec - Old_Time.ru_utime.tv_sec) +
|
||||||
((New_Time.ru_utime.tv_usec - Old_Time.ru_utime.tv_usec)
|
((New_Time.ru_utime.tv_usec - Old_Time.ru_utime.tv_usec)
|
||||||
/ 1000000.0));
|
/ 1000000.0));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ return_elapsed_time(Last_Time)
|
|||||||
#ifdef USE_TIMES
|
#ifdef USE_TIMES
|
||||||
return((double) New_Time.tms_utime / HZ - Last_Time);
|
return((double) New_Time.tms_utime / HZ - Last_Time);
|
||||||
#else
|
#else
|
||||||
return((New_Time.ru_utime.tv_sec +
|
return((New_Time.ru_utime.tv_sec +
|
||||||
(New_Time.ru_utime.tv_usec / 1000000.0)) - Last_Time);
|
(New_Time.ru_utime.tv_usec / 1000000.0)) - Last_Time);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ getrusage(int dummy,struct rusage* time){
|
|||||||
/* we subtract an offset to make sure that the number fits in a long int*/
|
/* we subtract an offset to make sure that the number fits in a long int*/
|
||||||
rtime=rtime/1.0e+7-4.144e+9;
|
rtime=rtime/1.0e+7-4.144e+9;
|
||||||
time->ru_utime.tv_sec= rtime;
|
time->ru_utime.tv_sec= rtime;
|
||||||
rtime=(rtime-time->ru_utime.tv_sec)*1.0e6;
|
rtime=(rtime-time->ru_utime.tv_sec)*1.0e6;
|
||||||
time->ru_utime.tv_usec= rtime;
|
time->ru_utime.tv_usec= rtime;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -666,7 +666,7 @@ strerror (errnoval)
|
|||||||
/* In range, and a valid message. Just return the message. */
|
/* In range, and a valid message. Just return the message. */
|
||||||
msg = (char *) sys_errlist[errnoval];
|
msg = (char *) sys_errlist[errnoval];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (msg);
|
return (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,7 +448,7 @@ strsignal (signo)
|
|||||||
/* In range, and a valid message. Just return the message. */
|
/* In range, and a valid message. Just return the message. */
|
||||||
msg = (const char *) sys_siglist[signo];
|
msg = (const char *) sys_siglist[signo];
|
||||||
}
|
}
|
||||||
|
|
||||||
return (msg);
|
return (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user