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

SCR/AL1 - Evolutions récentes

14. Modifications apportées dans la version 4.36 (septembre 97)

Fonctions de librairie

Généralisation de fonctions aux TPAGES

Pour permettre de généraliser facilement les programmes et fonctions opérant sur des PAGES, les fonctions suivantes acceptent comme paramètre aussi bien un pointeur vers une PAGE que vers une TPAGES :

Le paramètre PAGE * peut être remplacé par un paramètre TPAGES *. Dans ce cas, toutes les PAGES définies dans la TPAGES sont tour à tour traitées. Par exemple, dans le cas de SCR_isam_to_page(), les valeurs de l'ISAM sont copiées dans toutes les PAGES définies dans la TPAGES.

A2M

Une correction a été apportée dans la fonction d'impression des graphiques: le pointeur dans la page n'était pas décalé suffisamment vers le bas, ce qui produisait une superposition partielle de l'objet suivant sur le graphique lui-même.

Modification de l'accès aux champs d'un groupe

Il est possible de modifier l'attribut I/O des champs d'un groupe d'une PAGE par une fonction C. Il faut cependant connaître le numéro d'ordre du groupe concerné. Le premier groupe porte le numéro 1 (pas 0). Les champs ne faisant pas partie d'un groupe appartiennent au groupe 0.

    PG_set_grpio(PAGE *pg, int grpnb, int io_def)

io_def vaut SCR_INPUT ou SCR_OUTPUT.

On ne peut utiliser la valeur SCR_ACCESSIBLE à ce niveau.

Fonction Debug

La variable globale

    int DebugActif

permet d'annuler temporairement l'output dans un fichier. Il suffit de fixer sa valeur à 0.

Version Windows

PG_display_error() et SCR_confirme()

Le titre des boîtes de dialogue associées à ces fonctions est celui de la fenêtre la plus récemment activée dans le programme.

ACCEL

Les touches fonctions définies dans l'ABAR ne sont pas opérationnelles. Le traitement à effectuer dans le cas de Windows est en effet différent de celui en mode caractères. Sous Windows, il s'agit d'un raccourci clavier comparable aux FNKEYS d'une PAGE, tandis qu'en mode caractère, la PAGE (MPAGE, ..) courante est quittée avant que ne s'exécute l'ACTION associée.

Comme ces comportements sont totalement différents, il est conseillé dans le cas d'applications devant fonctionner dans les deux versions de se limiter aux FNKEYS globables à l'application et des FNKEYS des PAGES.

De plus, on ne peut aisément sous-classer les MENUS des ABAR sous Windows. A suivre ...

SCR_record_key()

Toutes les touches définies dans SCR n'ont pas d'équivalent en Windows (shift, ctrl, ...). La raison est que sous Windows, on définit les touches de bases (F5, ...) et qu'on utilise une autre fonction (IsShift(), ...) pour savoir si ces touches sont modifiées.

Il est donc impossible de faire croire à Windows que l'on a pressé Shift-F5. SCR_record_key() ne fonctionne donc pas dans tous les cas (SCR_S_F*, SCR_S_CSR_*, SCR_C_F*, ...). Raison de plus pour éviter cette fonction.

Langage SCR

MPAGE : Champs AUTO

Lors de la création d'un record en édition d'une MPAGE, trois opérations sont possibles :

Seules les première et dernière opérations sont effectuées par défaut. L'opération 2 est effectuée si le mot-clé USE_REF Yes est défini dans la MPAGE.

Une correction est effectuée par rapport aux versions antérieures : le record est vidé avant l'édition de la BPG, ce qui n'était pas le cas auparavant avec pour conséquence que la valeur du champ AUTO contenue dans le record de l'ISAM au moment de la création n'était mise à 0 que si ce champ se trouvait dans la BPG.

Si donc un champ AUTO fait partie de l'ISAM traité et n'apparaît pas dans la BPG, ce champ est annulé pour être calculé automatiquement au moment de la création du record.

MPAGE : FNKEYS

Sous Windows, une FNKEY ayant comme action ABORT dans la définition d'une MPAGE permet de quitter la MPAGE, comme c'est la cas en mode caractère.

L'importation (MP_IMPORT) peut donc être implémentée de la façon suivante :

dans une PAGE pgadr :

            FIELD ISAM ispost ISF code
FNKEY {F4 {MP_import mppost pgadr}}

dans la MPAGE mppost :

            FNKEY {F4 {ABORT}}

De cette façon, lorsque l'on presse F4 dans le champ code de la PAGE pgadr, la MPAGE mppost est éditée. Après sélection de l'enregistrement adéquat dans la MPAGE, il suffit de presser F4 pour quitter l'édition de la MPAGE et importer dans la PAGE pgadr les valeurs du record sélectionné.

