Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM
Re: New FTDN October 2026 (FWH 26.10)
Posted: Sat Oct 10, 2026 03:36 AM
Octubre 2026
- Nuevo: lectura de c贸digos QR en Harbour puro, sin c贸digo C y sin depender de FWH: samples\misc\qrread.prg, la contraparte de qrcode.prg. QRReadFile( cBmp ) lee im谩genes BMP (1, 4, 8, 24 y 32 bits); QRDecodeGray( aGray, nW, nH ) y QRDecodeMatrix( aMat, nDim ) decodifican un array de grises o una matriz de m贸dulos muestreada. Devuelven NIL o un hash con el texto, la versi贸n, el nivel de correcci贸n de errores y la m谩scara. Se admiten los modos num茅rico, alfanum茅rico, byte y kanji, con correcci贸n de errores Reed-Solomon para c贸digos da帽ados. Al enlazar un EXE independiente con FWH, a帽ade #include "FiveWin.ch" al programa principal (o el REQUEST de GT adecuado) para evitar un s铆mbolo HB_GT_WIN sin resolver. Gracias a Jimmy por el reto y por sus comentarios sobre el enlazado. Discusi贸n en el foro.
- Corregido: TSocket (source\classes\tsocket.prg): SendData() deja de reintentar cuando SocketSend() informa de un socket roto, en lugar de quedarse en un bucle de env铆o sin fin. Los errores temporales WSAEWOULDBLOCK se siguen reintentando.
- Mejorado: samples\whatsapp\waopencode.prg escucha solo en localhost, exige un token Bearer por ejecuci贸n (o WAOC_TOKEN) y rechaza clientes externos, peticiones de navegador con Origin y valores Host inesperados. El envelope waopencode.request conserva la conversaci贸n completa, los ID de las llamadas a herramientas y sus resultados. El README y opencode.json explican la configuraci贸n y el contrato de respuesta. Es una prueba de concepto supervisada, no una integraci贸n de producci贸n: automatizar WhatsApp Web puede provocar restricciones en la cuenta.
- Corregido: samples\whatsapp\waopencode.prg ahora enlaza con xHarbour. Adaptadores locales aportan las operaciones de entorno, cadenas de valores, hash y reloj en milisegundos, sin cambiar el protocolo del puente ni el comportamiento del servidor.
- Actualizado: la documentaci贸n de TWebView2 (EN/ES/PT) enumera todos los m茅todos de la clase con su firma y valor de retorno, y todos los callbacks bOn* con sus argumentos. bOnConsole( cJson, hWebView ) y EnableConsole( lOnOff ), disponibles desde FWH 26.09 d铆a 12, incluyen cargas JSON, un ejemplo, reinyecci贸n en la navegaci贸n y comprobaciones para bibliotecas antiguas. Se explican los resultados as铆ncronos de PNG/PDF y los l铆mites de la limpieza de datos de navegaci贸n, los objetos host y el filtrado del men煤 contextual. El comportamiento de la biblioteca no cambia.
- Corregido: TGet (source\classes\tget.prg): los GET de contrase帽a ya no parpadean al redibujarse. DispText() cambia el texto de la ventana solo cuando ha cambiado.
- Nuevo: PrinterKeepSetup( lOn ) mantiene la impresora elegida en PrinterSetup() o PageSetup() para los siguientes trabajos de impresi贸n de la aplicaci贸n. Est谩 desactivado por defecto, con lo que se conserva el comportamiento actual. Si la impresora guardada no est谩 disponible, FWH usa la impresora predeterminada de Windows. Cancelar el di谩logo de configuraci贸n no cambia nada, y PrinterResetSetup() olvida la impresora guardada. Ejemplo: PrinterKeepSetup( .T. ). Documentado en TPrinter (EN/ES/PT).
- Corregido: TOpenCode (source\classes\topencode.prg): IsRunning() ya no se queda en .T. cuando una petici贸n as铆ncrona termina sin dejar resultado, por ejemplo cuando la carpeta temporal no es escribible. Devuelve .F. y GetValue() informa del error. Nuevo DATA lVerifySSL (.T. por defecto) que verifica el certificado del servidor en todas las peticiones, incluida ListModels(). Crear un objeto ya no lee el auth.json de OpenCode. Documentaci贸n actualizada en EN/ES/PT.
- Corregido: TRBtn (source\classes\trbtn.prg) libera el bitmap y la paleta anteriores cuando LoadBitmaps() cambia la imagen del bot贸n. Los botones con degradado tambi茅n liberan el bitmap temporal usado para crear el pincel de fondo, evitando una fuga de bitmaps GDI al repintar. Gracias a Ubiratan por informar de ambos problemas.
- Mejorado: se actualiz贸 y verific贸 el 1 de octubre el soporte de TOpenCode para el nivel gratuito de OpenCode Zen. El modelo por defecto es mimo-v2.6-flash-free. Las peticiones incluyen las cabeceras de OpenCode y el formato de streaming que exige ese servicio; las respuestas SSE se convierten de nuevo a JSON de completion para que GetValue() y GetUsage() sigan funcionando. La lista de reserva se renov贸 con mimo-v2.5-free, space-bunny-free, big-pickle y nemotron-3-ultra-free. El nuevo ejemplo samples\ai\opencode_mimo.prg se verific贸 de extremo a extremo. La disponibilidad del nivel gratuito es de mejor esfuerzo y puede cambiar.
- Nuevo: samples\whatsapp\wawebview.prg muestra WhatsApp Web dentro de un TWebView2, con un registro en vivo de MSG IN / MSG OUT / REACT. Scan() y SendToFWH() leen la conversaci贸n por geometr铆a del DOM, decodifican los emoji renderizados como im谩genes, env铆an texto CP1252 con tokens <U+XXXX> para los caracteres fuera de la ACP e inyectan el texto escrito en el cuadro de composici贸n.
- Mejorado: samples\whatsapp\wawebview.prg usa un registro RICHEDIT5 con formato RTF: las l铆neas entrantes en negrita, el texto en negrita de WhatsApp en verde y las cursivas en naranja. El historial del chat se carga en silencio para que al registro solo lleguen los mensajes y reacciones nuevos. Los emoji se dibujan como glifos, conservando al lado los c贸digos <U+XXXX>. Al pulsar "leer mas" en WhatsApp se lee el mensaje completo en MSG IN* / MSG OUT*. La l铆nea de estado queda debajo de los botones.
- Nuevo: samples\whatsapp\waopencode.prg ejecuta un servidor local compatible con OpenAI en el puerto 8787, que reenv铆a las peticiones de OpenCode a un contacto de WhatsApp preparado y devuelve la respuesta del contacto. Configura un proveedor personalizado con baseURL http://127.0.0.1:8787/v1 y modelo wa-bridge. Las peticiones de generaci贸n de t铆tulos se responden localmente. Las peticiones expiran con HTTP 504; un reintento se reengancha a la petici贸n pendiente en lugar de enviarla de nuevo. El tiempo de espera por defecto es de 300 segundos y el l铆mite de la petici贸n transportada es de 60000 bytes. Este ejemplo requiere un contrato de respuesta acordado y uso supervisado.
- Mejorado: samples\whatsapp\waopencode.prg devuelve tool_calls cuando el contacto responde con un objeto JSON puro de llamada a herramienta, permitiendo que OpenCode ejecute la herramienta elegida. Se admiten respuestas JSON y SSE. El ejemplo de prueba sin conexi贸n samples\whatsapp\tests\run_tests.ps1 comprueba rutas, respuestas locales de t铆tulos, longitudes de petici贸n, cola, deduplicaci贸n, reenganche tras timeout y SSE. La inyecci贸n de depuraci贸n solo est谩 disponible con WAOC_TEST=1.