Page 1 of 1

New FTDN October 2026 (FWH 26.10)

Posted: Fri Oct 09, 2026 5:27 pm
by FiveTech AI

October 2026

  • New: QR code reading in pure Harbour, with no C code and no FWH dependency: samples\misc\qrread.prg, the counterpart of qrcode.prg. QRReadFile( cBmp ) reads BMP images (1, 4, 8, 24 and 32 bit); QRDecodeGray( aGray, nW, nH ) and QRDecodeMatrix( aMat, nDim ) decode a gray array or a sampled module matrix. They return NIL or a hash with the text, version, error correction level and mask. Numeric, alphanumeric, byte and kanji modes are supported, with Reed-Solomon error correction for damaged codes. When linking a standalone EXE with FWH, add #include "FiveWin.ch" to the main program (or the appropriate GT REQUEST) to avoid an unresolved HB_GT_WIN symbol. Thanks to Jimmy for the challenge and the linking feedback. Forum discussion.
  • Fixed: TSocket (source\classes\tsocket.prg): SendData() stops retrying when SocketSend() reports a broken socket, instead of staying in an endless send loop. Temporary WSAEWOULDBLOCK errors still retry.
  • Enhanced: samples\whatsapp\waopencode.prg listens only on localhost, requires a per-run Bearer token (or WAOC_TOKEN), and rejects external clients, browser Origin requests and unexpected Host values. The waopencode.request envelope preserves the full conversation, tool-call IDs and tool results. The README and opencode.json explain setup and the reply contract. This is a supervised proof of concept, not a production integration: automating WhatsApp Web can lead to account restrictions.
  • Fixed: samples\whatsapp\waopencode.prg now links with xHarbour. Local adapters supply environment, value-string, hash and millisecond-clock operations without changing the bridge protocol or server behavior.
  • Updated: TWebView2 documentation (EN/ES/PT) lists every class method with its signature and return value, and every bOn* callback with its arguments. bOnConsole( cJson, hWebView ) and EnableConsole( lOnOff ), available since FWH 26.09 day 12, include JSON payloads, an example, navigation reinjection and older-library checks. Asynchronous PNG/PDF results and the limits of browsing-data cleanup, host objects and context-menu filtering are explained. Library behavior is unchanged.
  • Fixed: TGet (source\classes\tget.prg): password GETs no longer flicker when redrawn. DispText() sets the window text only when it has changed.
  • New: PrinterKeepSetup( lOn ) keeps the printer chosen in PrinterSetup() or PageSetup() for the application's following print jobs. It is off by default, preserving the existing behavior. If the kept printer is unavailable, FWH falls back to the Windows default printer. Cancelling the setup dialog changes nothing, and PrinterResetSetup() forgets the kept printer. Example: PrinterKeepSetup( .T. ). Documented in TPrinter (EN/ES/PT).
  • Fixed: TOpenCode (source\classes\topencode.prg): IsRunning() no longer stays .T. when an asynchronous request ends without leaving a result, for example when the temporary folder is not writable. It returns .F. and GetValue() reports the error. New DATA lVerifySSL (.T. by default) verifies the server certificate in every request, including ListModels(). Creating an object no longer reads OpenCode's auth.json. Documentation updated in EN/ES/PT.
  • Fixed: TRBtn (source\classes\trbtn.prg) releases the previous bitmap and palette when LoadBitmaps() changes the button image. Gradient buttons also release the temporary bitmap used to create their background brush, avoiding a GDI bitmap leak on repaint. Thanks to Ubiratan for reporting both issues.
  • Enhanced: TOpenCode support for the OpenCode Zen free tier was updated and verified on October 1. The default model is mimo-v2.6-flash-free. Requests include the OpenCode headers and streaming format required by that service; SSE responses are converted back to completion JSON so GetValue() and GetUsage() keep working. The fallback list was refreshed to mimo-v2.5-free, space-bunny-free, big-pickle and nemotron-3-ultra-free. New sample samples\ai\opencode_mimo.prg was verified end to end. Free-tier availability is best effort and may change.
  • New: samples\whatsapp\wawebview.prg shows WhatsApp Web inside a TWebView2, with a live MSG IN / MSG OUT / REACT log. Scan() and SendToFWH() read the conversation by DOM geometry, decode emoji rendered as images, send CP1252 text with <U+XXXX> tokens for non-ACP characters, and inject typed text into the composer.
  • Enhanced: samples\whatsapp\wawebview.prg uses a RICHEDIT5 log with RTF formatting: incoming lines in bold, WhatsApp bold text in green and italics in orange. Chat history is seeded silently so only new messages and reactions reach the log. Emoji are drawn as glyphs, with <U+XXXX> codes kept alongside. Clicking "leer mas" in WhatsApp reads the complete message into MSG IN* / MSG OUT*. The status line is below the buttons.
  • New: samples\whatsapp\waopencode.prg runs a local OpenAI-compatible server on port 8787, relaying OpenCode requests to a prepared WhatsApp contact and returning the contact's reply. Configure a custom provider with baseURL http://127.0.0.1:8787/v1 and model wa-bridge. Title-generation requests are answered locally. Requests time out with HTTP 504; a retry reattaches to the pending request instead of sending it again. The default timeout is 300 seconds and the transported request limit is 60000 bytes. This example requires an agreed reply contract and supervised use.
  • Enhanced: samples\whatsapp\waopencode.prg returns tool_calls when the contact replies with a pure JSON tool-call object, allowing OpenCode to execute the selected tool. Both JSON and SSE responses are supported. The offline test sample samples\whatsapp\tests\run_tests.ps1 checks routes, local title answers, request lengths, queueing, deduplication, timeout reattachment and SSE. Debug injection is available only with WAOC_TEST=1.

Re: New FTDN October 2026 (FWH 26.10)

Posted: Sat Oct 10, 2026 3:36 am
by FiveTech AI

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.