MPAGE sans champs dans la APG

Les MPAGE n'ayant aucun champ input dans la APG "sautent" un niveau de MENU lors du début de l'édition. Lorsqu'on veut quitter une MPAGE de ce type, il fallait sous Windows (contrairement à la version caractères) presser deux fois ESCAPE ou F3: après le premier ESCAPE, on repassait par le premier menu (Classement, Démarrer, Quitter). Ce premier niveau de menu est sauté également lors de la fin de l'édition.

F1, S_F1, C_F1, A_F1

L'utilisation sous Windows de la touche F1 et de ses avatars s_F1, c_F1 et a_F1 pour déclencher une ACTION quelconque est possible avec certaines précautions. Cependant, l'interface standard de Windows exige que cette touche soit utilisée exclusivement pour démarrer la consultation d'un fichier d'aide. Cette réserve émise, les règles dans SCR/AL1 pour Windows sont les suivantes:

En principe, F1 déclenche l'aide où que l'on se trouve dans l'application. Les autres touches (shift, control et alt) combinées avec F1 n'ont pas d'effet (sinon celle d'une éventuelle ACTION associée).

On peut redéfinir l'ACTION associée à F1 dans les PAGES et les APPL.

Dans le cas des PAGES, cela ne pose pas de problème particulier. Par contre, dans le cas des APPL, la touche F1 ne peut pas être toujours interceptée (en particulier en édition des MENUS).

Par conséquent, il est conseillé de limiter la redéfinition de la touche F1 dans le cas des APPL.

TPAGES

Correction dans l'affichage lorsqu'il n'y a pas de SCREEN dans les PAGES.

En mode Windows, le bouton HELP est opérationnel. Le bouton APPLY est supprimé.

La END_FN des PAGES empêchent de passer d'une page à la suivante si la valeur de retour est non nulle. La END_FN de la TPAGES refuse de "terminer" si le code de retour est non nul.

WIZARD

Le mot-clé WIZARD dans une TPAGES permet d'exploiter les TPAGES comme WIZARD au lieu de pages de propriétés. Cette fonction n'est opérationnelle que sous Windows dans la version 4.36. Elle sera généralisée dans les versions suivantes.

Les boutons qui se trouvent sous la PAGE courante (Précédent, Suivant, ...) sont automatiquement adaptés à la position de la PAGE courante dans la TPAGES. "Précédent" n'existe pas dans la première PAGE, "Suivant" est remplacé par "Terminer" dans la dernière.

Le bouton "Help" est toujours présent.

MPAGES et SMPAGES

Les MPAGES sont généralisées aux TPAGES qui peuvent remplacer les BPG. Il suffit de définir une TPAGES dont les sous-PAGES découpent le record de l'ISAM à éditer et de remplacer BPG pg_defn par TPAGES tpg_defn

Le mot-clé TPAGES est reconnu également dans les SMPAGE.

Support multi-lingue

Le support multi-lingue dans les messages et les menus type de SCR/AL1 est assuré par le fichier scr_err.txt qui peut contenir plusieurs langues pour chaque message.

Certains messages sont cependant encore erronément hardcodés. Dans cette version, les corrections suivantes sont apportées (les textes sont dorénavant lus dans scr_err.txt):

VFIELD

Les champs des records de longueur variable peuvent être exploité en C de différentes façons. Analysons d'abord la logique de la création et de la lecture des records de ce type.

Lorsqu'un record contient des champs de longueur variable ou que des champs sont ajoutés dans un record après la création initiale (ce qui est possible si lors de la création de l'ISAM le mot-clé VARLEN se trouve dans la définition de l'ISAM), le traitement des champs de la partie "variable" du record s'effectue différemment de celle des champs de la partie "fixe".

Prenons un exemple :

    ISAM is_test {
"test" VARLEN
FIELD string 20 Name Nom
..

VFIELD editor Name edit
VFIELD date Name Date
...
}

Accès par fonctions C

    IS_set_vfield(ISAM *is, int fld_nb, char *ptr, int lg)

Cette fonction se charge d'allouer l'espace nécessaire (lg bytes), puis y copie le contenu de ptr.

    IS_get_vfield(ISAM *is, int fld_nb, char **ptr)

Cette fonction retourne dans ptr la valeur du pointeur alloué lors de la lecture du record courant.

Attention, ce pointeur n'est plus valable après la lecture suivante, toutes les pointeurs nécessaires étant libérés avant d'être réalloués.

    IS_get_vfield_lg(ISAM *is, int fld_nb)

