/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 1997 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/* Copyright (c) 1979 Regents of the University of California */
#pragma ident "%Z%%M% %I% %E% SMI"
/*LINTLIBRARY*/
#include <ctype.h>
#include "curses_inc.h"
/*
* Put the character string cp out, with padding.
* The number of affected lines is affcnt, and the routine
* used to output one character is outc.
*/
static char *ocp;
static char *
_tpad(char *, int, int (*)(char));
static char *
{
int delay = 0;
#ifdef _VR2_COMPAT_CODE
/*
* Why is this here?
* Because mandatory padding must be used for flash_screen
* and bell. We cannot force users to code mandatory padding
* in their terminfo entries, as that would break compatibility.
* We therefore, do it here.
*
* When compatibility is to be broken, his will go away
* and users will be informed that they MUST use mandatory
* padding for flash and bell.
*/
#endif /* _VR2_COMPAT_CODE */
/* Eat initial $< */
cp += 2;
/* Convert the number representing the delay. */
do
}
delay *= 10;
if (*cp == '.') {
cp++;
/* Only one digit to the right of the decimal point. */
cp++;
}
/*
* If the delay is followed by a `*', then
* multiply by the affected lines count.
* If the delay is followed by a '/', then
*/
/*CONSTCOND*/
while (TRUE) {
if (*cp == '/')
else
if (*cp == '*')
else
break;
cp++;
}
if (doaffcnt)
if (*cp == '>')
cp++; /* Eat trailing '>' */
else {
/*
* We got a "$<" with no ">". This is usually caused by
* a cursor addressing sequence that happened to generate
* $ < . To avoid an infinite loop, we output the $ here
* and pass back the rest.
*/
return (icp);
}
/*
* If no delay needed, or output speed is
* not comprehensible, then don't try to delay.
*/
if (delay == 0)
return (cp);
/*
* Let handshaking take care of it - no extra cpu load from pads.
* Also, this will be more optimal since the pad info is usually
* worst case. We only use padding info for such terminals to
* estimate the cost of a capability in choosing the cheapest one.
* Some capabilities, such as flash_screen, really want the
* padding irregardless.
*/
return (cp);
return (cp);
}
int
{
if (cp != 0) {
/* The guts of the string. */
while (*cp)
else
}
return (OK);
}