viernes, 29 de junio de 2012

.NET y NCurses

Quien haya visto lo de ncurses, habrá pensado que eso es de la época de las cavernas. Simplemente quería jugar un poco y probar como se relaciona .net con librerías externas a su propio sistema.

El ejemplo de código es para linux (GNU/Linux, para que no se enfade nadie), con la librería libncurses.so.5 instalada en el sistema.
using System;
using System.Runtime.InteropServices;

public class Curses {
 const string Library = "libncurses.so.5";

 [DllImport(Library)]
 private extern static IntPtr initscr( );

 [DllImport(Library)]
 private extern static int endwin( );

 [DllImport(Library)]
 private extern static int mvwprintw(IntPtr window,
 int y, int x, string message);

 [DllImport(Library)]
 private extern static int refresh(IntPtr window);

 [DllImport(Library)]
 private extern static int wgetch(IntPtr window);

 private IntPtr window;
 
 public Curses( ) 
 {
  window = initscr( );
 }
 ~Curses( ) {
  int result = endwin( );
 }
 public int Print(int x, int y, string message) 
 {
  return mvwprintw(window, y, x, message);
 }
 public int Refresh( ) 
 {
  return refresh(window);
 }
 public char GetChar( ) 
 {
  return (char)wgetch(window);
 }
}
public class HelloCurses 
{
 public static void Main(string [] args) 
 {
  Curses Curses = new Curses( );
  Curses.Print(10, 10, "Hello, curses!");
  //Curses.Refresh( );
  char c = Curses.GetChar( );
  Curses = null;
 }
} 
Tuve complicaciones con la librería, porque no la encontraba.
 Lo que tuve que hacer es buscar la librería ncurses que tenía en el sistema, con el comando locate, exactamente lo que escribí fue: 'locate ncurses', con el nombre que me dio, lo puse en el programa y listo.

En este caso concreto el nombre de la librería es libncurses.so.5, como indica la captura de pantalla.

El resultado de la ejecución

No hay comentarios:

Publicar un comentario