Cette fonction retourne la longueur du champ fld_nb (de longueur variable) du record courant de l'ISAM is.

Accès par les objets

Aucune implémentation de lecture ou d'assignation basée sur les OBJ n'a été effectuée pour les champs de longueur variable.

Accès par valeurs directes

Une première tentative de déclaration de macros a été réalisée dans cette version pour faciliter l'exploitation des champs de longueur variable. Cette implémentation sera très certainement revue dans les versions suivantes.

En reprenant l'exemple de l'ISAM de départ, on a les defines suivants:

Pour modifier les valeurs des champs, l'idée est de procéder de la façon suivante.

Attention, la version 4.36 est incorrecte à cet égard. Ne pas utiliser les exemples suivants dans cette version.

    1. strcpy(is_test_NOM, "SCR/AL1");

2. SCR_free(is_test_EDIT);
is_test_EDIT = SCR_stracpy("SCR/AL1");
is_test_lg_EDIT = strlen("SCR/AL1") + 1;

3. is_test_DATE = 19900101L;

On notera que :

On peut connaître la longueur d'un champ EDITOR par la macro

            is_test_lg_EDIT;

Programmes

SCR4W_AG

Le programme scr4w_ag permet d'imprimer en batch un fichier a2m. De nouvelles options lui ont été ajoutées.

SCR4_A2H

Correction de la gestion du paramètre -paranum.

SCR4_A2R

Correction de la gestion du paramètre -paranum.

SCR4_A2F

Correction de la gestion du paramètre -paranum.

SCR4

Nouvelles options pour le dump d'ISAM :

Correction lors de la lecture de fichiers .f. Si une des MPAGE utilisée n'est pas définie, le programme ne se plante plus.

Nouvelle option pour créer tous les ISAM en une seule opération :

    -icall

Les ISAM préexistant ne sont pas modifiés.

SCR4_E

Nouvelle option -noscrpoint qui supprime les points en fin de DRAW dans les écrans. Cette option rend sous Windows l'affichage des SCREEN plus élégants.

MT

Cette version (3.9) de MT comporte deux corrections :

ORACLE

L'implémentation d'une interface avec un serveur Oracle est en test dans cette version. A cette fin, un nouvel exécutable et une nouvelle librairie sont disponibles.

Pour créer un exécutable client Oracle, il faut linker également avec la librairie ociw32.lib (Win32).

Les variables d'environnement suivantes fournissent les informations sur le serveur :

Ces variables étant correctement définies, tout programme linké avec la librairie Oracle pourra accéder au serveur.

Le programme s32wor dispose de deux paramètres liés aux requêtes SQL :

Langage A2M

De nouvelles intructions ont été introduites pour améliorer l'impression des tableaux et des graphiques. Ces commandes ne sont opérationnelles pour l'instant qu'en mode GDI.

    .tpage  0|1
.tbreak 0|1
.gpage 0|1

D'autre part, la commande .page a été implémentée en mode GDI. Elle force un saut de page à l'endroit du fichier où elle se trouve. Dans la foulée, la gestion des sauts de pages pour les paragraphes avec l'attribut newpage a également été implémentée.

tpage

Cette commande permet de forcer ou non un saut de page à chaque début de tableau. Elle peut être introduite n'importe où dans le fichier a2m et prend effet dès le tableau en cours ou le tableau suivant. Elle est valable jusqu'à la fin du fichier. Si plusieurs impressions ont lieu au sein du même programme, la dernière valeur rencontrée aura effet pour les fichiers suivants.

    .tpage 0 | 1

Exemple

    .tpage 1 ---> force un saut de page

tbreak

Cette commande permet de forcer ou non un tableau à être entièrement sur la même page (pour peu que la page soit assez grande). Elle peut être introduite n'importe où dans le fichier a2m et prend effet dès le tableau en cours ou le tableau suivant. Elle est valable jusqu'à la fin du fichier. Si plusieurs impressions ont lieu au sein du même programme, la dernière valeur rencontrée aura effet pour les fichiers suivants.

    .tbreak 0 | 1

Exemple :

    .tbreak 1 ---> tout le tableau se trouvera sur la même page

La commande .gpage

Cette commande permet de forcer ou non un saut de page à chaque début de graphique. Elle peut être introduite n'importe où dans le fichier a2m et prend effet dès le graphique en cours ou le graphique suivant. Elle est valable jusqu'à la fin du fichier. Si plusieurs impressions ont lieu au sein du même programme, la dernière valeur rencontrée aura effet pour les fichiers suivants.

    .gpage 0 | 1

Exemple

    .gpage 1 ---> force un saut de page avant le graphique

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