<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="gl">
	<id>http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_con_nCurses_en_C</id>
	<title>Programación con nCurses en C - Historial de revisións</title>
	<link rel="self" type="application/atom+xml" href="http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_con_nCurses_en_C"/>
	<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_con_nCurses_en_C&amp;action=history"/>
	<updated>2026-09-13T13:20:21Z</updated>
	<subtitle>Historial de revisións desta páxina no wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_con_nCurses_en_C&amp;diff=1822&amp;oldid=prev</id>
		<title>Xavi: Nova páxina: &quot;=== Introducción ===  A librería ncurses proporciona un conxunto de funcións pra manexar a entrada e saída por terminal no mundo UNIX. A diferenc...&quot;</title>
		<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_con_nCurses_en_C&amp;diff=1822&amp;oldid=prev"/>
		<updated>2014-06-26T09:07:54Z</updated>

		<summary type="html">&lt;p&gt;Nova páxina: &amp;quot;=== Introducción ===  A librería ncurses proporciona un conxunto de funcións pra manexar a entrada e saída por &lt;a href=&quot;/mediawiki/index.php?title=Gal:terminal&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Gal:terminal (a páxina aínda non existe)&quot;&gt;terminal&lt;/a&gt; no mundo &lt;a href=&quot;/mediawiki/index.php?title=Gal:UNIX&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Gal:UNIX (a páxina aínda non existe)&quot;&gt;UNIX&lt;/a&gt;. A diferenc...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páxina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== Introducción ===&lt;br /&gt;
