On Wed, May 29, 2024 at 08:05:14AM +0200, Otto Moerbeek wrote:

> On Mon, May 27, 2024 at 09:21:34PM -0500, Don Wilburn wrote:
> 
> > Dear OpenBSD,
> > 
> > I recently upgraded from version 7.4 to 7.5.  This broke the old cribbage
> > game.  This is included with OpenBSD, if you choose to install the games.
> > 
> > I'm not a programmer, but I promise you this happened because ncurses was
> > updated from version 5.7 to 6.4
> > 
> > The problem:
> > 
> > Normally the game gives prompts for play options and cards.  It's supposed
> > to leave the prompt after the response, then advance to a new line.  This
> > gives a brief history of selections
> > 
> > Now, starting with  the third prompt (cut the cards), the prompts disappear
> > when a response key is pressed.  This ruins the game. The effect is obvious,
> > even if you don't know how to play cribbage.
> > 
> > It would be even more obvious if you have an older system to compare with a
> > current v7.5 system.
> > 
> > This happened to linux bsd-games many years ago.  A search will indicate
> > that I filed this same bug with Gentoo linux over 9 years ago.  Linux
> > classic bsd-games has been unmaintained since before that time.  This is
> > where I observed that the bug happened with a ncurses update.  Nobody
> > pursued the solution.
> > 
> > I don't have the skills to butcher the game code to work with with the
> > update of ncurses.  Likewise, I don't know how to use a debugger or write a
> > sample program to replicate the effect.  I can't demonstrate WHY ncurses is
> > the problem.  Maybe it's the C compiler's fault?
> > 
> > I still play this obsolete command line game.  It's nostalgia, I guess.  I
> > know OpenBSD developers have really important things to maintain.   If
> > someone could spare some time for this little bug, I'd be happy.  Maybe it
> > could be delegated to a student?
> > 
> > Thanks for reading,  DW
> > 
> 
> One remains a student forever.
> 
> Try this, it does not try to cut corners with switching windows.

No response from the original reporter.

Is anybody else interested in testing/reviewing?

        -Otto

> 
> Index: io.c
> ===================================================================
> RCS file: /home/cvs/src/games/cribbage/io.c,v
> diff -u -p -r1.22 io.c
> --- io.c      10 Jan 2016 13:35:09 -0000      1.22
> +++ io.c      29 May 2024 06:00:03 -0000
> @@ -505,14 +505,11 @@ get_line(void)
>  {
>       size_t pos;
>       int c, oy, ox;
> -     WINDOW *oscr;
>  
> -     oscr = stdscr;
> -     stdscr = Msgwin;
> -     getyx(stdscr, oy, ox);
> -     refresh();
> +     getyx(Msgwin, oy, ox);
> +     wrefresh(Msgwin);
>       /* loop reading in the string, and put it in a temporary buffer */
> -     for (pos = 0; (c = readchar()) != '\n'; clrtoeol(), refresh()) {
> +     for (pos = 0; (c = readchar()) != '\n'; wclrtoeol(Msgwin), 
> wrefresh(Msgwin)) {
>               if (c == -1)
>                       continue;
>               if (c == ' ' && (pos == 0 || linebuf[pos - 1] == ' '))
> @@ -522,13 +519,13 @@ get_line(void)
>                               int i;
>                               pos--;
>                               for (i = strlen(unctrl(linebuf[pos])); i; i--)
> -                                     addch('\b');
> +                                     waddch(Msgwin, '\b');
>                       }
>                       continue;
>               }
>               if (c == killchar()) {
>                       pos = 0;
> -                     move(oy, ox);
> +                     wmove(Msgwin, oy, ox);
>                       continue;
>               }
>               if (pos >= LINESIZE - 1 || !(isalnum(c) || c == ' ')) {
> @@ -538,12 +535,11 @@ get_line(void)
>               if (islower(c))
>                       c = toupper(c);
>               linebuf[pos++] = c;
> -             addstr(unctrl(c));
> +             waddstr(Msgwin, unctrl(c));
>               Mpos++;
>       }
>       while (pos < sizeof(linebuf))
>               linebuf[pos++] = '\0';
> -     stdscr = oscr;
>       return (linebuf);
>  }
>  
> 

Reply via email to