Las funciones descritas en este capítulo son importantes para programas ejecutables con modo consola, para darle esta modalidad a un programa se procederá (a modo ejemplar) de la siguiente forma:
1- Crear el archivo del proyecto, por ejemplo "consola.tsi" y editarlo con el compilador TEIMSI.
2- Escribir en el archivo las siguientes 4 líneas:
console_cls() console_locate(10,10) console_print("Hola mundo!") console_waitkey()
3- Presionar la tecla F4 (o el comando "Guardar y sólo Compilar script TEIMSI" del menú Compilar).
4- Editar el archivo "base_exe.asm" en la carpeta "consola_asm_files", ubicar y reemplazar las siguientes líneas:
format PE GUI 4.0 ;format PE console
Comentar la primera y descomentar la segunda:
;format PE GUI 4.0 format PE console
Ubicar:
; call console_start_p
descomentar a:
call console_start_p
Ahora ubicar:
; call console_end_p
descomentar a:
call console_end_p
5- Correr el archivo create.bat
6- Correr el programa consola.exe ubicado en la carpeta del archivo consola.tsi.
Nota: se debería hacer una copia del archivo "base_exe.asm" una vez modificado manualmente, porque cada vez que se compile el script TEIMSI original será reemplazado por el archivo predeterminado.
Las siguientes funciones se describen a continuación:
1)- console_cls()
2)- console_locate(x,y)
3)- console_print(str)
4)- console_println(str)
5)- console_println2(str)
6)- console_waitkey()
7)- console_waitkeyex()
8)- console_alert(x,y,str)
9)- console_inputstr(len)
Nota: El código fuente que realizan las funciones está en el archivo "cont_console.asm" de la carpeta "engine" junto el programa Editor de TEIMSI.
La función "console_cls", borra la pantalla de la consola.
console_cls() |
(ninguno) |
(ninguno) |
La función "console_locate", cambia la posición del cursor de texto en la consola.
console_locate(x_columna,y_fila) |
x_columna | Variable tipo número entero de 32 bits de TEIMSI. |
y_fila | Variable tipo número entero de 32 bits de TEIMSI. |
cadena | Variable tipo cadena de TEIMSI. |
console_cls() for(var k=0;k<65;k++){ console_locate(k,parseint(13+8*sin(k/5))) console_print("x") } console_print(_nl) console_print("Presionar una tecla.") console_waitkey()
La función "console_print", imprime un texto tal como está en la consola en la posición actual del cursor.
console_print(cadena) |
cadena | Variable tipo cadena de TEIMSI. |
(ninguno) |
La función "console_println", imprime un texto seguido de un retorno de nueva línea (chr(13)+chr(10)) en la consola en la posición actual del cursor.
console_println(cadena) |
cadena | Variable tipo cadena de TEIMSI. |
(ninguno) |
La función "console_println2", imprime un texto seguido de un retorno de nueva línea (chr(13)+chr(10)) y luego una cadena que dice "Presionar una tecla para continuar ..." en la consola en la posición actual del cursor. Luego de imprimir el texto espera a que se presione una tecla.
console_println2(cadena) |
cadena | Variable tipo cadena de TEIMSI. |
cadena | Variable tipo cadena de TEIMSI. |
La función "console_waitkey", espera que se presione una tecla cualquiera y devuelve un entero con el código ASCII de la tecla presionada.
console_waitkey() |
(ninguno) |
numero_decimal | Variable tipo número de coma flotante de TEIMSI. |
while(true){ var k=console_waitkey() console_println("Presionada: " + k) if(k==27){break} // Si la tecla es "Escape", sale del búcle. }
La función "console_waitkeyex", espera a que se presione o suelte una tecla devolviendo una variable tipo matriz de TEIMSI con 4 enteros; cada ítem (número entero) indica cierta información sobre
el evento.
var data_arr=console_waitkeyex() |
matriz | Variable de tipo matriz con cuatro ítems de tipo entero. |
El primer entero de la matriz devuelta, indica si la tecla se presionó (valor 1) o soltó (valor 0). El segundo indica el código de la tecla (keycode) según la siguiente tabla que tiene los nombres de teclas (en inglés). back,8 | numpad2,98 | f12,123 | b,66 clear,12 | numpad3,99 | f13,124 | c,67 delete,46 | numpad4,100 | f14,125 | d,68 down,40 | numpad5,101 | f15,126 | e,69 end,35 | numpad6,102 | f16,127 | f,70 escape,27 | numpad7,103 | f17,128 | g,71 home,36 | numpad8,104 | f18,129 | h,72 insert,45 | numpad9,105 | f19,130 | i,73 lbutton,1 | multiply,106 | f20,131 | j,74 mbutton,4 | add,107 | f21,132 | k,75 rbutton,2 | separator,108 | f22,133 | l,76 left,37 | subtract,109 | f23,134 | m,77 pause,19 | decimal,110 | f24,135 | n,78 pgdn,34 | divide,111 | numlock,144 | o,79 pgup,33 | f1,112 | 0,48 | p,80 print,42 | f2,113 | 1,49 | q,81 return,13 | f3,114 | 2,50 | r,82 right,39 | f4,115 | 3,51 | s,83 shift,16 | f5,116 | 4,52 | t,84 snapshot,44 | f6,117 | 5,53 | u,85 space,32 | f7,118 | 6,54 | v,86 tab,9 | f8,119 | 7,55 | w,87 up,38 | f9,120 | 8,56 | x,88 numpad0,96 | f10,121 | 9,57 | y,89 numpad1,97 | f11,122 | a,65 | z,90 El tercer ítem (de índice 2) en la matriz es un entero que expresa el código ASCII del carácter de la tecla presionada. El cuarto ítem (de índice 3) llamado "entero_banderas" es un entero que tiene las banderas de booleanos mediante ciertos bits que indican el estado (presionadas o no) de las teclas "Shift", "Control", "Alt" y otras más que se muestran en la siguiente tabla, el número que le sigue a la tecla especial tiene activado sólo el bit correspondiente a dicha tecla (en el sistema binario) ver el ejemplo de mostrado. (Tecla especial) (Entero con el bit que la representa activado). Shift | 4096 = 0001000000000000y (número en sistema binario). Ctrl | 2048 = 0000100000000000y Alt | 512 = 0000001000000000y Bloq mayús | 32768 = 1000000000000000y Bloq num | 8192 = 0010000000000000y Bloq despl | 16384 = 0100000000000000y Las variables constantes predefinidas: _waitkey_shift, _waitkey_ctrl, _waitkey_alt, _waitkey_bmayus, _waitkey_bnum, _waitkey_bdesp; valen los enteros mostrados en la tabla anterior. También las variables constantes predefinidas: _waitkey_isdown, _waitkey_scancode, _waitkey_asciichar, _waitkey_ctrlkeystate; valen los enteros 0,1,2,3 respectivamente y se usan para indicar los índices de la matriz.
if(_console_handle==0){ alert("Es necesario que el programa esté en modo consola.!") sys.quit() } // _waitkey_ctrlkeystate=3 // _waitkey_ctrl=2048 var keydata=0 while(true){ console_cls() console_locate(5,5) if(keydata!=0){ var banderas=keydata[_waitkey_ctrlkeystate] keydata[_waitkey_ctrlkeystate]=banderas + "="+strtohex(binstrpack(longpack(keydata[_waitkey_ctrlkeystate]))) // Mostrar una representación binaria de entero con las banderas. console_println(implode(_nl,keydata)+ _nl) // Mostrar los ítems enteros de la matriz. if( (banderas & _waitkey_ctrl) != 0){ // Muestra si se presionó la tecla control. console_println2("Has presionado la tecla Control!") } } var keydata=console_waitkeyex() if(keydata[_waitkey_scancode]==27){break} // Espera a Tecla Esc. }
La función "console_alert", ubica el cursor en la posición indicada (x,y) por los primeros dos parámetros y luego realiza la misma tarea de la función "console_println2" con el tercero.
console_alert(x_columna,y_fila,cadena) |
x_columna | Variable tipo número entero de 32 bits de TEIMSI. |
y_fila | Variable tipo número entero de 32 bits de TEIMSI. |
cadena | Variable tipo cadena de TEIMSI. |
(ninguno) |
La función "console_inputstr", permite ingresar al usuario un texto (cadena) desde el teclado.
console_inputstr(numero_entero) |
numero_entero | Variable tipo número entero de 32 bits de TEIMSI. Es el tamaño máximo del búfer y cadena de entrada. |
cadena | Variable tipo cadena de TEIMSI. |
console_print("Ingresa un texto: ") var intxt=console_inputstr(100) console_println2(_nl+"Se ha ingresado :"+ intxt)