&lt;br /&gt;
A librería ncurses proporciona un conxunto de funcións pra manexar a entrada e saída por [[gal:terminal|terminal]] no mundo [[gal:UNIX|UNIX]]. A diferencia de outros sistemas operativos ([[gal:Windows|WINDOWS]],[[gal:DOS|DOS]]) Linux é un sistema multiusuario no que moitos usuarios poden traballar &amp;#039;&amp;#039;o mesmo tempo co mesmo ordenador&amp;#039;&amp;#039; dende terminais que poden estar situados en calquera sitio. Como os terminais non son todos iguais, nin dende o punto de vista físico nin lóxico, non é posible ter unhas chamadas ó sistema xerais que funcionen pra todos os modelos. O [[gal:Linux|Linux]], igual que a maior parte (ou todos) os UNIX, utiliza unha [[gal:Base de Datos|base de datos]] que recolle as capacidades dos diferentes tipos de terminais soportados, e os programas deben poder traballar con todos eles. A librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; é unha librería de funcións de manexo de terminais de usuario que fai uso desta base de datos pra poder facer tarefas comúns como o borrado do terminal ou a colocación do cursor nunha zona concreta da pantalla, ademáis de outras tarefas máis complexas como creación de ventanas, manexo das cores... etc. A implementación da librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; presente en (que eu saiba) todos os UNIX chámase na versión de Linux &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ncurses&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; e a información máis importante pode obterse con:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man ncurses&amp;#039;&amp;#039;&amp;#039; : Uso xeral da librería, como iniciar a librería e pechala e como enlazar a librería os nosos programas&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_color&amp;#039;&amp;#039;&amp;#039; : Descripción das funcións de manexo de cores&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_attr&amp;#039;&amp;#039;&amp;#039; : Descripción das funcións de manexo dos atributos&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_getch&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de entrada de caracteres (&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_getstr&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de entrada de cadeas (&amp;#039;&amp;#039;getstr&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_mouse&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de manexo de rato &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_move&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de posicionamento do cursor &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_initscr&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de inicialización da librería &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_window&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de manexo de ventanas &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_inopts&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de control de entrada e saída &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_terminfo&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións pra obter información do terminal&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_printw&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións pra visualizar (&amp;#039;&amp;#039;printf&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_refresh&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de volcado de datos no terminal (&amp;#039;&amp;#039;flushing&amp;#039;&amp;#039;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_scanw&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións pra ler datos do teclado (&amp;#039;&amp;#039;scanf&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_clear&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións pra borra-lo terminal (&amp;#039;&amp;#039;clear&amp;#039;&amp;#039;)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;man curs_panel&amp;#039;&amp;#039;&amp;#039;: Descripción das funcións de manexo dos paneis das ventanas.&lt;br /&gt;
&lt;br /&gt;
Case todas as funcións utilizan ventanas pra traballar. Unha ventana é unha zona da pantalla delimitada na que poderemos realizar tanto entrada como saída de información. Para poder referirnos ó terminal completo, a librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; dispón dunha ventana que sempre está creada chamada &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;stdscr&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; (e&amp;#039;&amp;#039;&amp;#039;st&amp;#039;&amp;#039;&amp;#039;an&amp;#039;&amp;#039;&amp;#039;d&amp;#039;&amp;#039;&amp;#039;ar &amp;#039;&amp;#039;&amp;#039;scr&amp;#039;&amp;#039;&amp;#039;een).&lt;br /&gt;
&lt;br /&gt;
A terminoloxía empregada para o nome das funcións é moi simple; cando a función traballa cunha ventana o seu nome comenza coa letra &amp;#039;&amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;#039;, mentras que si traballa coa ventana principal &amp;#039;&amp;#039;stdscr&amp;#039;&amp;#039; (o terminal completo) non. Ademáis, as funcións que moven de posición o cursor antes de facer o seu traballo comenzan con &amp;#039;&amp;#039;&amp;#039;mv&amp;#039;&amp;#039;&amp;#039;, de xeito que unha función que mova o cursor e que traballe cunha ventana comenzaría con &amp;#039;&amp;#039;&amp;#039;mvw&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Pra utilizar as funcións da librería &amp;#039;&amp;#039;ncurses&amp;#039;&amp;#039; é necesario incluír o ficheiro &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;curses.h&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; e enlazar o programa coa librería &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ncurses&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; mediante a opción &amp;#039;&amp;#039;&amp;#039;-l&amp;#039;&amp;#039;&amp;#039; do gcc do seguinte xeito&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;gcc &amp;#039;&amp;#039;programa.c&amp;#039;&amp;#039; -o &amp;#039;&amp;#039;programa executable&amp;#039;&amp;#039; -lncurses&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
xa que as curses non forman parte da librería C estándar. A librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; define unha serie de constantes de moita utilidade a hora de programar aplicacións:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;LINES&amp;#039;&amp;#039;&amp;#039; : Número de liñas que ten o terminal.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;COLS&amp;#039;&amp;#039;&amp;#039; : Número de columnas do terminal.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;TRUE&amp;#039;&amp;#039;&amp;#039; : Constante que indica &amp;#039;certo&amp;#039; (1)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FALSE&amp;#039;&amp;#039;&amp;#039; : Constante pra indicar &amp;#039;falso&amp;#039; (0)&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ERR&amp;#039;&amp;#039;&amp;#039; : Constante que devolven as funcións de &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; cando se produce un erro.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OK&amp;#039;&amp;#039;&amp;#039; : Constante que devolven as funcións de &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; cando traballan ben.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;bool&amp;#039;&amp;#039;&amp;#039; : Tipo de datos pra definir variables que poden tomar os valores &amp;#039;&amp;#039;TRUE&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;FALSE&amp;#039;&amp;#039; indicados anteriormente.&lt;br /&gt;
&lt;br /&gt;
=== Inicialización e Peche da Librería. ===&lt;br /&gt;
&lt;br /&gt;
Pra utilizar a librería curses nun programa é necesario chamar en primeiro lugar a unha función encargada da inicialización da librería chamada &amp;#039;&amp;#039;&amp;#039;initscr()&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_initscr&amp;#039;&amp;#039;), esta función encárgase de inicializar as estructuras que necesita a librería e de obter a información do terminal. Antes de rematar, o programa debe &amp;#039;&amp;#039;pechar as curses&amp;#039;&amp;#039; pra que o terminal recupere o seu modo de funcionamento normal mediante a función &amp;#039;&amp;#039;&amp;#039;endwin()&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_initscr&amp;#039;&amp;#039;). Hai moitas outras funcións de inicialización comúns que afectan sobre todo o xeito de coller a entrada de usuario:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;cbreak()&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;nocbreak()&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_inopts&amp;#039;&amp;#039;): cbreak() indica que cando lemos unha tecla do terminal (&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;), o código da mesma pase a estar dispoñible sin esperar a que o usuario pulse o &amp;quot;Enter&amp;quot;. Con nocbreak(), o carácter non estará dispoñible hasta que o usuario pulse &amp;quot;Enter&amp;quot;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;echo()&amp;#039;&amp;#039;&amp;#039; ou &amp;#039;&amp;#039;&amp;#039;noecho()&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_inopts&amp;#039;&amp;#039;): echo() indica que cando lemos unha tecla do terminal (&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;) a pulsación sairá na pantalla. Con noecho() se indica que cando o usuario pulse a tecla (&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;) a pulsación non se visualizará.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;keypad(WINDOW *win,bool bf)&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_inopts&amp;#039;&amp;#039;): Activa ou desactiva o teclado numérico do terminal na ventana indicada. É imprescindible chamar a esta función pra que traballen algunhas teclas especiais como as flechas ou as teclas de función.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;start_color()&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;man curs_color&amp;#039;&amp;#039;): Si queremos utilizar cores no programa, é necesario iniciar a librería coa función start_color().&lt;br /&gt;
&lt;br /&gt;
Xa que a inicialización das curses pode requerir varias tarefas e convinte (pra clarificar o programa e para manexo máis sinxelo do código) definir unha función donde se realicen todas as tarefas de inicialización. Tamén é habitual facer unha función de finalización. Un exemplo podería ser:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
//Inicialización da librería curses&lt;br /&gt;
//&lt;br /&gt;
void  inicia_terminal(void)  {&lt;br /&gt;
  // Inicialización da librería&lt;br /&gt;
  initscr();&lt;br /&gt;
  // Non se espera polo Enter nos getch()&lt;br /&gt;
  cbreak();&lt;br /&gt;
  // Non se visualiza a tecla pulsada ó facer o getch()&lt;br /&gt;
  noecho();&lt;br /&gt;
  // Se habilitan as teclas especiais&lt;br /&gt;
  keypad(stdscr,TRUE);&lt;br /&gt;
  // Se inicializan as estructuras de manexo de cores&lt;br /&gt;
  start_color();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Finalización (peche) das curses.&lt;br /&gt;
//&lt;br /&gt;
void pecha_terminal(void) {&lt;br /&gt;
 endwin();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Outras funcións de uso común na inicialización das &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; poden verse nas páxinas do manual (&amp;#039;&amp;#039;&amp;#039;man curs_inopts&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;man curs_outopts&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
=== Visualización e Posicionamento do Cursor ===&lt;br /&gt;
&lt;br /&gt;
A visualización nos terminais faise a través dun [[gal:Buffer|buffer]] pra axilizar a saída por pantalla. Unha vez que temos &amp;#039;pintada&amp;#039; a pantalla debemos forzar a súa saída o terminal chamando a unha das funcións de &amp;#039;refresco&amp;#039; das curses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int refresh(void);&lt;br /&gt;
 int wrefresh(WINDOW *win);&lt;br /&gt;
 int wnoutrefresh(WINDOW *win);&lt;br /&gt;
 int doupdate(void);&lt;br /&gt;
 int redrawwin(WINDOW *win);&lt;br /&gt;
 int wredrawwin(WINDOW *win, int begline, int numlines);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É necesario chamar a unha destas funcións pra ober a saída no terminal. A función &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;wrefresh&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; chama en primeiro lugar a &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;wnoutrefresh&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; que copia a ventana na pantalla virtual, e logo a &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;doupdate&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; que se encarga de comprobar as diferencias co contido actual da pantalla e a actualiza. Si se queren visualizar varias ventanas o mesmo tempo é máis efectivo chamar a &amp;#039;&amp;#039;wrefresh&amp;#039;&amp;#039; pra cada ventana e facer &amp;#039;&amp;#039;&amp;#039;unha soa chamada&amp;#039;&amp;#039;&amp;#039; a &amp;#039;&amp;#039;doupdate&amp;#039;&amp;#039; que realizar un &amp;#039;&amp;#039;wrefresh&amp;#039;&amp;#039; pra cada unha. As funcións &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;redrawwin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;wredrawwin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; indican que algunhas liñas da pantalla deberán ser eliminadas na seguinte actualización.&lt;br /&gt;
&lt;br /&gt;
Pra borrar a pantalla &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; proporciona as seguintes funcións:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int clear(void);&lt;br /&gt;
 int wclear(WINDOW *win);&lt;br /&gt;
 int erase(void);&lt;br /&gt;
 int werase(WINDOW *win);&lt;br /&gt;
 int clearok(WINDOW *win, bool bf);&lt;br /&gt;
 int clrtobot(void);&lt;br /&gt;
 int wclrtobot(WINDOW *win);&lt;br /&gt;
 int clrtoeol(void);&lt;br /&gt;
 int wclrtoeol(WINDOW *win);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As funcións que comenzan por _w_, como sempre, traballan cunha ventana mentras que as outras o fan coa ventana principal &amp;#039;&amp;#039;stdscr&amp;#039;&amp;#039; (a pantalla). &amp;#039;&amp;#039;&amp;#039;clear&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;erase&amp;#039;&amp;#039;&amp;#039; borran a ventana, pero mentras &amp;#039;&amp;#039;erase&amp;#039;&amp;#039; o fai poñendo blancos no interior, &amp;#039;&amp;#039;clear&amp;#039;&amp;#039; chama despois a función &amp;#039;&amp;#039;&amp;#039;clearok&amp;#039;&amp;#039;&amp;#039; con &amp;#039;&amp;#039;&amp;#039;bf&amp;#039;&amp;#039;&amp;#039; a TRUE o que forza o repintado de toda a pantalla dende 0. &amp;#039;&amp;#039;&amp;#039;clrtobot&amp;#039;&amp;#039;&amp;#039; borra o contido da pantalla dende o cursor ó final da pantalla e &amp;#039;&amp;#039;&amp;#039;clrtoeol&amp;#039;&amp;#039;&amp;#039; dende o cursor ata final de liña.&lt;br /&gt;
&lt;br /&gt;
As funcións de manexo do cursor son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int move(int y, int x);&lt;br /&gt;
 int wmove(WINDOW *win, int y, int x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que poñen o cursor na posición &amp;#039;&amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;#039; (fila) e &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; (columna). &amp;#039;&amp;#039;wmove&amp;#039;&amp;#039; traballa cunha ventana que ten que estar creada, mentras que &amp;#039;&amp;#039;move&amp;#039;&amp;#039; traballa con &amp;#039;&amp;#039;stdscr&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Pra visualizar información dispoñemos das seguintes funcións:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int addch(chtype ch);&lt;br /&gt;
 int waddch(WINDOW *win, chtype ch);&lt;br /&gt;
 int mvaddch(int y, int x, chtype ch);&lt;br /&gt;
 int wmvaddch(WINDOW *win, int y, int x, chtype ch);&lt;br /&gt;
 int echochar(chtype ch);&lt;br /&gt;
 int wechochar(WINDOW *win, chtype ch);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estas funcións visualizan unha letra na pantalla ou nunha ventana (&amp;#039;&amp;#039;&amp;#039;w&amp;#039;&amp;#039;&amp;#039;...), as que empezan por &amp;#039;&amp;#039;&amp;#039;mv&amp;#039;&amp;#039;&amp;#039; colocan tamén o cursor. Unha vez visualizada a letra o cursor avanza á posición seguinte. Si non hi máis posicións e &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;scrollok&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039; está activo, a pantalla/ventana fará un [[gal:Scroll|scroll]] do seu contido hacia arriba. &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;echochar&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;wechochar&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; fan o mesmo pero actualizan a pantalla chamando á función &amp;#039;&amp;#039;(w)refresh&amp;#039;&amp;#039;. A librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; ten predefinidos unha serie de caracteres especiais pra facer debuxos (caixas... etc). Eses caracteres poden consultarse na páxina do manual (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;man curs_addch&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;) e son constantes que comenzan por &amp;#039;&amp;#039;&amp;#039;ACS&amp;#039;&amp;#039;&amp;#039;_. Si o terminal non soporta eses dibuxos, os sustituirá pola letra [[gal:ASCII|ASCII]] máis axeitada.&lt;br /&gt;
&lt;br /&gt;
Pra visualizar información máis complexa, &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; dispón de unha serie de funcións análogas á función &amp;#039;&amp;#039;&amp;#039;printf&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int printw(char *formato [, arg] ...);&lt;br /&gt;
 int wprintw(WINDOW *win, char *formato [, arg] ...);&lt;br /&gt;
 int mvprintw(int y, int x, char *formato [, arg] ...);&lt;br /&gt;
 int mvwprintw(WINDOW *win, int y, int x, char *formato [, arg] ...);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Entrada de Datos. ===&lt;br /&gt;
&lt;br /&gt;
A función complementaria á familia de &amp;#039;&amp;#039;&amp;#039;addch()&amp;#039;&amp;#039;&amp;#039; é a familia &amp;#039;&amp;#039;&amp;#039;wgetch()&amp;#039;&amp;#039;&amp;#039;, que lee da entrada estándar o valor dunha tecla:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int getch(void);&lt;br /&gt;
 int wgetch(WINDOW *win);&lt;br /&gt;
 int mvgetch(int y, int x);&lt;br /&gt;
 int mvwgetch(WINDOW *win,int y,int x);&lt;br /&gt;
 int ungetch(int ch);&lt;br /&gt;
 int has_key(int ch);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O comportamento das funcións &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; varía según si se chamou a &amp;#039;&amp;#039;&amp;#039;cbreak;&amp;#039;&amp;#039;&amp;#039; (a función non espera pola pulsación do Enter) ou a &amp;#039;&amp;#039;&amp;#039;nocbreak&amp;#039;&amp;#039;&amp;#039; (é necesario pulsar Enter despois da tecla) e a &amp;#039;&amp;#039;&amp;#039;noecho&amp;#039;&amp;#039;&amp;#039; (a letra non sae na pantalla) ou a &amp;#039;&amp;#039;&amp;#039;echo&amp;#039;&amp;#039;&amp;#039; (a letra sae na pantalla). Mediante a función &amp;#039;&amp;#039;&amp;#039;int nodelay(WINDOW *w,bool bf)&amp;#039;&amp;#039;&amp;#039; pódese controlar si &amp;#039;&amp;#039;&amp;#039;getch&amp;#039;&amp;#039;&amp;#039; espera pola pulsación da tecla (bf=TRUE) ou non (bf=FALSE). Ademáis si se chama á función &amp;#039;&amp;#039;&amp;#039;keypad&amp;#039;&amp;#039;&amp;#039; con TRUE, se habilita a lectura das teclas especiais (como as teclas de función), devolvendo éstas unha das constantes indicadas na páxina do manual (&amp;#039;&amp;#039;&amp;#039;man curs_getch&amp;#039;&amp;#039;&amp;#039;) que empezan por &amp;#039;&amp;#039;&amp;#039;KEY&amp;#039;&amp;#039;&amp;#039;_. A función &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;ungetch&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; devolve o caracter indicado ó buffer do teclado, e &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;has_key&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; nos indicará si o terminal soporta a tecla especial que lle pasamos como parámetro.&lt;br /&gt;
&lt;br /&gt;
Na librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; están dispoñibles tamén versións especiais das funcións de entrada estándar da librería C:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;a) &amp;#039;&amp;#039;&amp;#039;man curs_getstr&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int getstr(char *str);&lt;br /&gt;
 int getnstr(char *str, int n);&lt;br /&gt;
 int mvgetstr(int y, int x, char *str);&lt;br /&gt;
 int mvgetnstr(int y, int x, char *str, int n);&lt;br /&gt;
 int wgetstr(WINDOW *win, char *str);&lt;br /&gt;
 int wgetnstr(WINDOW *win, char *str, int n);&lt;br /&gt;
 int mvwgetstr(WINDOW *win, int y, int x, char *str);&lt;br /&gt;
 int mvwgetnstr(WINDOW *win, int y, iny x, char *str, int n);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;b)&amp;#039;&amp;#039;&amp;#039;man curs_scanw&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int scanw(char *fmt [, arg] ...);&lt;br /&gt;
 int mvscanw(int y, int x, char *fmt [, arg] ...);&lt;br /&gt;
 int wscanw(WINDOW *win, char *fmt [, arg] ...);&lt;br /&gt;
 int mvwscanw(WINDOW *win, int y, int x, char *fmt [, arg] ...);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creación e Manexo de Ventanas ===&lt;br /&gt;
&lt;br /&gt;
Unha ventana é unha área da pantalla na que se pode operar como si se tratara dunha pantalla independiente. Todas as funcións das curses que acceden á pantalla teñen versións (que teñen &amp;#039;&amp;#039;&amp;#039;w_ ou &amp;#039;&amp;#039;&amp;#039;mvw__ ó principio) que incorporan como parámetro a ventana á que se refiren. A librería &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; proporciona moitas funcións pra manexar ventanas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x);&lt;br /&gt;
 int delwin(WINDOW *win);&lt;br /&gt;
 int mvwin(WINDOW *win, int y, int x);&lt;br /&gt;
 WINDOW *subwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x);&lt;br /&gt;
 WINDOW *derwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x);&lt;br /&gt;
 int mvderwin(WINDOW *win, int par_y, int par_x);&lt;br /&gt;
 WINDOW *dupwin(WINDOW *win);&lt;br /&gt;
 int wresize(WINDOW *win, int lines, int cols);&lt;br /&gt;
 void wsyncup(WINDOW *win);&lt;br /&gt;
 void syncok(WINDOW *win, bool bf);&lt;br /&gt;
 void wcursyncup(WINDOW *win);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* A función &amp;#039;&amp;#039;&amp;#039;newwin&amp;#039;&amp;#039;&amp;#039; crea unha nova estructura de tipo WINDOW que representará unha área de traballo na pantalla que comenza nas coordenadas &amp;#039;&amp;#039;&amp;#039;begin_y,begin_x&amp;#039;&amp;#039;&amp;#039; (fila,columna) sendo a primeira posición a 0,0 e que mide &amp;#039;&amp;#039;nlines&amp;#039;&amp;#039; liñas e &amp;#039;&amp;#039;ncols&amp;#039;&amp;#039; columnas. Si &amp;#039;&amp;#039;nlines&amp;#039;&amp;#039; e 0, as liñas serán as que faltan dende &amp;#039;&amp;#039;begin_y&amp;#039;&amp;#039; ata final da pantalla, e si &amp;#039;&amp;#039;ncols&amp;#039;&amp;#039; é 0 as columnas son as que van dende &amp;#039;&amp;#039;begin_x&amp;#039;&amp;#039; ata final da pantalla, deste xeito &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;newwin(0,0,0,0)&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; creará unha ventana que ocupa todo o terminal.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;delwin&amp;#039;&amp;#039;&amp;#039; elimina a ventana indicada liberando todos os recursos que tiña ocupados. Si a ventana ten &amp;#039;&amp;#039;subventanas&amp;#039;&amp;#039;, é necesario eliminalas antes. &amp;#039;&amp;#039;Non se borrará a ventana da pantalla, simplemente se elimina da memoria&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mvwin&amp;#039;&amp;#039;&amp;#039; coloca a ventana indicada na posición &amp;#039;&amp;#039;y,x&amp;#039;&amp;#039; que se especifique. Non se permite mover unha ventana máis alá dos límites do terminal.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;subwin&amp;#039;&amp;#039;&amp;#039; crea unha ventana &amp;#039;&amp;#039;filla&amp;#039;&amp;#039; de outra. As coordenadas que se indican na creación son &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;relativas á pantalla completa&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. Antes de refrescar unha ventana con subventanas con &amp;#039;&amp;#039;wrefresh&amp;#039;&amp;#039; é necesario chamar á función &amp;#039;&amp;#039;&amp;#039;int touchwin(WINDOW *win);&amp;#039;&amp;#039;&amp;#039; pra esa ventana.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;derwin&amp;#039;&amp;#039;&amp;#039; e similar a &amp;#039;&amp;#039;subwin&amp;#039;&amp;#039; pero as coordenadas indicadas na creación son relativas á ventana pai.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mvderwin&amp;#039;&amp;#039;&amp;#039; move unha ventana filla xa sexa creada con &amp;#039;&amp;#039;subwin&amp;#039;&amp;#039; como con &amp;#039;&amp;#039;derwin&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;dupwin&amp;#039;&amp;#039;&amp;#039; crea un duplicado exacto da ventana indicada.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;wresize&amp;#039;&amp;#039;&amp;#039; cambia o tamaño dunha ventana ó tamaño indicado.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;wsyncup&amp;#039;&amp;#039;&amp;#039; marca pra actualizar todas as zonas que cambiaron nos fillos da ventana indicada. Si se chama a &amp;#039;&amp;#039;&amp;#039;syncok&amp;#039;&amp;#039;&amp;#039; con &amp;#039;&amp;#039;bf&amp;#039;&amp;#039; a TRUE, esta función chamarase automáticamente cando se produzca algún cambio.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;wcursyncup&amp;#039;&amp;#039;&amp;#039; actualiza a posición do cursor en todos os pais da ventana.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;As funcións de subventanas (subwin, derwin, mvderwin, syncok, wsyncup, wcursyncup) &amp;#039;&amp;#039; son incompletas, están pouco probadas e poden ter [[gal:Bug|bugs]]&lt;br /&gt;
&lt;br /&gt;
O principal inconvinte das ventanas das &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; é que non permiten xestionar de xeito eficiente as ventanas solapadas. Pra solucionar este tema xurdiu a librería &amp;#039;&amp;#039;&amp;#039;panel&amp;#039;&amp;#039;&amp;#039;. A librería &amp;#039;&amp;#039;panel&amp;#039;&amp;#039; proporciona unha serie de funcións que permiten o solapamento de ventanas que normalmente ven acompañando a &amp;#039;&amp;#039;curses&amp;#039;&amp;#039;. Si a queremos utilizar debemos incluir o ficheiro &amp;#039;&amp;#039;&amp;#039;panel.h&amp;#039;&amp;#039;&amp;#039; e indicarlle ó compilador que a enlace mediante o parámetro &amp;#039;&amp;#039;&amp;#039;-lpanel&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;gcc &amp;#039;&amp;#039;programa.c&amp;#039;&amp;#039; -o &amp;#039;&amp;#039;executable&amp;#039;&amp;#039; -lncurses -lpanel&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Os &amp;#039;&amp;#039;paneles&amp;#039;&amp;#039; están asociados con ventanas creadas con &amp;#039;&amp;#039;newwin&amp;#039;&amp;#039;, e perminten o manexo de ventanas superpostas.As principais funcións da librería &amp;#039;&amp;#039;panel&amp;#039;&amp;#039; son as seguintes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 PANEL *new_panel(WINDOW *win);&lt;br /&gt;
 void update_panels(void);&lt;br /&gt;
 int del_panel(PANEL *pan);&lt;br /&gt;
 int hide_panel(PANEL *pan);&lt;br /&gt;
 int show_panel(PANEL *pan);&lt;br /&gt;
 int top_panel(PANEL *pan);&lt;br /&gt;
 int bottom_panel(PANEL *pan);&lt;br /&gt;
 int move_panel(PANEL *pan, int starty, int startx);&lt;br /&gt;
 int replace_panel(PANEL *pan,WINDOW *win);&lt;br /&gt;
 PANEL *panel_above(const PANEL *pan);&lt;br /&gt;
 PANEL *panel_below(const PANEL *pan);&lt;br /&gt;
 int set_panel_userptr(PANEL *pan, const void *ptr);&lt;br /&gt;
 const void *panel_userptr(const PANEL *pan);&lt;br /&gt;
 WINDOW *panel_window(const PANEL *pan);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;new_panel&amp;#039;&amp;#039;&amp;#039; crea unha estructura &amp;#039;&amp;#039;&amp;#039;PANEL&amp;#039;&amp;#039;&amp;#039; asociándoa con unha ventana e colocándoa enriba de todas as creadas con anterioridade. Devolve NULL en caso de erro e se non a dirección do PANEL creado.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;update_panels&amp;#039;&amp;#039;&amp;#039; actualiza a pantalla &amp;#039;&amp;#039;virtual&amp;#039;&amp;#039; pra reflexar os cambios, pero &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;non os pon na pantalla real&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;. Pra visualizar os cambios realmente, será necesario chamara &amp;#039;&amp;#039;&amp;#039;doupdate&amp;#039;&amp;#039;&amp;#039;. É posible (e aconsellable) chamar a &amp;#039;&amp;#039;&amp;#039;update_panels&amp;#039;&amp;#039;&amp;#039; as veces que faga falta antes de chamar a &amp;#039;&amp;#039;&amp;#039;doupdate&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;del_panel&amp;#039;&amp;#039;&amp;#039; elimina o panel e todos os recursos que ocupe. &amp;#039;&amp;#039;A ventana a que está asociado o panel &amp;#039;&amp;#039;&amp;#039;non&amp;#039;&amp;#039;&amp;#039; se elimina&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;hide_panel&amp;#039;&amp;#039;&amp;#039; oculta o panel da vista.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;show_panel&amp;#039;&amp;#039;&amp;#039; fai que un panel que non está á vista se coloque visible e por enriba do resto.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;top_panel&amp;#039;&amp;#039;&amp;#039; pon o panel por enriba do resto.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;bottom_panel&amp;#039;&amp;#039;&amp;#039; pon o panel debaixo dos demáis.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;move_panel&amp;#039;&amp;#039;&amp;#039; move o panel á posición indicada. Non cambia a súa posición na pila de paneis (continúa a ter os mesmos enriba e debaixo). Esta é a función apropiada pra mover unha ventana.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;replace_panel&amp;#039;&amp;#039;&amp;#039; cambia a ventana asociada ó panel pola ventana indicada. Non modifica a súa posición na pila de paneis.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;panel_above&amp;#039;&amp;#039;&amp;#039; devolve o panel que se atopa xusto enriba do indicado. Si lle pasamos como argumento NULL devolverá o primeiro panel (o de abaixo de todo).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;panel_below&amp;#039;&amp;#039;&amp;#039; devolve o panel que se atoba xusto debaixo do indicado. Si lle pasamos como argumento NULL devolverá o panel de enriba de todo.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;set_panel_userptr&amp;#039;&amp;#039;&amp;#039; pon un valor no punteiro do usuario do panel. Este punteiro de usuario é útil pra poder asociar datos co panel.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;panel_userptr&amp;#039;&amp;#039;&amp;#039; devolve o punteiro de usuario asociado ó panel.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;panel_window&amp;#039;&amp;#039;&amp;#039; devolve un punteiro á ventana asociada co panel.&lt;br /&gt;
&lt;br /&gt;
=== Debuxo de Liñas e Bordes. ===&lt;br /&gt;
&lt;br /&gt;
As &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; proporcionan unha multitude de funcións pra debuxar liñas e bordes pras ventanas utilizando os caracteres que se desexe. As funcións principais son:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
 int border(chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br);&lt;br /&gt;
 int wborder(WINDOW *win, chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br);&lt;br /&gt;
 int box(WINDOW *win, chtype verch, chtype horch);&lt;br /&gt;
 int hline(chtype ch, int n);&lt;br /&gt;
 int whline(WINDOW *win, chtype ch, int n);&lt;br /&gt;
 int mvhline(int y, int x, chtype ch, int n);&lt;br /&gt;
 int mvwhline(WINDOW *win, int y, int x, chtype ch, int n);&lt;br /&gt;
 int vline(chtype ch, int n);&lt;br /&gt;
 int wvline(WINDOW *win, chtype ch, int n);&lt;br /&gt;
 int mvvline(int y, int x, chtype ch, int n);&lt;br /&gt;
 int mvwvline(WINDOW *win, int y, int x, chtype ch, int n);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;border&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;wborder&amp;#039;&amp;#039;&amp;#039; debuxan un marco á ventana indicada (&amp;#039;&amp;#039;border&amp;#039;&amp;#039; traballa con &amp;#039;&amp;#039;stdscr&amp;#039;&amp;#039;). Os parámetros indican os caracteres que se utilizarán pra face-lo debuxo: &amp;#039;&amp;#039;&amp;#039;ls&amp;#039;&amp;#039;&amp;#039; esquerda, &amp;#039;&amp;#039;&amp;#039;rs&amp;#039;&amp;#039;&amp;#039; dereita, &amp;#039;&amp;#039;&amp;#039;ts&amp;#039;&amp;#039;&amp;#039; arriba, &amp;#039;&amp;#039;&amp;#039;bs&amp;#039;&amp;#039;&amp;#039; abaixo, &amp;#039;&amp;#039;&amp;#039;tl&amp;#039;&amp;#039;&amp;#039; esquina superior esquerda, &amp;#039;&amp;#039;&amp;#039;tr&amp;#039;&amp;#039;&amp;#039; esquina superior dereita, &amp;#039;&amp;#039;&amp;#039;bl&amp;#039;&amp;#039;&amp;#039; esquina inferior esquerda e &amp;#039;&amp;#039;&amp;#039;br&amp;#039;&amp;#039;&amp;#039; esquina inferior dereita. Si algún valor é 0 &amp;#039;&amp;#039;curses&amp;#039;&amp;#039; utiliza uns caracteres por defecto.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;box&amp;#039;&amp;#039;&amp;#039; en realidade é unha chamada a &amp;#039;&amp;#039;wborder(win,verch,verch,horch,horch,0,0,0,0)&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;hline&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;whline&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;mvhline&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;mvwhline&amp;#039;&amp;#039;&amp;#039; debuxan unha liña horizontal de &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; caracteres &amp;#039;&amp;#039;&amp;#039;ch&amp;#039;&amp;#039;&amp;#039; de lonxitude comenzando na posición do cursor e na ventana actual ou especificada. &amp;#039;&amp;#039;A posición do cursor non cambia&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;vline&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;wvline&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;mvvline&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;mvwvline&amp;#039;&amp;#039;&amp;#039; debuxan unha liña vertical de &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; caracteres &amp;#039;&amp;#039;&amp;#039;ch&amp;#039;&amp;#039;&amp;#039; de lonxitude comenzando na posición do cursor e na ventana actual ou especificada. &amp;#039;&amp;#039;A posición do cursor non cambia&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Manexo das Cores. ===&lt;br /&gt;
&lt;br /&gt;
=== Creación de Formularios. ===&lt;br /&gt;
&lt;br /&gt;
=== Manexo do Rato. ===&lt;br /&gt;
&lt;br /&gt;
=== Exemplos. ===&lt;/div&gt;</summary>
		<author><name>Xavi</name></author>
	</entry>
</feed>