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

SCR/AL1 - Evolutions récentes

29. Modifications apportées dans la version 4.20 (01/07/95)

Cette version modifie les définitions des objets et nécessite donc une recompilation complète.

Fonctions de calcul en arithmétique infinie

Ces fonctions permettent d'effectuer des calculs sur des nombres de longueur quelconque en assurant un résultat précis.

MPAGE

De nombreuses modifications ont à nouveau eu lieu dans les MPAGES, tout en gardant une compatibilité (presque) totale avec les anciennes définitions.

Pour un exposé détaillé et commenté il y a lieu de se reporter à la prochaine version des manuels.

Suppression de mots-clés

Les mots-clés suivants sont supprimés: BPG2, SELECT_BPG_FN. Les notions qu'ils implémentaient sont remplacées par les notions plus générales de VIEWS explicitées plus bas.

Position des champs de la LPG définie dans SCREEN de la APG

Lorsque la position des champs de la LPG sont définis à partir du SCREEN de la APG, il faut que les

Si ce n'est pas le cas, le positionnement ne peut être réalisé.

D'autre part, une correction est effectuée si le premier champ ne débute pas en colonne 1 du SCREEN de la APG.

Champs FLD_COUNT de la APG de type STRING

Un champ de la APG permet de visualiser le nombre de lectures dans l'ISAM : il suffit de lui donner l'attribut FLD_COUNT. Ce champ peut maintenant être de type STRING (un seul caractère sous forme d'hélice tournant d'un cran à chaque lecture). La variable globale MP_COUNT_FREQ permet de n'afficher ce champ qu'une fois toutes les MP_COUNT_FREQ lectures. Par défaut MP_COUNT_FREQ est fixé à 10.

Couleur d'affichage de la LPG

Les lignes d'une MPAGE vides (fin de fichier) sont affichées dans la couleur de définition de la LPG et non dans la couleur DEFAULT.

DELETE_1, INSERT_1 et ENTER_1

Dans le cours de l'édition de la MPAGE les touches DELETE_1, INSERT_1 et ENTER_1 peuvent être utilisées (SCR_record_key()). Leur comportement diffère de celui de leur pendant INSERT, DELETE et ENTER :

Définition des VIEWS

On peut souhaiter que l'affichage des enregistrements à l'aide d'une MPAGE varie en fonction du contenu des enregistrements eux-mêmes. Ainsi, dans une même portefeuille financier, on peut avoir à la fois des obligations, des options, des actions, etc.

Il s'agira donc d'afficher ces informations dans des LPG différentes et de les éditer dans des BPG différentes. De plus, même si physiquement la base de données est la même, les champs définis dans l'ISAM, hormis ceux servant d'index, peuvent être vus totalement différemment selon le cas.

Entre le cas standard et ce cas complexe, toute une gamme de situations peut être imaginée: des produits que l'on veut différencier selon le code TVA en les affichant dans des couleurs distinctes, des dossiers qui sont clôturés ou ne le sont pas et doivent faire apparaître des informations différentes, etc.

Pour préciser les différents affichages des enregistrement, on définira:

La syntaxe de définition d'une VIEW est :

        VIEW n {
[LPG page_defn]
[BPG page_defn | BC bc_defn]
[ISAM isam_defn]
}

Le numéro (n) de la VIEW l'identifie (en commençant à 1). Ce numéro sera retourné par la VIEW_FN et la VIEW_CREATE_FN.

La LPG est la PAGE qui remplace la LPG par défaut. De même pour le BPG ou le BC qui seront utilisés pour l'édition ou la visualisation d'un enregistrement.

L'ISAM n'est jamais ouvert: il ne sert qu'à définir une découpe en champs différente de celle de l'ISAM par défaut.

VIEW_FN

Lorsque différentes VIEW sont définies pour une MPAGE, il faut pouvoir, pour chaque record, déterminer la vue à utiliser, que ce soit pour la LPG, la BPG ou l'ISAM de définition.

La VIEW_FN est utilisée à cette fin. Ce sera toujours une fonction C qui retournera le numéro de la vue à exploiter pour l'affichage (LPG) ou l'édition (BPG ou BC) d'un enregistrement.

Une valeur de retour de 1 correspond à la vue VIEW 1, 2 à VIEW 2, etc. Pour toute autre valeur, les définitions par défaut, (LPG, BPG ou BC, ISAM) seront utilisées.

