Home | History | Annotate | Line # | Download | only in libterminfo
curterm.c revision 1.2
      1 /* $NetBSD: curterm.c,v 1.2 2010/02/11 00:27:09 roy Exp $ */
      2 
      3 /*
      4  * Copyright (c) 2009 The NetBSD Foundation, Inc.
      5  *
      6  * This code is derived from software contributed to The NetBSD Foundation
      7  * by Roy Marples.
      8  *
      9  * Redistribution and use in source and binary forms, with or without
     10  * modification, are permitted provided that the following conditions
     11  * are met:
     12  * 1. Redistributions of source code must retain the above copyright
     13  *    notice, this list of conditions and the following disclaimer.
     14  * 2. Redistributions in binary form must reproduce the above copyright
     15  *    notice, this list of conditions and the following disclaimer in the
     16  *    documentation and/or other materials provided with the distribution.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 
     30 #include <sys/cdefs.h>
     31 __RCSID("$NetBSD: curterm.c,v 1.2 2010/02/11 00:27:09 roy Exp $");
     32 
     33 #include <assert.h>
     34 #include <stdlib.h>
     35 #include <term_private.h>
     36 #include <term.h>
     37 #include <termios.h>
     38 #include <stdio.h>
     39 TERMINAL *cur_term;
     40 
     41 static const speed_t bauds[] = {
     42 	0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 2400, 4800, 9600,
     43 	19200, 38400, 57600, 115200, 230400, 460800, 921600
     44 };
     45 
     46 void
     47 _ti_setospeed(TERMINAL *term)
     48 {
     49 	struct termios termios;
     50 	speed_t os;
     51 	size_t i;
     52 
     53 	_DIAGASSERT(term != NULL);
     54 
     55 	term->_ospeed = 0;
     56 	if (tcgetattr(term->fildes, &termios) == 0) {
     57 		os = cfgetospeed(&termios);
     58 		for (i = 0; i < __arraycount(bauds); i++)
     59 			if (bauds[i] == os) {
     60 				term->_ospeed = i;
     61 				break;
     62 			}
     63 	}
     64 }
     65 
     66 TERMINAL *
     67 set_curterm(TERMINAL *nterm)
     68 {
     69 	TERMINAL *oterm;
     70 
     71 	oterm = cur_term;
     72 	cur_term = nterm;
     73 
     74 	printf ("%s\n", nterm->name);
     75 	ospeed = 0;
     76 	if (cur_term == NULL)
     77 		PC = '\0';
     78 	else {
     79 		if (pad_char == NULL)
     80 			PC = '\0';
     81 		else
     82 			PC = *pad_char;
     83 		_ti_setospeed(nterm);
     84 		ospeed = nterm->_ospeed;
     85 	}
     86 
     87 	return oterm;
     88 }
     89 
     90 int
     91 del_curterm(TERMINAL *oterm)
     92 {
     93 	if (oterm != NULL) {
     94 		_ti_freeterm(oterm);
     95 		free(oterm);
     96 	}
     97 	return 0;
     98 }
     99