Minotauro nº2:(TEXT_005.002):17/07/1994 << Back To Minotauro nº 2
Una buena aplicación de los códigos ANSI...Bombas!... ------------------------------------------------------------------------------- Bueno, por si no lo sabían, el ANSI es un controlador que posee varias funciones de manejo de pantalla y teclado. Esto último es lo que nos interesa a nosotros. [Si no tienen el ANSI.SYS, por favor llamen a Microsoft y compren el MS_DOS (original por supuesto :-)]...Si consiguieron el controlador, empezamos: La gran ventaja de éste driver, es la función de redireccionamiento del tecla_ do. Qué significa esto?? Bueno, esto significa, que éste driver, programado de una manera tal, puede CAMBIAR LA FUNCION de una tecla específica. Got it? A lo que voy es, que una vez que se cargó un ANSI, puedo redefinir las las teclas de ese sistema.. Por ejemplo : en vez de escribir "DIR C:\WORKS", podría tocar la tecla "A" directamente. La lógica sería ésta: A <== DIR C:\WORKS <ENTER> Entonces cada vez que toque la "A", me va a aperecer el contenido de ese dir. Esta propiedad, se podría utilizar en otro tipo de aplicaciones :-) Por ese mo_ tivo, las "bombas" ANSI son de gran utilidad... Si nosotros logramos incorporar una de estas bombas en un sistema, podemos tener el control del sistema, para futuras necesidades. Un ejemplo: Tengo un mal día.....todo me sale mal.....y biene un énte computacional a joder las pelotas. Entonces yo, ya ducho en el tema de las bom_ bas ANSI, le programo una bombita rápida, cosa que apenas la corra, le redirec_ cione la barra espaciadora para que le formatée el disco. Este tipo no te puede echar la culpa, ya que lo único que le diste fue una linda pantalla de presen_ tación .ANS, pero siempre corremos el riego de que esta persona conozca el tema de las bombas ANSI y te cague....entonces nos jodemos. Acá biene la sintáxis de los códigos ANSI: Ojo, no hay que asustarse por los códigos raros que aparezcan, la sintáxis de los códigos es así y punto. ESC[x,yH Mover el cursor a una posicion absoluta de la pantalla. Donde 'x' es la Columna del cursor y 'y' es la Fila de cursor. En caso de que no se expliciten parámetros, el cursor es movido al principio de la pantalla. ESC[nA Mover el cursor en forma relativa para arriba. Donde 'n' es la cantidad de lineas que el cursor va a subir. En caso de que se llegue al tope de la pantalla, el cursor queda ahí quieto. ESC[nB Mover el cursor en forma relativa para abajo. Donde 'n' es la cantidad de lineas que el cursor va a bajar. En caso de que se llegue al fondo de la pantalla, el cursor queda ahí duro. ESC[nC Mover el cursor en forma relativa para la derecha. Donde 'n' es la cantidad de columnas que el cursor se va a adelantar. En caso de que llegue al fin de la linea, se queda ahí. ESC[nD Mover el cursor en forma relativa para la izquierda. Donde 'n' es la cantidad de columnas que el cursor va a retroceder. En caso de que llegue al principio de la pantalla, se queda ahí. ESC[s Salvar la posicion actual del cursor. Esta función no lleva parámetros. Al ejecutarse, la posición del cursor que_ da grabada, para ser restituída mas tarde con la próx. función: ESC[u Restaurar la posicion anterior del cursor. Esta función tampoco lleva parámetros. Lo que hace es mover el cursor a don_ de estaba en el momento de ejecutarse la función anterior. ESC[2J Borrar la pantalla. Ningún parámetro... Al ejecutarse borra la pantalla y mueve el cursor al principio de la pantalla. (0,0) ESC[K Borrar hacia abajo. Otra vez sin parámetros... Al ejecutarse borra desde la posición actual del cursor, hasta el fin de la pantalla. (Borra también el byte a donde apuntaba el cursor) ESC[tecla;"comando";13p Redireccionamiento del teclado. Ahora bien, ESTA es la función que nos interesa... En TECLA, va el código de la tecla que queremos redireccionar... Va el códi_ go, NO la tecla en sí, ok?? Cada tecla tiene un código, y cada combinación (por ejemplo ALT_Q) tiene otro distinto. Ahora les mandamos una lista con los códigos de TODAS las combinaciónes. (Si se nos olvidó alguna, plís ha_ gannoslo saber). Separada de la TECLA por un ; (punto y coma), empieza el string con el que queremos reemplazar la tecla...Este string o comando va entre comillas dob_ les o simples ('' ó ""), es lo mismo. Ese 13 que está entre "COMANDO"; y p (minúscula) es el código de ENTER, ya que el Enter no lo podemos representar con ASCIIs. Y esa p minúscula, es la función. Por ejemplo si queremos asignarle a F1 (código 0;59) que pida un directorio, quedaría esto: ESC[0;59;"dir";13p Y si queremos que formatée el disco, quedaría esto: ESC[0;59;"Echo S|format c:/u";13p (El ECHO S|, es para la confirmación del format, en Castellano obvio. Si fuera en Inglés, seria ECHO Y|.) Para poder juntar 2 comandos se esriben directamente, sin dejar espacio, Ej: Con esto estaría redireccionando F1 y F2 para que formateen 2 drives: ESC[0;59;"Echo S|format c:/u >nul";13pESC[0;60;"Echo S|format d:/u >nul";13p Tecla Código CAPS&+código CTRL+código ALT+código ─────────────────────────────────────────────────────────────────────────── F1 0;59 0;84 0;94 0;104 F2 0;60 0;85 0;95 0;105 F3 0;61 0;86 0;96 0;106 F4 0;62 0;87 0;97 0;107 F5 0;63 0;88 0;98 0;108 F6 0;64 0;89 0;99 0;109 F7 0;65 0;90 0;100 0;110 F8 0;66 0;91 0;101 0;111 F9 0;67 0;92 0;102 0;112 F10 0;68 0;93 0;103 0;113 F11 0;133 0;135 0;137 0;139 F12 0;134 0;136 0;138 0;140 Home (Numeric Keypad) 0;71 55 0;119 ── Up Arrow (Numeric Keypad) 0;72 56 (0;141) ── Page Up (Numeric Keypad) 0;73 57 0;132 ── Left Arrow (Numeric Keypad) 0;75 52 0;115 ── Right Arrow (Numeric Keypad) 0;77 54 0;116 ── End (Numeric Keypad) 0;79 49 0;117 ── Down Arrow (Numeric Keypad) 0;80 50 (0;145) ── Page Down (Numeric Keypad) 0;81 51 0;118 ── Insert (Numeric Keypad) 0;82 48 (0;146) ── Del (Numeric Keypad) 0;83 46 (0;147) ── Home (Gray Keypad) (224;71) (224;71) (224;119) (224;151) Up Arrow (Gray Keypad) (224;72) (224;72) (224;141) (224;152) Page Up (Gray Keypad) (224;73) (224;73) (224;132) (224;153) Left Arrow (Gray Keypad) (224;75) (224;75) (224;115) (224;155) Right Arrow (Gray Keypad) (224;77) (224;77) (224;116) (224;157) End (Gray Keypad) (224;79) (224;79) (224;117) (224;159) Down Arrow (Gray Keypad) (224;80) (224;80) (224;145) (224;154) Page Down (Gray Keypad) (224;81) (224;81) (224;118) (224;161) Insert (Gray Keypad) (224;82) (224;82) (224;146) (224;162) Del (Gray Keypad) (224;83) (224;83) (224;147) (224;163) Print Scrn ── ── 0;114 ── Pause/Break ── ── 0;0 ── BackSpace 8 8 127 (0) Enter 13 ──- 10 (0 Tab 9 0;15 (0;148) (0;165) Nul 0;3 ── ── ── a 97 65 1 0;30 b 98 66 2 0;48 c 99 66 3 0;46 d 100 68 4 0;32 e 101 69 5 0;18 f 102 70 6 0;33 g 103 71 7 0;34 h 104 72 8 0;35 i 105 73 9 0;23 j 106 74 10 0;36 k 107 75 11 0;37 l 108 76 12 0;38 m 109 77 13 0;50 n 110 78 14 0;49 o 111 79 15 0;24 p 112 80 16 0;25 q 113 81 17 0;16 r 114 82 18 0;19 s 115 83 19 0;31 t 116 84 20 0;20 u 117 85 21 0;22 v 118 86 22 0;47 w 119 87 23 0;17 x 120 88 24 0;45 y 121 89 25 0;21 z 122 90 26 0;44 1 49 33 ──- 0;120 2 50 64 0 0;121 3 51 35 ──- 0;122 4 52 36 ──- 0;123 5 53 37 ──- 0;124 6 54 94 30 0;125 7 55 38 ──- 0;126 8 56 42 ──- 0;126 9 57 40 ──- 0;127 0 48 41 ──- 0;129 - 45 95 31 0;130 = 61 43 ──- 0;131 [ 91 123 27 0;26 ] 93 125 29 0;27 92 124 28 0;43 ; 59 58 ──- 0;39 ' 39 34 ──- 0;40 , 44 60 ──- 0;51 . 46 62 ──- 0;52 / 47 63 ──- 0;53 ` 96 126 ──- (0;41) Enter (Numeric Keypad) 13 ──- 10 (0;166) / (Numeric Keypad) 47 47 (0;142) (0;74) * (Numeric Keypad) 42 (0;144) (0;78) ──- - (Numeric Keypad) 45 45 (0;149) (0;164) + (Numeric Keypad) 43 43 (0;150) (0;55) 5 (Numeric Keypad) (0;76) 53 (0;143) ──- Aclaraciónes: ^^^^^^^^^^^^^ Si alguien ya conoce los códigos ANSI, sabrá que hay mas funciones, pe_ ro no vienen al caso. En tódos los códigos puse ESC.. Relamente no es ESC, sino que su ASCII. Su ASCII es el 27 decimal (1b hexa), el símbolo es la flecha a_ puntando a la izquierda. Para que un .ANS tome efecto, hay que TYPEarlo. Un consejo....no manden la bomba 'pelada', sino va a ser MUY obvio... Mándenla en alguna pantalla ANSI ya hecha (preferiblemente al final, por si por una de esas casualidades, ese ANSI ya redirecciona esa tecla). Esto es todo por hoy. Hasta el próximo capítulo..... Drako.