La VIEW_FN peut exploiter les valeurs du record de l'ISAM par défaut (celui défini par le mot-clé ISAM dans la définition de la MPAGE). Par exemple, pour distinguer deux records selon le chiffre d'affaire, on écrira :

        VIEW_FN {C_FN return((is_cli_CHAFF < 500000L) ? 0 : 1)}

La vue par défaut sera utilisée si le chiffre d'affaire est inférieur à 500000 et VIEW 1 s'il est supérieur à cette valeur. Les deux vues pourraient dans ce cas par exemple se distinguer uniquement au niveau de la couleur de la LPG.

VIEW_CREATE_FN

Lorsque différentes VIEW sont définies pour une MPAGE, il faut pouvoir, lors de la création d'un nouveau record, déterminer à l'avance la vue à utiliser de façon à savoir quelle BPG ou quel BC utiliser pour la création.

La VIEW_CREATE_FN est utilisée à cette fin. Ce sera toujours une fonction C qui retournera le numéro de la vue à exploiter pour l'affichage (LPG) ou l'édition (BPG ou BC) d'un enregistrement. En général, cette fonction C affichera un MENU et, selon la valeur de retour de ce menu, retournera un numéro de vue.

Selon la valeur de retour, les traitements seront différents :

Par exemple, en supposant que deux types de records peuvent être créés dans la base de données, l'un correspondant à des valeurs, l'autre à un commentaire, on aura :

        MENU mn_choice {
line 10 col 60
OPTION "Ligne de valeurs"
OPTION "Ligne de commentaire"
}

MPAGE mp_valeurs {
LPG lpg_valeurs
BPG bpg_valeurs
ISAM is_valeurs
VIEW_CREATE_FN {C_FN return(MN_edit(mn_choice) - 1);}
VIEW 1 {LPG lpg_comment BPG bpg_comment ISAM is_comment}
}

Affichage au début de la lecture

Au lancement de la lecture des records pour remplir une MPAGE, l'écran des LPG est vidé. En effet, dans le cas des MPAGE avec SCAN, on peut attendre un certain temps avant que tout l'écran ne soit rempli, et on conservait dans l'écran les enregistrements provenant de la lecture précedente.

Arrêt de la lecture des MPAGE avec SCAN

Le temps d'attente lors du remplissage d'une MPAGE avec SCAN pouvant être très long, l'utilisateur peut interrompre le processus en pressant la touche ESCAPE.

Help local aux MPAGE dans l'édition

Le mot-clé HELP dans la définition d'une MPAGE définit le sujet qui doit être affiché si la touche HELP est pressée pendant l'édition de la MPAGE.

Commentaires

Le mot-clé COMMENT suivi d'un texte indique le commentaire à afficher pendant l'édition de la MPAGE (déplacement dans les LPG seulement).

Si les FNKEYS contiennent également des commentaires, ceux-ci sont ajoutés au COMMENT de la MPAGE.

De plus, en tapant un espace, un MENU reprenant toutes les touches définies et leur commentaire est affiché dans le coin supérieur gauche de la APG.

LPG_MEM ou MP_LPG_MEM YES | No

Comme la MPAGE affiche plusieurs records simultanément, un certain nombre sont conservés en mémoire (BUF_SIZE). Comme les LPG peuvent contenir des champs CODEISAM, à chaque affichage d'une ligne, il faut relire un ou plusieurs ISAM pour compléter la PAGE.

Pour éviter les lenteurs dues à ce processus (répété en permanence), on conserve en mémoire le contenu des LPG.

Cependant, pour les applications pour lesquelles la mémoire est une denrée précieuse, on peut souhaiter ne pas conserver le contenu des LPG en mémoire : c'est l'objet de ce mot-clé.

Ainsi "LPG_MEM No" permet de gagner de la mémoire, mais génère une perte de temps. Par défaut, les LPG sont conservées en mémoire.

Cette option peut être globalisée par GLOBAL {MP_LPG_MEM Yes | No}.

AUTO_CREATE ou MP_AUTO_CREATE Yes | No

Lors du début de la recherche, il se peut qu'aucun record ne soit trouvé. Dans ce cas, soit une création est automatiquement proposée (c'est le cas par défaut), soit aucun affichage ne peut être réalisé. Ce sera alors à l'utilisateur de presser INSERT pour en créer un nouveau ou ESCAPE pour quitter.

En spécifiant AUTO_CREATE No ou MP_AUTO_CREATE No, la création n'est pas proposée automatiquement.

USE_REF Yes | NO

Cette option indique si, lors de la création d'un nouvel enregistrement (INSERT), il faut initialiser les valeurs de la BPG en y plaçant celles définies dans le record de référence. Ce record est celui qui a permis de démarrer la recherche dans la MPAGE et provient donc soit de la APG, soit de la SPG si elle est définie.

Par défaut, ce n'est pas le cas. Dans le cas où un BC sert à la création d'un nouvel enregistrement, ce n'est jamais le cas.

Edition d'un BC au lieu d'une PAGE

On peut dorénavant définir un BC au lieu de la BPG et ce à la fois dans la définition normale de la MPAGE et dans les VIEWS. Lorsque ENTER ou INSERT est pressé, le BC est édité au lieu de la BPG.

EDITION DES CHAMPS FORMAT

L'édition des champs formattés est légèrement amélioré :

Fonction C PG_edit()

Cette fonction retourne des valeurs différentes selon la raison de la fin de l'édition :

BC

Les BC constituent l'essentiel des améliorations apportées à la version 4.20. Certaines fonctionnalités de la version 2 sont notamment réintégrées comme la conservation des champs des LPG. D'autre part, de nombreuses facilités d'accès aux informations des LPG et LBC ont été imaginées.

La compatibilité avec les versions antérieures est quasi-totale, exception faite du remplacement de certains mots-clés récemment introduits.

Suppression de mots-clés

Les mots-clés suivants sont supprimés suite à la généralisation introduite par les VIEW (cfr. infra):

Suppression de l'exécution de la END_FN de la BPG

Pour des raisons obscures, la END_FN de la BPG d'un BC était exécutée deux fois si la touche F10 était pressée. Elle n'est plus exécutée qu'une fois.

Sauvetage des records des LPG

Tous les enregistrements des lignes de BC sont conservés en mémoire en permanence. Comme les LPG peuvent contenir des champs CODEISAM, à chaque affichage d'une ligne, il faut relire un ou plusieurs ISAM pour compléter la LPG.

Pour éviter les lenteurs dues à ce processus (répété en permanence), on peut conserver en mémoire le contenu des LPG. C'est dorénavant le cas par défaut.

Cependant, pour les applications pour lesquelles la mémoire est une denrée précieuse, on peut souhaiter ne pas conserver le contenu des LPG en mémoire. Pour ce faire on indiquera

            LPG_MEM No

dans la définition du BC ou

            BC_LPG_MEM No

dans une section GLOBAL précédant la définition du BC. Dans ce dernier cas, cette valeur affectera tous les BC suivant la section GLOBAL.

Accès direct aux valeurs des LBC et des LPG

Des #define sont généré par scr4_e pour permettre un accès direct aux valeurs des champs des LPG et des LBC. Ces #define sont construits comme suit :

        bcname_ISFLDNAME(i),
et
bcname_pPAGEFLDNAME(i)

respectivement pour le champ ISFLDNAME de l'ISAM LBC et pour le champ PAGEFLDNAME de la PAGE LPG. Dans les deux cas, la valeur est celle du ième record du BC. Soit l'exemple suivant :

        ISAM mylbc {
...
FIELD string 20 NAME nom
FIELD long NAME chaff
...
}

PAGE mylpg {
...
DEFAULTS {ISAM mylbc}

FIELD ISF nom NAME pgnom
FIELD ISF chaff NAME chaff
....
}

BC mybc {
LPG mylpg
LBC mylbc myidx
...
}

On peut utiliser (en cours d'édition du BC mybc) :

Cette dernière définition n'a des sens que si BC_LPG_MEM n'est pas fixé à NO.

Accès par fonction aux valeurs des LBC et des LPG

Il est également possible d'accéder aux valeurs des champs des LPG et LBC via des fonctions :

Nombre de lignes d'un BC

Le nombre de lignes du BC courant peut être obtenue par la fonction BC_nb_lbcs(bc).

On peut donc aisément effectuer une totalisation et la placer dans la LINK_FN du BC (voir définitions dans l'exemple précédent) :

        MYBC_link()
{
int i;
long tot = 0L;

for(i = 0 ; i < BC_nb_lbcs(mybc) ; i++)
tot += mybc_CHAFF(i);

apg_mybc_TOTAL = tot;
PG_display_flds(apg_mybc);
}

LINK_FN

La LINK_FN est exécutée lors de l'affichage de la APG et des LPG

Touche ESCAPE

Pour assurer une plus grande cohérence dans l'édition des BC, la touche ESCAPE quitte l'édition du BC que l'on se trouve dans l'édition des lignes du BC ou de la APG.

De plus, dans l'édition de la BPG (création ou édition d'une ligne), ESCAPE abandonne l'opération en cours mais reste en édition des lignes de BC.

Commentaires

Le mot-clé COMMENT suivi d'un texte indique le commentaire à afficher pendant l'édition du BC (déplacement dans les LPG seulement).

Si les FNKEYS du BC contiennent également des commentaires, ceux-ci sont ajoutés au commentaire.

De plus, en tapant un espace, un MENU reprenant toutes les touches définies et leur commentaire est affiché dans le coin supérieur gauche de la APG.

Help local aux BC

Le mot-clé HELP dans la définition d'un BC définit le sujet qui doit être affiché si la touche HELP est pressée pendant l'édition du BC.

Champs FLD_COUNT dans les LPG, APG et BPG

Si un champ possède l'attribut FLD_COUNT dans une des PAGE de définition du BC, il doit être de type NATURAL ou INTEGER et il se comporte de la façon suivante :

On peut de cette façon faire apparaître automatiquement le nombre total de lignes et le numéro de chacune sans avoir à programmer une seule ligne.

Insertion de lignes de BC et renumérotation automatique

On peut dorénavant introduire de nouvelles lignes dans un BC à n'importe quelle position : avant ou après la ligne courante, ou à la fin du BC.

Si on souhaite utiliser cette fonctionnalité, il faut introduire le mot-clé INSERT_LBC dans la définition du BC. Le MENU scr_bcie (qui peut être adapté par l'utilisateur) est affiché lorsque l'opérateur presse INSERT pour offrir le choix entre ces 3 possibilités.

L'introduction répétée de lignes entre deux lignes existantes conduit inévitablement à une limite : le numéro automatiquement assigné par SCR/AL1 au nouveau record doit se situer entre les deux qui l'entourent.

Lorsque cette situation se présente, les lignes sont toutes renumérotées par incrément de 20. Comme cette opération (plus complexe qu'il n'y paraît) peut prendre quelques secondes dans le cas d'un grand BC, un message est affiché pour indiquer à l'opérateur que la renumérotation des lignes est en cours.

Copy/Paste de lignes de BC

Un interface identique à celui de MT ou de MMT à été construit pour faciliter l'édition des BC : des blocs de lignes de BC peuvent être marqués, copiés et détruits à l'aide des touches Alt+L, Alt+C et Alt+D. Les marques sont annulées par la touche Alt+U.

Comme les touches Alt+lettre sont souvent utilisées comme touches fonctions de l'application, on peut utiliser à la place Ctrl+lettre (comme c'est le cas dans MMT).

La copie peut se faire avant ou après la ligne courante, ou encore à la fin du BC. Le MENU scr_bcie est appelé si le mot-clé INSERT_LBC se trouve dans la définition du BC.

Comme dans le cas de l'insertion, une renumérotation automatique des lignes est effectuée au besoin.

Modifications de l'affichage

La ligne placée sous la dernière ligne de BC est maintenant une ligne continue (semi-graphiques) ou lieu l'une ligne de moins. De plus, si on détruit l'unique ligne d'un BC, l'affichage est corrigé (deux lignes apparaissaient).

D'autre part, un peut spécifier le mot-clé SBAR dans la définition d'un BC. Dans ce cas un SCROLLBAR (semblable à celui des MENU) est placé à gauche des LPG (dans la première colonne de la APG). Le scrollbar comprend le même nombre de lignes qu'il y a de LPG et commence en face de la première LPG.

Vérification de l'existence d'un INDEX NODUP

Le compilateur scr4_e vérifie que l'INDEX du LBC qui lie celui-ci au BC est bien NODUP.

Edition de BC output

L'édition reste possible même si tous les champs de la APG du BC sont output. Cela permet de n'avoir accès qu'aux lignes du BC.

AUTO_CREATE ou BC_AUTO_CREATE Yes | No

Lors du début de l'édition des lignes d'un BC vide, une création de ligne est automatiquement proposée. Si la mot-clé AUTO_CREATE est défini dans le BC avec la valeur No, cela n'est plus le cas : c'est alors à l'utilisateur de presser INSERT pour en créer un nouveau ou ESCAPE pour quitter :

        AUTO_CREATE YES | No

On peut globaliser cette option par le mot-clé

        BC_AUTO_CREATE YES | No

défini dans une section GLOBAL.

Définition des VIEWS

On peut souhaiter que l'affichage des enregistrements à l'aide d'un BC varie en fonction du contenu des enregistrements eux-mêmes. Ainsi, dans une même facture, on peut avoir à la fois des valeurs et des commentaires.

Il s'agira donc d'afficher ces informations dans des LPG différentes et de les éditer dans des BPG différentes. De plus, même si physiquement la base de données est la même, les champs définis dans l'ISAM LBC, hormis ceux servant d'index, peuvent être vus totalement différemment selon le cas.

Pour préciser les différents affichages des enregistrement, on définira:

La syntaxe de définition d'une VIEW est :

        VIEW n {
[LPG page_defn]
[BPG page_defn]
[ISAM isam_defn]
}

Le numéro (n) de la VIEW l'identifie (en commençant à 1). Ce numéro sera retourné par la VIEW_FN et la VIEW_CREATE_FN.

La LPG est la PAGE qui remplace la LPG par défaut. De même pour la BPG qui sera utilisée pour l'édition ou la visualisation d'une ligne du BC.

L'ISAM défini dans une VIEW n'est jamais ouvert: il ne sert qu'à définir une découpe en champs différente de celle de l'ISAM LBC défini dans le BC.

VIEW_FN

Lorsque différentes VIEW sont définies pour les lignes d'un BC, il faut pouvoir, pour chaque ligne, déterminer la vue à utiliser, que ce soit pour la LPG, la BPG ou l'ISAM de définition.

La VIEW_FN est utilisée à cette fin. Ce sera toujours une fonction C qui retournera le numéro de la vue à exploiter pour l'affichage ou l'édition d'une ligne du BC.

Une valeur de retour de 1 correspond à la vue VIEW 1, 2 à VIEW 2, etc. Pour toute autre valeur, les définitions par défaut, (LPG, BPG ou BC, ISAM) seront utilisées.

La VIEW_FN peut exploiter les valeurs du record de l'ISAM par défaut (celui défini par le mot-clé ISAM dans la définition de la MPAGE). Par exemple, pour distinguer deux records selon le chiffre d'affaire, on écrira :

        VIEW_FN {C_FN return((is_cli_CHAFF < 500000L) ? 0 : 1)}

La vue par défaut sera utilisée si le chiffre d'affaire est inférieur à 500000 et VIEW 1 s'il est supérieur à cette valeur. Les deux vues pourraient dans ce cas par exemple se distinguer uniquement au niveau de la couleur de la LPG.

VIEW_CREATE_FN

Lorsque différentes VIEW sont définies pour les lignes d'un BC, il faut pouvoir, lors de la création d'une nouvelle ligne, déterminer à l'avance la vue à utiliser de façon à savoir quelle BPG utiliser pour la création.

La VIEW_CREATE_FN est utilisée à cette fin. Ce sera toujours une fonction C qui retournera le numéro de la vue à exploiter pour la création (BPG) d'une ligne. En général, cette fonction C affichera un MENU et, selon la valeur de retour de ce menu, retournera un numéro de vue.

Selon la valeur de retour, les traitements seront différents :

Par exemple, en supposant que deux types de lignes peuvent être créés dans le BC, l'un correspondant à des valeurs, l'autre à un commentaire, on aura :

        MENU mn_choice {
line 10 col 60
OPTION "Ligne de valeurs"
OPTION "Ligne de commentaire"
}

BC facture {
...
LPG lpg_valeurs
BPG bpg_valeurs
ISAM is_fact
VIEW_CREATE_FN {C_FN return(MN_edit(mn_choice) - 1);}
VIEW 1 {LPG lpg_comment BPG bpg_comment ISAM is_comment}
}

GLOBAL

Les options AUTO_CREATE et LPG_MEM des BC et MPAGE peuvent être définies par défaut globalement dans une section GLOBAL :

Les implications de ces options sont commentées dans les modifications des MPAGE et des BC.

Groupe des fonction S_YY (YY_OLD_DEF)

Les corrections apportées dans la version 4.19 à la gestion des #ifdef, #else et #endif peuvent au besoin être ignorées pour assurer la compatibilité avec les versions antérieures de SCR/AL1. Pour remettre les anciens traitements lors de la compilation de sources SCR/AL1, il suffit d'ajouter l'option -yyold comme paramètre à scr4_e.

Si le groupe de fonctions s_yy est exploité directement par le programmeur, celui-ci peut fixer la variable YY_OLD_DEF à une valeur non nulle pour conserver les anciens traitements.

SCR4_E

La nouvelle option -yyold permet de reprendre les anciens traitements (erronés) des #ifdef, #else et #endif dans les sources SCR/AL1 (voir supra).

DISPLAY PAGE

Correction de bug dans l'affichage des PAGE lorsque FLD_MEM n'est pas défini.

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