Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - Evolutions récentes

26. Modification apportées dans la version 4.24 (janvier 1996)

Fonction PR_set_name()

Cette fonction a été adaptée pour éviter des dépassements de buffer dans certains cas. Il est à noter que dans la définition du PRINTER, le nom (entrée FILE ou PRINTER) doit comporter assez de place (ajouter au besoin des blancs) pour pouvoir stocker le paramètre, sans quoi des résultats bizarres peuvent se produire.

MMT

L'affichage du texte dans l'éditeur mmt et les champs EDITOR est optimisé pour éviter le phénomène de scintillement observable auparavant (en DOS).

Noms des exécutables et libs

La mise en place progressive de nouvelles versions en DOS des librairies et des exécutables SCR/AL1 a nécessité une redéfinition des noms des exécutables et des librairies. On a cependant gardé les anciennes nomenclatures pour la version DOS 16 bits et pour les versions UNIX.

1. DOS et Windows

SCR4* : Borland (DOS 16 bits)

        scr4.exe, scr4_e.exe, scr4o.lib, ...

S4WC* : Watcom (DOS 32 bits)

        s4wc.exe, s4wc_e.exe, s4wco.lib, ...

S4W* : Borland DOSWIN (Windows caractères 16 bits)

        s4w.exe, s4w_e.exe, s4wo.lib, ...

SW4* : Borland Windows (Full Windows 16 bits)

        sw4.exe, sw4_e.exe, sw4o.lib, ...

2. Unix

SCR4* pour toutes les versions :

        scr4.exe, scr4_e.exe, scr4o.lib, ...

OPTIONS DE COMPILATION EN DOS

1. Borland 16 bits DOS

   CC   = bcc -ml -Ic:\bc45\I;c:\SCR\I -DDOS -Z -O -w-rvl -c -H -w-pro -3
LINK = bcc -ml -Lc:\bc45\L -ea.out

2. DOSWIN (Borland 16 bits Windows)

   CC   = bcc -W -ml -Ic:\bc45\I;c:\scr\I -DDOS -DDOSWIN -w-rvl -Z -O -3
-c -H -w-pro
LINK = bcc -W -ml -Lc:\bc45\L -ea.out

3. WATCOM 9.0 Dos 32 bits

   CC   = wcc386p -i=c:\wc\i;c:\scr\i -dDOS -dWATCOM -zq -4s
LINK = wcl386 -fe=a.out -k8192

4. DOSW32 (Borland 32 bits Windows)

   CC   = bcc -W -Ic:\bc45\I;c:\scr\I -DDOS -DDOSWIN -DDOSW32 -w-rvl
-Z -O -c -H -w-pro
LINK = bcc -W -Lc:\bc45\L -ea.out

Version DOSWIN

Présentation générale

Une version intermédiaire de SCR/AL1 sous Windows est disponible à partir de la version 4.24. Celle-ci présente l'avantage d'être simple à mettre en oeuvre sur les sources existantes et complètement compatible avec la version DOS de SCR/AL1, que ce soit au niveau des fichiers de données ctree ou des fichiers .scr et .cmt.

L'application exploite le jeu de caractères de Windows défini pour la "fenêtre DOS". Il s'agit cependant d'une application complètement Windows, exploitant le gestionnaire mémoire de Windows en permettant notamment d'allouer des blocs de plus de 64 KB et d'utiliser la mémoire virtuelle ou les imprimantes de Windows.

La souris est exploitable exactement comme elle l'est en DOS, mais d'une souris "bloc", on passe à la flèche normale de Windows.

Le multi-tâche est disponible et une même application peut être lancée plusieurs fois simultanément.

Seuls les exécutables S4W_E.EXE et MTW, ainsi que les librairies S4WO.LIB, S4WI.LIB et S4W4I.LIB sont actuellement disponibles.

Les fichiers générés par scr4_e et créés par scr4 sont identiques à ceux utilisés dans la version DOSWIN.

Compatibilité

Les fichiers .scr, .dat, .idx, .prf, etc sont tous compatibles entre les versions DOS Borland et DOSWIN Borland. Il ne faut donc même pas recompiler les sources .f de la version DOS pour le portage en DOSWIN.

Par contre, il n'y a pas encore de compatibilité entre les versions DOS 32 bits (WATCOM) et les autres.

Pour l'essentiel, toutes les fonctions des librairies sont opérationnelles en DOSWIN comme en DOS. Cependant, quelques fonctions sont vidées de leur contenu, comme ACT_exec_system(), STD_dosformat() et STD_subshell(). En effet, ces fonctions font appel à system(), qui n'est pas disponible sous Windows, comme indiqué plus bas.

