static void Main(string[] args) { const int SALTO = 20; const int ANCHO = 80; const int ALTO = 25; const int BUFFER = 1024; ListaDeFrases frases = new ListaDeFrases(); Linea linea = new Linea(); Console.SetBufferSize(BUFFER, BUFFER); Console.SetWindowSize(ANCHO, ALTO); string nombreFichero = args.Length == 1 ? args[0] : ""; Cursor cursor; cursor.x = 0; cursor.y = 1; bool insercion = true; string primeraLinea; bool salir = false; ConsoleKeyInfo tecla; if (File.Exists(nombreFichero)) { frases.Cargar(nombreFichero); } linea.LineaActual = frases.Get(cursor.y - 1); do { primeraLinea = "Línea:" + cursor.y + " Columna:" + (cursor.x + 1) + (insercion? " INS" : " SOB") + " Documento:" + nombreFichero; DibujarPrimeraLinea(primeraLinea); DibujarTexto(frases); Console.SetCursorPosition(0, cursor.y); Console.Write(linea.LineaActual); Console.SetCursorPosition(cursor.x, cursor.y); tecla = Console.ReadKey(true); if (tecla.Key == ConsoleKey.Insert) { insercion = !insercion; } if (EsDibujable(tecla.Key)) { linea.Insertar(cursor.x, tecla.KeyChar, insercion); cursor.x++; } frases.Anyadir(linea.LineaActual, cursor.y - 1); // TO DO Encapsular en funciones if (tecla.Key == ConsoleKey.Enter) { cursor.x = 0; linea.LineaActual = frases.Get(cursor.y); cursor.y++; } else if (tecla.Key == ConsoleKey.Backspace) { linea.Borrar(cursor.x); if (cursor.x > 0) { cursor.x--; } } else if (tecla.Key == ConsoleKey.Delete) { linea.Suprimir(cursor.x); } else if (tecla.Key == ConsoleKey.Home) { cursor.x = 0; } else if (tecla.Key == ConsoleKey.End) { cursor.x = frases.Get(cursor.y - 1).Length; } else if (tecla.Key == ConsoleKey.LeftArrow) { if (cursor.x > 0) { cursor.x--; } } else if (tecla.Key == ConsoleKey.RightArrow) { if (cursor.x < linea.LineaActual.Length) { cursor.x++; } } else if (tecla.Key == ConsoleKey.UpArrow) { if (cursor.y - 1 > 0) { cursor.y--; linea.LineaActual = frases.Get(cursor.y - 1); ComprobarLongitudCadena(ref cursor.x, cursor.y, frases); } } else if (tecla.Key == ConsoleKey.DownArrow) { if (cursor.y < frases.Cantidad) { cursor.y++; linea.LineaActual = frases.Get(cursor.y - 1); ComprobarLongitudCadena(ref cursor.x, cursor.y, frases); } } else if (tecla.Key == ConsoleKey.PageDown) { if (cursor.y + SALTO > frases.Cantidad) { cursor.y = frases.Cantidad; } else { cursor.y += 20; } linea.LineaActual = frases.Get(cursor.y - 1); ComprobarLongitudCadena(ref cursor.x, cursor.y, frases); } else if (tecla.Key == ConsoleKey.PageUp) { if (cursor.y - SALTO < 1) { cursor.y = 1; } else { cursor.y -= SALTO; } linea.LineaActual = frases.Get(cursor.y - 1); ComprobarLongitudCadena(ref cursor.x, cursor.y, frases); } else if (tecla.Key == ConsoleKey.F10) { salir = true; } } while (!salir); Console.WriteLine(); if (GuardarCambios()) { if (nombreFichero == "") { nombreFichero = PedirNombreFichero(); } frases.Guardar(nombreFichero); } Console.WriteLine(); }