X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fcomp_parse.c;h=82a61a52e35d1dac97b75c6ce8b46e5a3aa9094c;hp=ed2cfbd4189b8ec29a0c67284bbff00be9f7cc23;hb=596d5db3cda5749733f9803a4c2477c2ec9e3a33;hpb=03f728e5bb3630a54fffc4a2ff2f8dbfcce9088e diff --git a/ncurses/tinfo/comp_parse.c b/ncurses/tinfo/comp_parse.c index ed2cfbd4..82a61a52 100644 --- a/ncurses/tinfo/comp_parse.c +++ b/ncurses/tinfo/comp_parse.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc. * + * Copyright (c) 1998-2012,2013 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -47,7 +47,7 @@ #include -MODULE_ID("$Id: comp_parse.c,v 1.78 2011/10/22 16:19:19 tom Exp $") +MODULE_ID("$Id: comp_parse.c,v 1.90 2013/08/31 15:22:31 tom Exp $") static void sanity_check2(TERMTYPE *, bool); NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype2) (TERMTYPE *, bool) = sanity_check2; @@ -83,14 +83,14 @@ force_bar(char *dst, char *src) if (len > MAX_NAME_SIZE) len = MAX_NAME_SIZE; (void) strncpy(dst, src, len); - (void) strcpy(dst + len, "|"); + _nc_STRCPY(dst + len, "|", MAX_NAME_SIZE); src = dst; } return src; } #define ForceBar(dst, src) ((strchr(src, '|') == 0) ? force_bar(dst, src) : src) -#if USE_TERMCAP && NCURSES_XNAMES +#if NCURSES_USE_TERMCAP && NCURSES_XNAMES static char * skip_index(char *name) { @@ -113,7 +113,7 @@ check_collisions(char *n1, char *n2, int counter) n1 = ForceBar(nc1, n1); n2 = ForceBar(nc2, n2); -#if USE_TERMCAP && NCURSES_XNAMES +#if NCURSES_USE_TERMCAP && NCURSES_XNAMES if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { n1 = skip_index(n1); n2 = skip_index(n2); @@ -162,18 +162,15 @@ name_ending(char *name) static bool remove_collision(char *n1, char *n2) { - char *p1 = n1; char *p2 = n2; char *pstart, *qstart, *pend, *qend; bool removed = FALSE; -#if USE_TERMCAP && NCURSES_XNAMES +#if NCURSES_USE_TERMCAP && NCURSES_XNAMES if ((_nc_syntax == SYN_TERMCAP) && _nc_user_definable) { - p1 = n1 = skip_index(n1); + n1 = skip_index(n1); p2 = n2 = skip_index(n2); } -#else - (void) p1; #endif for (pstart = n1; (pend = name_ending(pstart)); pstart = next_name(pend)) { @@ -348,9 +345,7 @@ _nc_resolve_uses2(bool fullresolve, bool literal) DEBUG(2, ("%s: resolving use=%s (compiled)", child, lookfor)); - rp = typeMalloc(ENTRY, 1); - if (rp == 0) - _nc_err_abort(MSG_NO_MEMORY); + TYPE_MALLOC(ENTRY, 1, rp); rp->tterm = thisterm; rp->nuses = 0; rp->next = lastread; @@ -470,7 +465,34 @@ _nc_resolve_uses2(bool fullresolve, bool literal) for_entry_list(qp) { _nc_curr_line = (int) qp->startline; _nc_set_type(_nc_first_name(qp->tterm.term_names)); - fixup_acsc(&qp->tterm, literal); + /* + * tic overrides this function pointer to provide more verbose + * checking. + */ + if (_nc_check_termtype2 != sanity_check2) { + SCREEN *save_SP = SP; + SCREEN fake_sp; + TERMINAL fake_tm; + TERMINAL *save_tm = cur_term; + + /* + * Setup so that tic can use ordinary terminfo interface + * to obtain capability information. + */ + memset(&fake_sp, 0, sizeof(fake_sp)); + memset(&fake_tm, 0, sizeof(fake_tm)); + fake_sp._term = &fake_tm; + fake_tm.type = qp->tterm; + _nc_set_screen(&fake_sp); + set_curterm(&fake_tm); + + _nc_check_termtype2(&qp->tterm, literal); + + _nc_set_screen(save_SP); + set_curterm(save_tm); + } else { + fixup_acsc(&qp->tterm, literal); + } } DEBUG(2, ("SANITY CHECK FINISHED")); } @@ -525,6 +547,7 @@ sanity_check2(TERMTYPE *tp, bool literal) #endif /* __UNUSED__ */ PAIRED(enter_standout_mode, exit_standout_mode); PAIRED(enter_underline_mode, exit_underline_mode); + PAIRED(enter_italics_mode, exit_italics_mode); } /* we do this check/fix in postprocess_termcap(), but some packagers