[comp.unix.microport] Curses bug in V/AT 2.4 - what was it ???

rp@osc.COM (Rich Patterson) (06/14/89)

Hi,
	I remember a couple of months ago that there is a bug in the
curses support under System V/AT ver. 2.4.  Does anybody remember what it
was ??  Also, if anybody has a fix for it that would be appreciated.  Please
either post or e-mail directly to me.

Thanks,
Rich P.
rp@osc.com
pacbell!osc!rp

rd@tarpit.UUCP (Bob Thrush x210) (06/22/89)

In article <353@osc.COM> rp@osc.COM (Rich Patterson) writes:
>Hi,
>	I remember a couple of months ago that there is a bug in the
>curses support under System V/AT ver. 2.4.  Does anybody remember what it
>was ??  Also, if anybody has a fix for it that would be appreciated.  Please
>either post or e-mail directly to me.

  I don't have my earlier posting about this problem handy; however ...

  tgetstr() is broken.  I have attached a copy of a small source
module that may be used to workaround the problem.  If somebody
has a more direct solution, it would be preferable to this workaround.

#include <stdio.h>

/* The Microport tgetstr function is broken.  tgetstr should
 * have the following prototype:
 *   char *tgetstr(key,tcarea)
 *   char *key, **tcarea;
 * A proper termcap version should copy the (key) capability string
 * to tcarea, update the tcarea pointer, and return a pointer 
 * to the desired capability.
 * The Microport version appears to have something like the
 * following prototype:
 *   char *tgetstr(key,tcarea)
 *   char *key, *tcarea;
 * If tcarea is non-NULL, the Microport version copies the capability 
 * to the latter tcarea and returns a pointer to its own internal copy 
 * of the capability.  If tcarea is NULL, then it does not do the
 * above copy; however, it still returns the pointer.
 *
 * Since compatible performance is desired, I have written the following
 * routine to interface to the broken Microport tgetstr.
 *
 * To use Tgetstr, define the following macro and function declaration
 * before tgetstr is used:
#define tgetstr(key,tcarea) (Tgetstr(key,tcarea))
char *Tgetstr();
 *
 * Then link this source module with the rest of your package.
 * 
 */

char *Tgetstr(key,p)
char *key, **p;
{
  char  *tgetstr();     		       /* Get termcap capability */
  char *strcpy();
  char *tmpstr;
  char *curses_cap_str;

  curses_cap_str=tgetstr(key,0L);
  if (curses_cap_str)
  {
	tmpstr = *p;
  	(void) strcpy(*p, curses_cap_str);
	*p += strlen(curses_cap_str);
	(*p)++;
  }
  else
	tmpstr = NULL;
  return tmpstr;
}

>
>Thanks,
>Rich P.
>rp@osc.com
>pacbell!osc!rp
-- 
Bob Thrush                 UUCP: {ucf-cs,rtmvax}!tarpit!rd
Automation Intelligence,   1200 W. Colonial Drive, Orlando, Florida 32804