elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Temas
Páginas: [1]
1  Programación / Scripting / [BATCH] Mover el cursor a cualquier posición sólo con ECHO en: 19 Febrero 2022, 09:36 am
de esas cosas muy interesantes (fuente)

Este tema se basa en un comportamiento extraño (lo llamaría un error) que ocurre cuando TAB (ASCII char 9) se combina con BS (ASCII char 8) en los comandos ECHO o SET /P.

Cuando se muestra un carácter TAB en la pantalla, el controlador de pantalla de Windows lo traduce a una serie de espacios en blanco (generalmente 8 ), por lo que en este caso el TAB es destructivo: cualquier texto que se muestra previamente en la pantalla se sobrescribe con los espacios cuando se muestra TAB.

El número de espacios varía según la posición del cursor cuando se muestra el TAB, por lo que la posición final del cursor después de los espacios siempre es múltiplo de 8. Por ejemplo, si el cursor está en la primera columna de una línea, se muestra un TAB como 8 espacios, pero si el cursor está en la columna 1, el TAB se muestra como 7 espacios, etc.

Un comportamiento que puede parecer lógico en un principio es que un carácter de BS que se muestra después del TAB mueve el cursor hacia atrás la misma cantidad de espacios que muestra el TAB, es decir, la BS elimina la acción del TAB. Lo que en mi humilde opinión es un error es que otra BS que se muestra después de la primera también mueve el cursor hacia atrás la misma cantidad de espacios y, si el cursor alcanza el margen izquierdo de la pantalla, el cursor se desplaza hasta el final de la línea de pantalla anterior. !

Por ejemplo, si el cursor está en la primera columna de una línea, una secuencia de caracteres <TAB><BS><BS> mueve el cursor una línea arriba y 7 columnas a la izquierda del margen derecho de la pantalla. Si la pantalla tiene 80 caracteres de ancho, cada grupo adicional de 10 caracteres BS mueve el cursor una línea más. Después de eso, cada carácter BS adicional mueve el cursor 8 caracteres más a la izquierda en la misma línea. Finalmente, si se muestra otro carácter estándar único, los siguientes caracteres BS moverán el cursor solo un carácter a la izquierda.

De esta manera, el cursor se puede colocar en cualquier línea y columna anterior en la pantalla simplemente calculando el número adecuado de caracteres BS para mostrar después de una TAB y después de un carácter estándar adicional. Si la posición deseada está por debajo de la posición actual del cursor, primero coloque el cursor en la parte inferior de la pantalla a través de varios comandos ECHO/, y luego mueva el cursor hacia arriba y hacia la izquierda hasta la ubicación deseada con este método.

El archivo por lotes a continuación es un ejemplo del procedimiento anterior. El cálculo de la cantidad de caracteres BS y el comando ECHO es realmente simple y se puede agregar a cualquier programa de una manera muy simple, pero este programa es grande y complejo porque muestra una pantalla llena de coordenadas y permite ingresar la posición. de varias marcas, que se mostrarán en la pantalla en las posiciones adecuadas.


Código
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3.  
  4. echo Enter coordinates in line,col order to move the cursor and show a mark
  5. echo The valid ranges are:   0 ^<= line ^<= 30   and   0 ^<= column ^<= 71;
  6. echo if a value is out of range, the bell will ring.
  7.  
  8. rem Get a BEL, BS and a TAB characters
  9. set "BEL="
  10. for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
  11. set "TAB="
  12. rem First, try the method for Windows XP
  13. for /F "skip=4 delims=pR tokens=2" %%a in ('reg query hkcu\environment /v temp' ) do set "TAB=%%a"
  14. rem Then, the method for newer versions
  15. rem http://www.dostips.com/forum/viewtopic.php?f=3&t=1733&p=6840#p6853
  16. for /F "tokens=2 delims=0" %%a in ('shutdown /? ^| findstr /BC:E') do if not defined TAB set "TAB=%%a"
  17.  
  18. rem Get a string with 162 BS characters, the maximum used in this program
  19. set "BSs="
  20. for /L %%i in (1,1,162) do set "BSs=!BSs!!BS!"
  21.  
  22. mode 80,32
  23. set "line1="
  24. for /L %%i in (1,1,8) do set "line1=!line1!0123456789"
  25. set "line2="
  26. for /L %%i in (1,1,8) do set "line2=!line2!^!l^!         "
  27. set "line2=!line2:~0,-1!^!l^!"
  28. set "line3="
  29. for /L %%i in (1,1,8) do set "line3=!line3!^!l^! 2 4 6 8 "
  30. set "line3=!line3:~0,-1!^!l^!"
  31. set "twoORthree=23"
  32. < NUL (
  33.   for /L %%a in (1,1,3) do (
  34.      set /P "=%line1%" & set "l=1"
  35.      set /P "=%line2%" & set /A "l+=1"
  36.      for /L %%b in (1,1,4) do (
  37.         if %%a neq 2 (
  38.            set /P "=%line3%"
  39.         ) else if "!twoORthree:%% style="color: #448888;">b=!" equ "%twoORthree%" (
  40.            set /P "=%line3%"
  41.         ) else (
  42.            echo           %line3:~0,-15%
  43.         )
  44.         set /A "l+=1"
  45.         set /P "=%line2%" & set /A "l+=1"
  46.      )
  47.   )
  48.   set /P "=%line1:~0,-1%"
  49. )
  50.  
  51. rem Initialize cursor position at middle of screen, to read input there
  52. echo 9%TAB%!BSs!
  53. set "currLine=16"
  54.  
  55. set "letters=_ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  56. set "num=1"
  57.  
  58. :loop
  59. set "position="
  60. set /P "position=Enter line,col for mark !letters:~% style="color: #448888;">num%,1!:      !BSs:~0,5!"
  61. if not defined position goto end
  62.  
  63. for /F "tokens=1,2 delims=, " %%x in ("%position%") do set /A y=%%x, x=%%y, error=1
  64. if 0 leq %y% if %y% leq 30  if 0 leq %x% if %x% leq 71  set "error="
  65. if defined error (
  66.   echo %TAB%!BSs:~0,12!!BEL!
  67.   goto loop
  68. )
  69.  
  70. if %y% leq %currLine% (
  71.  
  72.    rem New position above: move cursor up and show point
  73.   call :MoveCursorupAndShow "(currLine-y-1)" x "!letters:~% style="color: #448888;">num%,1!(% style="color: #448888;">y%,%x%)"
  74.  
  75.    rem And move cursor down, back to original input line
  76.   set /A down=currLine-y-2, cntBSup+=10
  77.   for /L %%i in (1,1,!down!) do echo/
  78.   if !down! lss 0 for /F %%i in ("!cntBSup!") do echo %TAB%!BSs:~0,%% style="color: #448888;">i!
  79.  
  80. ) else (
  81.  
  82.    rem New position below: first, move cursor to last line
  83.   for /L %%i in (1,1,15) do echo/
  84.   rem Then, move cursor up and show point
  85.   call :MoveCursorupAndShow "(30-y)" x "!letters:~% style="color: #448888;">num%,1!(% style="color: #448888;">y%,%x%)"
  86.  
  87.    rem And move cursor up, back to original input line, using the same method
  88.   set /A down=30-y
  89.   for /L %%i in (1,1,!down!) do echo/
  90.   echo %TAB%!BSs!
  91.  
  92. )
  93.  
  94. set /A num+=1
  95. if %num% leq 26 goto loop
  96. :end
  97. cls
  98. goto :EOF
  99.  
  100.  
  101.  
  102. :MoveCursorupAndShow  Linesup  Column  "Text"
  103. set /A "cntBSup = 2 + 10 * %~1 + (9-(%2+6)/8), cntBSleft = 8-(%2+6)%%8"
  104. set "BSsLeft="
  105. if %cntBSleft% gtr 0 set "BSsLeft=_!BSs:~0,% style="color: #448888;">cntBSleft%!"
  106. echo %TAB%!BSs:~0,% style="color: #448888;">cntBSup%!!BSsLeft!% style="color: #448888;">~3
  107. exit /B

