Add non-standard function: _set_ospeed(speed)
Basically all termios+termcap pgms needs it. It set ospeed variable using nearest-matched stty speeds, which helps termcap pgms works with non-fixed termios speeds and not duplicate ospeed switch into every pgm. Also it isn't standard function, its source code is too big to include it in whole to every termcap+termios pgm.
This commit is contained in:
parent
7221ecc0ba
commit
2f0c493d09
@ -4,12 +4,12 @@ LIB= termcap
|
||||
SHLIB_MAJOR= 2
|
||||
SHLIB_MINOR= 1
|
||||
CFLAGS+=-DCM_N -DCM_GT -DCM_B -DCM_D
|
||||
SRCS= termcap.c tgoto.c tputs.c tparm.c
|
||||
SRCS= termcap.c tgoto.c tputs.c tparm.c tospeed.c
|
||||
|
||||
MAN3= termcap.3
|
||||
MLINKS= termcap.3 tgetent.3 termcap.3 tgetflag.3 termcap.3 tgetnum.3 \
|
||||
termcap.3 tgetstr.3 termcap.3 tgoto.3 termcap.3 tputs.3 \
|
||||
termcap.3 tparm.3
|
||||
termcap.3 tparm.3 termcap.3 _set_ospeed.3
|
||||
LINKS= ${LIBDIR}/libtermcap.a ${LIBDIR}/libtermlib.a
|
||||
.if !defined(NOPIC)
|
||||
LINKS+= ${SHLIBDIR}/libtermcap.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \
|
||||
|
@ -41,7 +41,8 @@
|
||||
.Nm tgetstr ,
|
||||
.Nm tgoto ,
|
||||
.Nm tputs ,
|
||||
.Nm tparm
|
||||
.Nm tparm ,
|
||||
.Nm _set_ospeed
|
||||
.Nd terminal independent operation routines
|
||||
.Sh SYNOPSIS
|
||||
.Fd #include <termcap.h>
|
||||
@ -63,6 +64,8 @@
|
||||
.Fn tputs "const char *cp" "int affcnt" "int (*outc)(int)"
|
||||
.Ft char *
|
||||
.Fn tparm "const char *cp" "..."
|
||||
.Ft void
|
||||
.Fn _set_ospeed "long speed"
|
||||
.Sh DESCRIPTION
|
||||
These functions extract and use capabilities from a terminal capability data
|
||||
base, usually
|
||||
@ -232,6 +235,13 @@ The external variable
|
||||
.Va ospeed
|
||||
should contain the output speed of the terminal as encoded by
|
||||
.Xr stty 3 .
|
||||
The
|
||||
.Fn _set_ospeed
|
||||
functions converts any (not exactly matched only) numeric speed to
|
||||
.Xr stty 3
|
||||
encoded speed and set
|
||||
.Va ospeed
|
||||
variable.
|
||||
The external variable
|
||||
.Va PC
|
||||
should contain a pad character to be used (from the
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 1994 by Andrew A. Chernov, Moscow, Russia.
|
||||
* Copyright (C) 1994,1995 by Andrey A. Chernov, Moscow, Russia.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -14,7 +14,7 @@
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
@ -24,7 +24,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* $Id: termcap.h,v 1.3 1994/12/09 21:55:52 ache Exp $ */
|
||||
/* $Id: termcap.h,v 1.4 1994/12/10 22:01:25 ache Exp $ */
|
||||
|
||||
#ifndef _TERMCAP_H_
|
||||
#define _TERMCAP_H_
|
||||
@ -46,6 +46,8 @@ extern int tputs __P((const char *, int, int (*)(int)));
|
||||
extern char *tgoto __P((const char *, int, int));
|
||||
extern char *tparm __P((const char *, ...));
|
||||
|
||||
extern void _set_ospeed __P((long speed));
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _TERMCAP_H_ */
|
||||
|
71
lib/libtermcap/tospeed.c
Normal file
71
lib/libtermcap/tospeed.c
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 1995 by Andrey A. Chernov, Moscow, Russia.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
extern short ospeed;
|
||||
|
||||
static struct stable {
|
||||
long speed;
|
||||
short code;
|
||||
} table[] = {
|
||||
{115200,17},
|
||||
{57600, 16},
|
||||
{38400, 15},
|
||||
{19200, 14},
|
||||
{9600, 13},
|
||||
{4800, 12},
|
||||
{2400, 11},
|
||||
{1800, 10},
|
||||
{1200, 9},
|
||||
{600, 8},
|
||||
{300, 7},
|
||||
{200, 6},
|
||||
{150, 5},
|
||||
{134, 4},
|
||||
{110, 3},
|
||||
{75, 2},
|
||||
{50, 1},
|
||||
{0, 0},
|
||||
{-1, -1}
|
||||
};
|
||||
|
||||
void _set_ospeed(long speed)
|
||||
{
|
||||
struct stable *stable;
|
||||
|
||||
if (speed == 0) {
|
||||
ospeed = 0;
|
||||
return;
|
||||
}
|
||||
for (stable = table; stable->speed > 0; stable++) {
|
||||
/* nearest one, rounded down */
|
||||
if (stable->speed <= speed) {
|
||||
ospeed = stable->code;
|
||||
return;
|
||||
}
|
||||
}
|
||||
ospeed = 1; /* 50, min and not hangup */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user