Mise en oeuvre

Supposons une application SCR/AL1 classique. Pour procéder à son portage sous Windows (DOSWIN), on procèdera comme suit:

1. Copie des sources (.c, .f, .h, ...) dans un directory séparé.

2. Copie du fichier standard a.def dans le nouveau directory

3. Modification du makefile :

4. Modification des sources :

5. delete *.obj

6. touch *.f

7. make all

8. copie ou déplacement des bases de données référencées dans l'application

9. lancement et test sous Windows de l'application.

Remarques

En raison de la spécificité de l'interface Windows, certaines fonctions comme printf, getchar, etc ne sont pas disponibles ou ont une implémentation différente sous Windows.

La fonction printf (ou fprintf(stdin ou stderr)) affichent dans l'écran de fond de Windows le texte correspondant. La fonction de librairie Wprintf() a été ajoutée et possède la même syntaxe que printf. Elle affiche dans la fenêtre DOS et déroule automatiquement lorsque le texte dépasse la 25ème ligne.

Les macros getchar() et getc() posent un problème plus important: en effet, un tel appel bloque Windows sans autre possibilité que Ctrl-Alt-Del pour s'en sortir! Il faut donc les éliminer manuellement du code. Une alternative sera implémentée dans un avenir proche.

Ajout d'éléments spécifiques à Windows

Avant l'appel au main() de l'application, le programmeur a le loisir d'effectuer des opérations via la fonction WscrDOSUserInit(). Cette fonction est vide par défaut, mais peut contenir un code quelconque. En fait, cette fonction sert essentiellement à définir des variables globales (voir ci-dessous). Elle peut éventuellement éviter le démarrage de l'application.

Au moment de l'appel, la fenêtre de l'application n'est pas encore définie.

On peut par exemple fixer deux variables globales dans la fonction WscrDOSUserInit() :

            - int WSCR_ICON;    /* Numéro de la ressource icône */
- int WSCR_FONTNB; /* Numéro de la police de caractères */

La syntaxe de WscrDOSUserInit() est la suivante :

        WscrUserInit(argc, argv)
int argc;
char *argv[];

où argc et argv sont les paramètres de programme, dans la forme classique de ceux du main(). Si la fonction retourne une valeur non nulle, le programme s'arrête. Sinon l'application démarre normalement.

Comment associer une icône à une application

Par défaut, aucune icône n'est associée à l'application. Seul le texte SCR4 est affiché dans les applications minimisées. Pour créer sa propre icône, il faut procéder comme suit:

1. Créer une icône à l'aide d'un outil comme Borland Resource WorkShop.

2. Définir un fichier myprog.rc (resource) qui doit contenir uniquement la définition de l'icône :

            #include <windows.h>

1000 ICON myprog.ico

3. Compiler (dans le makefile) ce fichier pour obtenir un fichier myprog.res

            rc -id:\bc45\i -r myprog.rc

4. Créer la fonction WscrDOSUserInit() pour assigner le numéro de l'icône (1000 dans le cas présent) à la variable WSCR_ICON. Linker cette fonction avec l'éxécutable (soit myprog.exe).

5. Adjoindre les ressources définies dans myprog.res à l'exécutable myprog.exe généré par BCC -W:

            rc myprog.res

Comment changer la taille de la police par défaut

Il suffit d'assigner le numéro de la police sélectionnée à la variable WSCR_FONTNB. Par défaut, cette valeur est fixée à 5. Les polices disponibles peuvent varier de système à système. Au besoin, il faudra les ajouter dans le "Control Panel/Fonts" de Windows.

La liste des tailles disponibles est :

        0: 4  x 6
1: 5 x 12
2: 6 x 8
3: 7 x 12
4: 8 x 8
5: 8 x 12
6: 10 x 18
7: 12 x 16
8: 16 x 8
9: 16 x 12

Le menu système permet à l'utilisateur de modifier ces tailles en cours de travail.

Menu System

Ce menu est actionné par la combinaison Alt+espace ou à l'aide de la souris. Dans le cas d'une application SCR/AL1, il ne permet pas de changer la taille de la fenêtre, mais par contre il offre deux possibilités intéressantes:

Debugging

Borland offre un debugger sous Windows. Pour l'exploiter, il faut compiler et linker avec l'option -v. Cependant, ce debugger présente manifestement certaines anomalies.

Il est cependant possible d'obtenir de l'informations directement par le message produit par Windows lors d'un plantage. En effet, le message indique l'adresse de l'instruction qui plante le programme. En recherchant dans la dernière partie du fichier a.map généré par le linker, on retrouve ainsi assez facilement le nom de la fonction en cause.

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be