La siguiente imagen es un ejemplo de salida del código anterior después de que se mostraran 8 marcas en varias posiciones.



por @Antonio en dostips
2  Sistemas Operativos / Windows / GTK 2 runtime win32 con unicode (BOM) en: 17 Febrero 2022, 02:52 am
Hola, estoy en un windows 7 32 utilizando geany como editor. Pero los caractere unicodes no se ven, pero el documento si lo guardo es correcto, me falta la Marca de orden de byte (BOM) que no se bien que es.

Esto se debe al gtk 2 "runtime environment" creo que puede ser por no estar compilado con soporte para unicode. Con mi mal inglés me ha parecido entender que una variable de entorno, puede cambiar esto (no lo tengo claro)

He estado buscando una versión para descarga específica unicode, y al no encontrarla, vuelvo a la variable de entorno.

Si tengo que construirlas - lo descarto de entrada, no las construiré.

¿cómo hago que lo que me utilice gtk2 sea utf-8 con BOM?

me parece leer sobre lib pango ¿pango (y cairo) está incluida en gtk, no? como responsable
3  Foros Generales / Dudas Generales / Estoy muy desfasado en: 10 Febrero 2022, 18:11 pm
¿Qué pasó con Wadalbertia.org?
4  Comunicaciones / Android / Conexión USB a ordenador en: 8 Febrero 2022, 21:22 pm
¿Existe algún modo de evitar la llamada a configuración del dispositivo al conectarlo?
5  Media / Diseño Gráfico / En memoria de CPH en: 3 Febrero 2022, 18:39 pm
las manos de @Satsuki (+ o -) en cph nos mostraron.



allí comprobamos, este menda de nuevo, que por muchas veces que le digas a uno que sólo no puede ir, no aprende

Lo encontré revolviendo viejos direcctorios y no puede evitar mostrarlo

Saludos
6  Comunicaciones / Dispositivos Móviles (PDA's, Smartphones, Tablets) / Sobre los cables OTG en: 19 Diciembre 2021, 18:08 pm
Por capricho he adquirido unos cuantos para probar y comprobar que se pueden conectar ratón y teclado a un dispositivo.

Pero así por las buenas, en varios dispositivos en los que lo he probado, no consigo nada. Claro que sólo pinchar y mirar si funciona.

¿Se tiene que hacer algo en el dispositivo para que funcione?

Saludos
7  Comunicaciones / Android / No puedo utilizar la SD como almacenamiento interno o mixto en: 18 Diciembre 2021, 20:13 pm
Tengo un xiaomi Redmi 6 con MIUI 12.5.3

he visto como puedo hacer que la SD se convierta en almacenamiento interno, pero no lo consigo.

Con "Activity Launcher" cuando en archivos en la segunda opción, dentro escojo la SD y le doy a los puntitos de arriba a la derecha en "ajustes de almacenamiento" no sigo adelante.

He probado a formatear como interna y mixta, pero tampoco me lo reconoce y no se que hacer.

Me falta mirar de dejar virgen la usb y metersela vigen, pero no tengo medios.

A lo mejor no se puede y veo ilusiones, no se, espero que mi chisme no sea una expcepción. Help me

Saludos
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines