jeudi 7 juin 2012

Clipper: Conversion Dos-Windows avec Harbour

Introduction
Porter et maintenir un ancien soft Clipper sous Harbour c'est aussi faire face à quelques problèmes de conversions. Argf.

En effet, votre vieux logiciel fonctionne sous un environnement "Dos" (même si c'est Compiler avec Harbour pour être compatible avec Win7) et répond donc à la codification DOS.

Nous avons par exemple un produit qui est du "2.5 mm²"... il s'affiche très bien dans l'application Clipper... mais une fois exporté vers Excel ou imprimé sur une étiquette code barre (vie OleAutomation avec Harbour) notre beau "2.5 mm²" (sous Dos) devient "2.5mmÿ" (sous Windows).

Il faut avouer que c'est un peu "vilain".
Ce qu'il faudrait, c'est convertir notre  "2.5 mm²" Dos en "2.5 mm²" Windows!

Conversion de chaine de caractère entre Dos-Windows
C'est en fouillant sur le net que je découvre l'existence de OemToCharA et CharToEomA dans la bibliothèque User32.
OemToCharA est utilisé pour convertir une chaine de caractère Dos -> Windows.
CharToOemA est utilisé pour convertie une chaine de caractère Windows -> Dos.
Ces deux articles suivants furent une source d'inspiration salvatrice
Conversion Dos-Windows en Clipper (Harbour Project)
Armé de ces information je fais des recherches dans le répertoire de Harbour Project et je trouve une relation entre "CharToEom" et "OemToAnsi" (humm intéressant).
En faisant une nouvelle rechercher sur "OemToAnsi" dans les source d'Harbour je trouve alors l'exemple suivant dans DbfToPg.PRG:
oRecord:FieldPut( i, hb_oemtoansi( cValue ) )

HOURRA!!!!!!

La mise en pratique de la fonction hb_oemtoansi() me permet d'imprimer immédiatement mes étiquettes code-barre (sous imprimante Windows) avec une conversion correcte de mon "²" de Dos vers Windows :-)
Pour résumer donc:
  • HB_OEMTOANSI() conversion Dos -> Windows
  • HB_ANSITOOEM() conversion Windows -> Dos



1 commentaire:

clipper a dit…

Merci pour l'info!