ÑÒ~ GMENU.BCKB° GMENU.BCK$BACKUP GMENU011.* GMENU.BCK/SAVE/LOG LAURENT €”™J#”V5.3 _SBFDSP::  _$1$DUA30: V5.3 ~  ð*[AROBAS.LAURENT]GMENU011.A;1+,Ø7X.d/ 4$de$-*0ú123KÿPWOe56ê*#”7À$>0#”89GHˆºJÿNño-$ GMENU011.Aê$@ GMENU011.AœBACKUP/NOASSIST/COMMENT=VAX/VMS SPKITBLD Procedure/INTER/LOG/VERIFY [.TMP_KIT_1]*.* DISK_6:[AROBAS.LAURENT]GMENU011.A/LABEL=(GMENU)/SAVE/BLOCK=9000/GROUP=25VAX/VMS SPKITBLD Procedure LAURENT @¥Ô*#”V5.3 _SBFDSP::  _$1$DUA30: V5.3 $%2*[AROBAS.LAURENT.TMP_KIT_1]DOC_MISE_EN_OEUVRE.TXT;1+,{d.*/ 4C*(ˆ- ã0 123KÿPWO+56€µûѨ¥”7 úÞ)#”89GHˆºJÿ gestionnaire de menusIgestionnaire de menusGMENU-IGESTIONNAIRE DE MENUS)Manuel d'utilisation et de mise en ÷uvre.Auteur~: Laurent QUIVOGNE Création~: Mercredi 13 Mars 1991$Modification~: Mercredi 19 Juin 1991description générale4Le gestionnaire de menus se compose de deux outils~:;·~Un outil de gestion d'une base de menus (GMENU_UTIL.EXE) F·~Un outil d'utilisation de la base de menus (GMENU.COM et GMENU.EXE).bL'outil de gestion est composé d'un langage de commande qui est décrit plus loin dans ce document.·Tous les fichiers 'système' (Les exécutables, les procédures de commande, la librairie de HELP, etc...) doivent être placés dans une directory pointée par le nom logique GMENU$SYSTEM.,Le fichier de menus sur lequel on souhaite travailler doit être placé dans une directory pointée par le nom logique GMENU$DIR ou doit éventuellement être lui-même pointé par le nom logique MENU$FICH. Si ce nom logique n'est pas défini, le fichier de menus doit impérativement s'appeler MENU$FICH.DAT.Structure du fichier de menussLe fichier de menus contient la définition de toute votre arborescence, des utilisateurs et de leurs autorisations.!Les autorisations sont implémentées sous la forme de profils que vous définissez dans votre base. Vous associez ensuite ces profils à des utilisateurs et à des menus. Ainsi, un utilisateur a l'autorisation d'accéder à un menu si cet utilisateur et ce menu ont au moins un profil en commun.pLes utilisateurs sont des noms auxquels, comme cela a été précisé ci-dessus, on associe un ou plusieurs profils.ÛLes menus correspondent à des items. Chaque menu est défini par un libellé qui apparaîtra sur l'écran lors de l'utilisation et par un menu père. Deux menus ne peuvent pas avoir à la fois le même père et le même libellé.ÚEn interne, les menus sont identifiés par des IDs qui sont gérés par le système et qui vous sont donnés à la création des menus. Cet ID vous servira pour référencer le menu lors d'une modification ou d'une destruction.üEn outre, le menu peut pointer sur un fichier de commande qui sera exécuté si l'utilisateur choisit ce menu. Ce fichier de commande peut être assortit de paramètres. Cependant, un menu pointant sur un fichier ne pourra pas être le père d'un autre menu.kDe même que pour les utilisateurs, on associe des profils aux menus. Notez que pour donner accès à un menu à un utilisateur donné, il faut non seulement donner à l'utilisateur et au menu un même profil mais, de plus, tous les ascendants de ce menu devront également posséder ce profil afin que l'utilisateur puisse suivre l'arborescence jusqu'au menu en question.!Utilisation de l'outil de gestionfL'outil de gestion s'utilise avec une foreign command et vous devez par conséquent définir un symbole. Par exemple~:$$ GMENU :== $gmenu$system:gmenu_util6Ensuite, l'utilitaire se lance en tapant la commande~:$ GMENU¡Vous pouvez alors, sous le prompt GMENU> taper les commandes du langage décrit plus loin. Vous quittez cette session interactive en tapant EXIT ou F10 ou CTRL-Z.SVous pouvez également, sous DCL lancer une commande du gestionnaire sous la forme~:$ GMENU commande-de-gmenuCAprès que la commande a été exécutée, le système retourne sous DCL. Cette fa on de procéder présente l'avantage de pouvoir inclure des symboles dans la ligne de commande. En particulier, lors de la création d'un menu, il est possible de spécifier un symbole dans lequel sera stocké l'ID du menu nouvellement créé. Vous pouvez ensuite créer d'autres menus fils de ce dernier menu en spécifiant le qualifier /PARENT='symbole' dans la ligne de commande. Cette syntaxe ne serait pas comprise dans une session interactive (sous le prompt GMENU> ) où les symboles ne sont pas traduits.Après avoir correctement positionné les noms logiques (GMENU$DIR et MENU$FICH), la première fois que vous lancerez l'outil de gestion, celui-ci se fait confirmer la création du fichier MENU$FICH. Tapez O si vous souhaitez effectivement créer un fichier de menus.aUn exemple d'utilisation de cet outil se trouve dans la procédure~: GMENU$SYSTEM:MENU_GESTION.COMMise en ÷uvre de GMENUXPour activer le système de menus, vous devez lancer la procédure GMENU$SYSTEM:GMENU.COM.ŠL'identification de l'utilisateur entrant dans le système de menus se fait de la fa on suivante et dans l'ordre de prioriré décroissante~:+·~Le paramètre P1 de la procédure GMENU.COM(puis, si ce dernier n'est pas spécifié~:"·~La valeur du symbole UTILISATEUR.puis, si ce dernier n'est pas  défini ou vide~:·~Le username au sens VMS.¬Le programme lui-même utilise la valeur du symbole UTILISATEUR. Si vous souhaitez modifier le comportement du système de menus, vous pouvez modifier le procédure GMENU.COM.¤Un programme de déconnexion automatique est intégré au menu. Cette déconnexion a lieu après une période d'inactivité définie par le symbole GMENU$TIMER en secondes.TAu terme de GMENU$TIMER, un premier WARNING apparaît pendant dix secondes à l'écran.šAu terme d'une deuxième période de GMENU$TIMER et si l'utilisateur n'a pas frappé de touches entre temps, une deuxième warning apparaît suivi du message~:SESSION INACTIVE DEPUIS x MNELLE SERA DECONNECTEE DANS 5 MN%********** TAPEZ UNE TOUCHE *********Si, au terme de ces 5 minutes, c'est-à-dire globalement au terme de 2 * GMENU$TIMER secondes + 5 minutes, l'utilisateur n'a pas réagi, le système de menus est arrêté. (l'utilisateur ne sera effectivement déconnecté par un LOGOUT que si vous spécifiez ce LOGOUT en sortie de GMENU.COM).Le contexte de chaque utilisateur est sauvegardé dans un fichier nommé : POS_DISPLAY.'utilisateur'. Ces fichiers sont stocké dans la directory pointée par GMENU$DIR. Il est préférable mais non nécessaire d'affecter à chaque personne utilisant le menu un nom d'utilisateur dans la base.INTERACTION ENTRE LES OUTILSÌL'outil de gestion ne peut être utilisé si des utilisateurs sont connectés sur le fichier de menus. Une solution consiste à travailler sur deux versions du fichier de menus, placées dans des directories différentes, l'une servant à l'exploitation, l'autre à l'outil de gestion. La mise en exploitation de modifications réalisées à l'aide de l'outil de gestion se fait par un 'COPY' de la directory d'études vers la directory d'exploitation du fichier de menus.gUn procédure (GMENU$SYSTEM:GMENU_REORG) vous permet avant ce transfert d'optimiser le fichier de menus.)LISTE DES COMMANDES de l'outil de gestion ADD MENU 1 ADD profil 3 ADD user 4 GENERATE 5HELP 7 modify menu 8modify profil 10modify user 11 remove 12 SET OUTPUT 13 show files 14 show menu 15show profil 17 show user 18 .m.ADD MENU&Permet d'ajouter un menu dans la base.format ADD MENU/TEXT=texte description\Permet d'ajouter un menu dans la base de libellé "texte". Le qualifier/TEXT est obligatoire.úLe père du menu est soit la valeur spécifiée par /PARENT, soit le dernier menu créé, soit la racine si aucun menu n'a précédemment été créé. Vous ne pouvez pas créer un menu fils d'un père qui n'existe pas ou qui a un fichier de commande (voir /FILE)6 L'ID du menu est affiché à l'écran après sa création. Qualifiers/FILE = file-nameAPermet de spécifier une procédure de commande lancée par ce menu.Le type par défaut est .COM.(Un tel menu ne pourra pas avoir de fils.+Ce qualifier est incompatible avec /SYMBOL./PARAMETERS = param-strþCe qualifier permet de spécifier les paramètres avec lesquels la procédure de commande sera appelée. Les paramètres sont séparés par des blancs, mais il n'est pas possible de passer des symboles qui seraient évalués au moment du lancement de la commande.+Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""3Ce qualifier n'est permis que si /FILE est présent. /PARENT = Id’Permet de spécifier le père du menu. Id doit être l'Id d'un menu existant dans la base. Si vous appelez l'utilitaire avec une commande du type : $ MY_COM ADD MENU...GVous pouvez spécifier l'id par un symbole entre quotes : /PARENT='père'/PROFIL = profil-list,Liste des profil@};fS$ GMENU011.A{d ã2[AROBAS.LAURENT.TMP_KIT_1]DOC_MISE_EN_OEUVRE.TXT;1C*1Ps qui donnent accès au menu.\Tous les profils spécifiés doivent exister dans la base sinon l'utilisateur n'est pas créé.‹Si vous spécifiez plusieurs profils mettez les entre parenthèses et séparez-les par des virgules sinon vous pouvez omettre les parenthèses./SYMBOL = symbolKDemande au système de stocker l'ID du menu créé dans le symbole : 'symbol'.)Ce qualifier est incompatible avec /FILE. /TEXT = texteÇPermet de spécifier un libellé d'au plus 35 caractères. Si votre texte contient des blancs ou des caractères spéciaux ou si vous souhaitez conserver des minuscules, mettez le entre double-quotes (").Ce qualifier est obligatoire.ExempleGMENU> ADD MENU/PARENT=0 -& /TEXT="Essai"/SYMBOL=TOTO/PROFIL=DVLPMenu créé - ID : 000000000005 GMENU> EXIT$ show symbol TOTO TOTO = "000000000005" .m.ADD profil(Permet d'ajouter un profil dans la base. format ADD profil nom-de-profil descriptionjCette commande permet d'ajouter un profil dans la base en spécifiant éventuellement un commentaire (/TEXT) Paramètres nom-de-profilnC'est le nom du profil ajouté dans la base : une chaîne de caractères alphanumériques de 12 caractères maximum Qualifiers/TEXT = commentaireÃPermet de spécifier un commentaire au profil. Si votre commentaire contient des blancs ou des caractères spéciaux ou si vous souhaitez conserver des minuscules, mettez le entre double-quotes (").ExempleGMENU> ADD PROFIL DVLP - /TEXT="Profil de développeur"FAjoute le profil de nom DVLP et de commentaire~: Profil de développeur .m.ADD user-Permet d'ajouter un utilisateur dans la base.0format ADD user username /profil = profil-list description}Cette commande permet d'ajouter un utilisateur dans la base en spécifiant ses profils (le qualifier /PROFIL est obligatoire). ParamètresusernamePChaîne de caractères de 12 caractères maximum spécifiant le nom de l'utilisateur Qualifiers/PROFIL = profil-listListe des profils auxquels a droit l'utilisateur. Tous les profils spécifiés doivent exister dans la base sinon l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profils mettez les entre parenthèses et séparez-les par des virgules sinon vous pouvez omettre les parenthèses.Ce qualifier est obligatoire.Exemple*GMENU> ADD USER ETUDES/PROFIL=(DVLP,USER1) Cette commande permet d'ajouter l'utilisateur de nom ETUDES avec les profils DVLP et USER1 qui doivent préalablement avoir été créés par la commande ADD PROFIL. .m.GENERATE¤Permet de générer un fichier de commande qui, lancé sous DCL vous permettra de créer dans un autre fichier de menus les éléments du type que vous avez sélectionné.FORMAT generate descriptionåCette commande permet de générer un fichier de commande contenant les ordres DCL permettant de créer dans un autre fichier de menus les éléments du type (profil, menu ou user) que vous avez sélectionnés avec le qualifier /SELECT.gCependant, il n'y a aucune garantie concernant le fait que les menus soient recrées avec les mêmes IDs. Qualifiers/OUTPUT = fichieraVous permet de donner le nom du fichier de commande dans lequel seront écrites les commandes DCL..Par défaut, ce fichier est GMENU_GENERATE.COM./SELECT = (mot-clé,...)€Vous permet de sélectionner le type d'élément pour lequel vous voulez générer les commandes ADD ... dans le fichier de commande.MSi vous ne spécifiez qu'un seul mot-clé, vous pouvez omettre les parenthèses. /SELECT=ALL&Sélectionne tous les éléments (défaut) /SELECT=MENUSélectionne les menus./SELECT=PROFILSélectionne les profils. /SELECT=USERSélectionne les utilisateurs.Exemple$GMENU> GENERATE/SELECT=(USER,PROFIL)§Cette commande va générer un fichier GMENU_GENERATE.COM (défaut) qui contiendra toutes les commandes de création des utilisateurs et des profils contenus dans la base..m.HELPEPermet d'obtenir de l'aide sur les commandes du gestionnaire de menu.format help [topic] parametrestopic7Sujet à propos duquel vous souhaitez obtenir de l'aide.GLe système prompte ensuite pour d'autres sujets comme dans le help VMS..m.modify menu(Permet de modifier un menu dans la base.)format modify menu /identification = id descriptionCette commande permet de modifier un menu dans la base en le spécifiant avec le qualifier /ID. Ce qualifier est donc obligatoire. Qualifiers/FILE = file-nameJPermet de spécifier une nouvelle procédure de commande lancée par ce menu.Le type par défaut est .COM.]Un tel menu ne pourra pas avoir de fils.et la modification sera refusée s'il a déjà des fils./IDENTIFICATION = IdŽPermet de spécifier L'ID du menu. Id doit être l'Id d'un menu existant dans la base. Si vous appelez l'utilitaire avec une commande du type~:$ MY_COM MODIFY MENU...NVous pouvez spécifier l'id par un symbole entre quotes~: /IDENTIFICATION='ID'.Ce qualifier est obligatoire./PARAMETERS = param-strþCe qualifier permet de spécifier les paramètres avec lesquels la procédure de commande sera appelée. Les paramètres sont séparés par des blancs, mais il n'est pas possible de passer des symboles qui seraient évalués au moment du lancement de la commande.+Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""_Ce qualifier n'est permis que si /FILE est présent ou si le menu a déjà un fichier de commande. /PARENT = Id›Permet de spécifier le nouveau père du menu. Id doit être l'Id d'un menu existant dans la base. Si vous appelez l'utilitaire avec une commande du type : $ MY_COM ADD MENU...GVous pouvez spécifier l'id par un symbole entre quotes : /PARENT='père'/PROFIL = ([-],profil,...)aPermet d'ajouter des profils au menu ou d'en enlever. Dans ce cas, la liste doit commencer par -.XTous les profils spécifiés doivent exister dans la base sinon le menu n'est pas modifié.ŒSi vous spécifiez plusieurs profils, mettez les entre parenthèses et séparez-les par des virgules sinon vous pouvez omettre les parenthèses. /TEXT = texte@Permet de spécifier un nouveau libellé d'au plus 35 caractères. Si votre texte contient des blancs ou des caractères spéciaux ou si vous souhaitez conserver des minuscules, mettez le entre double-quotes (").Exemple*GMENU> MODIFY MENU/ID=4/TEXT="autre texte"Change le texte du menu d'id 4..m.modify profil*Permet de modifier un profil dans la base.2format modify profil nom-de-profil [nouveau-nom] descriptionDPermet de modifier le commentaire d'un profil ou de changer son nom.CSi vous spécifier le deuxième paramètre, le profil changera de nom.bLes liens entre les utilisateurs de la base et les menus qui possèdent ce profil seront conservés. Paramètres nom-de-profil&Nom d'un profil existant dans la base. nouveau_nomJNouveau nom du profil. ce nom ne doit pas être celui d'un profil existant. Qualifiers/TEXT = commentaireËPermet de spécifier un nouveau commentaire au profil. Si votre commentaire contient des blancs ou des caractères spéciaux ou si vous souhaitez conserver des minuscules, mettez le entre double-quotes (").Exemple!GMENU> MODIFY PROFIL DVLP DVLP1 - /TEXT="Profil de développeur"PChange le profil DVLP en profil DVLP1 et met à ce profil un nouveau commentaire..m.modify user*Permet de modifier un profil dans la base.format modify user username descriptionGPermet de changer avec le qualifier /PROFIL le profil d'un utilisateur. Paramètresusername(Nom d'utilisateur existant dans la base. Qualifiers/PROFIL = ([-],profil,...)iPermet d'ajouter des profils à l'utilisateur ou d'en enlever. Dans ce cas, la liste doit commencer par -.êTous les profils spécifiés doivent exister dans la base sinon l'utilisateur n'est pas modifié. Si vous spécifiez plusieurs profils mettez les entre parenthèses et séparez-les par des virgules sinon vous pouvez omettre les parenthèses.Exemple)GMENU> MODIFY USER ETUDES/PROFIL=(-,DVLP).Enlève le profil DVLP de l'utilisateur ETUDES. .m.remove+Permet de détruire un élément dans la base.$format remove user mot-clé élément descriptionŠPermet de détruire un élément dans la base en spécifiant soit son nom pour détruire un utilisateur ou un profil, soit son ID pour un menu.sSi vous détruisez un profil, tous les menus et utilisateurs qui possèdent ce profil seront modifiés en conséquence.J paramètresAction mot-clé élémentDétruire un menu MENU menu-ids'Détruire un profil PROFIL nom du profil 1Détruire un utilisateur USER nom de l'utilisateurdexemplesGMENU> REMOVE PROFIL DVLP.Profil détruit dans la base GMENU> REMOVE MENU"°Ç=w$ GMENU011.A{d ã2[AROBAS.LAURENT.TMP_KIT_1]DOC_MISE_EN_OEUVRE.TXT;1C*¬É" 10dMenu détruit dans la base .m.SET OUTPUTnformat SET OUTPUT filel descriptions‹Permet de rediriger les données affichées par les commandes SHOW (SHOW MENU, SHOW PROFIL, SHOW USER) dans le fichier spécifié en paramètre.o ParamètreYFile5Nom de fichier ou de device (par exemple SYS$OUTPUT:) .m.show filess*Permet de visualiser les fichiers utilisésformat show files descriptionuˆCette commande affiche dans SYS$OUTPUT (et non dans l'output défini par SET OUTPUT) les fichiers utilisés par le gestionnaire de menus~:·~Le fichier de menusf·~L'output courant.f .m.show menu8Permet de visualiser sélectivement des menus de la base.format show menua description«Cette commande permet de visualiser dans l'output courant définit par SET OUTPUT (par défaut, SYS$OUTPUT:) des menus en les sélectionnant par leur ID ou leur texte, etc... Si la sélection se fait uniquement sur le père ou s'il n'y a pas de sélection, les fils d'un menu apparaissent juste en dessous ce menu et sont indentés par rapport à lui. Dans le cas contraire (autres sélections), il n'y a pas d'indentation et l'ID du père est indiqué pour chaque menu.d Qualifiers/DEPTH = nombreîˆPermet de spécifier la profondeur à laquelle SHO,(W MENU va visualiser l'arborescence. Le nombre spécifié doit être compris entre 1 et 20.`Ce qualifier n'a d'effet que s'il n'y a pas de sélection ou seulement une sélection par /PARENT.Le défaut est /DEPTH = 20./FILE = fichierpDPermet de visualiser les menus qui% appellent la procédure spécifiée.$Les wildcards * et % sont autorisés.&ATTENTION : La recherche est textuellejPar exemple /FILE = TOTO.* ne sélectionnera pas le menu ayant comme fichier TOTO (Le point ne matche pas)./IDENTIFICATION = id+Permet de visualiser le menu d'id spécifié.m /PARENT = id_Permet de visualiser tous les menus ayant pour ascendant le menu d'id spécifié, celui-ci exclusu/PROFIL=profilEPermet de visualiser tous les menus qui possèdent le profil spécifié.u/TEXT = sous-chaînedVPermet de sélectionner tous les menus dont le texte contient la sous-chaîne spécifiée.Exemples!GMENU> SHOW MENU/PARENT=2/DEPTH=2t7Visualise les fils et les petits fils du menu d'id : 2.aGMENU> SHOW MENU/TEXT=editioneFVisualise tous les menus dont le libellé contient la chaîne "edition"..m.show profil+Permet de visualiser des profils de la baselformat show profil [chaîne]u description }Visualise dans l'output courant (voir SET_OUTPUT) tous les profils dont le nom commence par 'chaîne' avec leurs commentaires.o;Si ce paramètre est omis, tous les profils sont visualisés.a Paramètreschaîne$Chaîne de caractères alphanumériques .m.show user>Permet de visualiser sélectivement des utilisateurs de la baseformat show user [chaîne]t descriptioni‚Visualise dans l'output courant (voir SET_OUTPUT) tous les utilisateurs dont le nom commence par 'chaîne' avec leurs commentaires.@Si ce paramètre est omis, tous les utilisateurs sont visualisés.[Le qualifier /PROFIL permet d'opérer une sélection sur un profil possédé par l'utilisateur.s Paramètreschaîne$Chaîne de caractères alphanumériques Qualifiers/PROFIL=profilLPermet de visualiser tous les utilisateurs qui possèdent le profil spécifié.ExempleoGMENU> SHOW USER T/PROFIL=DVLP[Visualise tous les utilisateurs qui possèdent le profil DVLP et dont le nom commence par T.c+*[AROBAS.LAURENT.TMP_KIT_1]DOC_TOUCHES.TXT;1+,+¨. / 4¾ À- ã0 123KÿPWO 56 sª¤¨¥”7@¶ì)#”89GHˆºJÿgestionnaire de menus~:Touches d'accès rapidePrésentation :¾Le système de menus vous permet de définir et d'utiliser des touches d'accès rapide à des options des menus. Vous définissez vous-même, pour une procédure que vous utilisez fréquemment une touche qu'il vous suffira de taper pour appeler cette procédure, quel que soit l'endroit où vous vous trouvez. Vous pouvez également effacer des définitions de touches et appeler un écran d'aide qui vous donne toutes les touches que vous avez déjà définies.·~EXEMPLE~: Vous vous servez fréquemment d'un programme de consultation des positions titres. Vous pouvez définir une touche (par exemple, la touche F20). Cette touche F20 déclenchera le programme de consultation, quel que soit l'endroit où vous vous trouvez dans le menu. Description :IL'accès aux fonctions de touches se fait toujours par la touche executer.DEFINITION DE TOUCHE~:JPlacez vous sur l'option du menu que vous voulez définir avec une touche. ïATTENTION : Seules les options terminales sont autorisées aujourd'hui, c'est-à-dire les options qui n'ouvrent pas un sous-menu mais lancent un programme, c'est-à-dire encore les options qui ne comportent pas le symbole '<' en fin de ligne.NTapez alors executer , puis return, puis la touche que vous souhaitez définir.eDes messages d'erreur s'affichent si~: l'option n'est pas terminale ou si la touche est déjà définie.JRéférez-vous au cadre ci-dessous pour les touches que vous pouvez définir.DECLENCHER UNE TOUCHE~:ƒPour utiliser la touche que vous avez définie et déclencher le programme auquel elle correspond, tapez executer, puis votre touche.BUn message d'erreur s'affiche si cette touche n'était pas définie.EFFACER UNE TOUCHE~:.Pour effacer une définition de touche, tapez~:3executer, puis eff. texte~puis la touche à effacer.OBTENIR DE L'AIDE~:En tapant executer~puis aide, vous obtenez un écran qui vous rappelle l'ensemble des touches que vous avez définies avec les libellés des options correspondantes et (à l'attention de l'informatique) les noms des fichiers de commande déclenchés par ces options.ØLe nom des touches tel qu'il apparaît dans cet écran d'aide est, dans certains cas, différent de celui que vous trouvez sur le clavier. Vous trouverez ci-dessous une table de correspondance pour ces cas particuliers.%Les touches que vous pouvez définir~:ˆVous pouvez vous servir de toutes les touches, à l'exception de~: F1, F2,..., F6, la touche CTRL seule et la touche 'caractère composé'.aDe plus, n'utilisez pas non plus les touches RETURN, EXECUTER, AIDE et EFF. TEXTE ainsi que CTRL-W. Ces touches peuvent être définies mais elles n'auraient aucune action. Les lettres peuvent indifféremment être tapées en minuscules ou majuscules. Enfin les touches du clavier numérique sont équivalentes aux touches correspondantes du clavier principal.TExemple de touches utilisables~: A (équivalent à 'a'), B,..., F20, 1, CTRL-P, etc...(Le nom des touches dans l'écran d'aide~:–Les flèches sont nommées en anglais : DOWN, UP, RIGHT, LEFT; Les six touches au dessus des flèches (RECH,...) sont appelées dans l'ordre E1, E2,...,E6XLa touche RETURN s'appelle CTRLM (elle est équivalente à CTRL-M) et TAB s'appelle CTRLI./*[AROBAS.LAURENT.TMP_KIT_1]DOC_UTILISATEUR.TXT;1+,. / 4Õ È- ã0 123KÿPWO 56 ,ÃȨ¥”7àqú)#”89GHˆºJÿ2Laurent Quivogne - @robas - Mercredi 19 Juin 1991GESTIONNAIRE DE MENUSPrésentation :„Ce gestionnaire de menus est basé sur un système de fenêtres vous permettant de passer facilement d'un menu à un autre. Vous pouvez de plus organiser vos fenêtres à l'écran. D'une session sur l'autre la disposition des fenêtres est conservée, ce qui vous permet d'avoir toujours sous les yeux les menus que vous utilisez fréquemment, sans avoir à aller les rechercher dans l'arborescence. Description :eChaque fenêtre présente sur l'écran porte plusieurs informations sur le bord supérieur de son cadre. 1.4. Menu de consultation (5)1 2 3 ±1 - Indice du menu (sauf sur le menu principal). Ici, (1.4.) ce menu a été obtenu en sélectionnant le premier choix du menu principal et le quatrième choix du menu ainsi obtenu.b2 - Nom du menu. Il s'agit du libellé de l'option que vous avez sélectionnée pour obtenir ce menu.]3 - Numéro de la fenêtre. Ce chiffre vous servira pour vous déplacer d'une fenêtre àñâ¹X$ GMENU011.A ã/[AROBAS.LAURENT.TMP_KIT_1]DOC_UTILISATEUR.TXT;1Õ ™ˆ  l'autre.Ces informations sont en surbrillance pour l'une des fenêtres~: Il s'agit de la fenêtre active sur laquelle vous pouvez sélectionner une option.›Le signe < qui apparaît à la fin du libellé de certaines options indiquent que celles-ci, lorsqu'elles sont sélectionnées, font apparaître un nouveau menu.Action des touches :€Les touches que vous aurez à manipuler pour profiter de toutes les possibilités de ce gestionnaire de menus sont les suivantes :·~F84Cette touche vous permet d'abandonner votre session. ·~FLECHES…Les flèches vous permettent de vous déplacer dans une fenêtre afin de sélectionner l'option que vous souhaitez par RETURN ou VALIDER.·Toutes les options ne sont pas forcément visibles dans une fenêtre. Au delà de 15 options, elles n'apparaissent que lorsque vous essayez de vous déplacer au delà du bas de la fenêtre.qPF1 plus FLECHE vous permet de vous déplacer directement à l'autre bout de la fenêtre. (Voir aussi touche SELECT)·~RETURN et VALIDERtCes deux touches ont une action identique et vous permet de sélectionner l'option sur laquelle vous êtes positionné. ·~EFFACERlCette touche efface la fenêtre active et se déplace sur le menu principal. Celui-ci ne peut pas être effacé.·~1 à 8¾Taper un chiffre vous permet de rendre active la fenêtre qui porte ce numéro (5 dans l'exemple ci-dessus). Notez que vous ne pouvez ouvrir que 8 fenêtres maximum, y compris le menu principal·~SELECTGCette touche permet de passer en mode déplacement ainsi que vous l'indique le message en bas de l'écran. Vous pouvez alors, à l'aide des flèches déplacer la fenêtre où bon vous semble. Tapez à nouveau SELECT pour revenir en mode normal. En mode déplacement, toutes les autres touches, à l'exclusion de CTRL W, sont sans effets.*·~CTRL W (CTRL et W pressés simultanément)'Ceci vous permet de rafraîchir l'écran.·~AIDE+Permet d'afficher un écran d'aide à l'écran· A à T^Permet, dans un menu de se déplacer directement sur l'option qui commence par la lettre tapée.ÕQuelques conseils pour démarrer~: La première fois que vous accédez au menu, vous ne voyez apparaître que le menu principal. Ouvrez alors tous les menus dont vous vous servez fréquemment grâce aux flèches et RETURN, puis positionnez-les avec la touche SELECT et les flèches. Ces menus constitueront votre tableau de bord sur lequel vous pourrez aisément travailler. Notez qu'il réapparaîtra tel quel à chaque session, les mêmes menus ayant les mêmes numéros de fenêtre.)*[AROBAS.LAURENT.TMP_KIT_1]GMENU$IVP.COM;2+,%./ 4>X- ã0 123KÿPWO56@ómªm¶”7*#”89GHˆºJÿ$ on error then goto error$ on control_Y then goto error $ err = 1#$ gmenu := $gmenu$system:gmenu_util>$ define/nolog/process menu$fich sys$scratch:menu$fich_ivp.dat$ gmenuOadd profil pf/text="profil IVP"add user us/profil=pf"add menu/profil=pf/text="Menu IVP" show profil show menu show userexit $ goto fin$ error:$ err = $status$ if err then err = 0$ fin:$ on error then continue$ on control_Y then continue>$ if f$sjt~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$dìœ:>earch("sys$scratch:menu$fich_ivp.dat") .nes. "" then -- delete/nolog sys$scratch:menu$fich_ivp.dat;$ deassign menu$fich $ exit err)*[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1+,î*.€/ 4€- ã0 123 KÿPWO56€‚Šö ¥”7À: *#”89GHˆºJÿ%ì VAX-11 Librarian V04-00ÀÄ™ö ¥”àa‡*”!ßP€Œ/2&..Ü  ‰ÖGMENU3GMENU$ADD_MENUAòGMENU$ADD_PROFILGÔGMENU$ADD_USERM\ GMENU$EXITé GMENU$GAGN¢GMENU$GENERATEeè GMENU$HELPhtGMENU$MODIFY_MENUyÎGMENU$MODIFY_PROFIL€äGMENU$MODIFY_USER‡" GMENU$REMOVE•lGMENU$SET_OUTPUT›>GMENU$SHOW_FILESfGMENU$SHOW_MENU°òGMENU$SHOW_PROFIL·GMENU$SHOW_USER¿  GMENU_UTIL˼GMENU_UTIL_CLI‰ÖGMENU3GMENU$ADD_MENUAòGMENU$ADD_PROFILGÔGMENU$ADD_USERM\ GMENU$EXITé GMENU$GAGN¢GMENU$GENERATEeè GMENU$HELPhtGMENU$MODIFY_MENUyÎGMENU$MODIFY_PROFIL€äGMENU$MODIFY_USER‡" GMENU$REMOVE•lGMENU$SET_OUTPUT›>GMENU$SHOW_FILESfGMENU$SHOW_MENU°òGMENU$SHOW_PROFIL·GMENU$SHOW_USER¿  GMENU_UTIL˼GMENU_UTIL_CLI  Uò¿Ï$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€5Œ" à0[¡~ü·$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€‘f" !"#$%&'()*+,àÐ¥»$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ ÿ",-./012s41­ s¤ö ¥”08GMENU$ADD_MENU019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57?/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$ADD_MENUê¼GMENU$ADD_MENUØP ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÕÛ5d |€ d À Q,þÿÿüPø  ' #'Q 'Q P' ÿ'Qä000000000000000000000000  'üLIB$M_CLI_CTRLYP÷MENU$FICHQüd |Š dÿ® 6 TEXTÔü#üØàÑVous devez donner un libellé non nul avec /TEXTQü/ôø$óMenu non crééQü 8øHúPARENTQü\üdü ÄüdtüttÐö0123456789Qü ˜üè¤áValeur illégale pour /PARENT : Qü¸øØtèMenu père inconnu : ðü ¸ø æPère terminal - fichier : Qÿÿý7$üP@ø@HúPROFILQü`ü ühpïProfil inconnu : Qü„ø˜pÍUn menu de même père et de même libellé existe déjàQü3°øäøFILEøüüüPXüü öPARAMETERSQü  ü,ü8ü,<üÔüÿ ïMenu créé - ID : Qü`ü ¬øt|úSYMBOLQü”üœüÿ¨üœ¬ü ¬ü¬ÀóCLI$GET_VALUEQ8þ þÔøäõCLI$PRESENTQü øøöLIB$SIGNALQü ø$ôSTR$TRIM8ø@çSTR$FIND_FIRST_NOT_IN_SETQüTøpü $ø $ì $òMTþöH$JIOR¼øÄø) $ì $ì $àLIB$DISABLE_CTRL ø0ø) $ì $ì$ $èLIB$STOP9Œø”ø $ì $ì $åLIB$ENABLE_CTRLQüðøòLIB$SET_SYMBOLQüø$àPôÄü¨ðXôX÷-ýXôXôP üGMENU$ADD_MENU÷ü ÈïDý|~ž COB$HANDLERúmÂ^žï€ý[žï€÷Z,n #«”ž CLI$GET_VALUEùP úÊl COB$ERRORýúªh CLI$GET_VALUEëÐP«€é«€ -#«” núʬ COB$DISPL:AYüúÊÐ COB$DISPLAYü1ž CLI$PRESENTùP úÊŒ COB$ERRORüúÊì CLI$PRESENTùÐP«€è«€”ø1 ,n åüËDž CLI$GET_VALUEùP úÊl COB$ERRORüúÊü CLI$GET_VALUEñÐP«€è«€$Ы€Ëdž LIB$SIGNALùP úʬ COB$ERRORüúË` LIB$SIGNALü1žSTR$TRIMùP úÊÈ COB$ERRORüúÊSTR$TRIMÒÐËPQžËDPÁQPRÑPR‘` 0`ÖPïÖPëÐËPP°PËhžSTR$FIND_FIRST_NOT_IN_SETùP úÊø COB$ERRORüúÊ,STR$FIND_FIRST_NOT_IN_SETöÐP«€úÊ` COB$DISPLAYüúÊÐ COB$DISPLAYä1,n0 Ë8ÐËPPÐPVžËDWžnX COB$CVTTI_R8;óÔVžnWÐ Xž® Y COB$CVTIP_R9ü$ ® LIB$AB_CVTPT_Ué Ë8( Ë,Ë8- Ë80nµû1( íýË8 ÿž  Tü°  Xþ BüúÊSYS$GETÿ} ,üËXž ,ùËXúÊ COB$IOEXCEPTIONÿ} ,ùËXéPG± Fú´ž ,ùËXúÊ$COB$IOEXÀÉE7~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$dq||CEPTIONÿ} ,øËXéPŠ !úúÊ” COB$DISPLAYüúÊÐ COB$DISPLAYù1-P@÷ núÊÐï COB$DISPLAYüúÊÐ COB$DISPLAYø1ÔË(ž CLI$GET_VALUEùP úÊl COB$ERRORüúÊø CLI$GET_VALUEùÐP«€è«€žì1›Ð«„Ñ«„ Å«„Pž@ðèn) ¾«ˆÖ«„àÑ«„ úÊ  COB$DISPLAYü<úÊÐ COB$DISPLAYö1Å«„Pž@üønž¾ËxžMTH$JIORùP úÊL COB$ERRORüúËpMTH$JIORóÐPË(,n «ˆž CLI$GET_VALUEùP úÊl COB$ERRORüúÊø CLI$GET_VALUEðÐP«€1^ÿЫ€( Ë8þ1ÿž Tþ°  Xþ BüúÊSYS$FINDÿ” Bÿ} ,ùËXèPž ,ùËXúÊXCOB$IOEXCEPTIONÿ} ,ùËXŠ !ü2þè«ìÿ€¶ü1‘þ1Âû1) üË8Ñü1‰” BüúÊSYS$GETÿ} ,üËXž ,ùËXúÊpCOB$IOEXCEPTIONÿ} ,ùËXéP9± Fú´ž ,ùËXúʈCOB$IOEXCEPTIONÿ} ,øËXéP=Š !ü2ü)#«”ý ‘ï1Ô«€1Uÿè«€úÊlð COB$DISPLAYüúÊÐ COB$DISPLAYó1,n P«Øž CLI$PRESENTùP úÊŒ COB$ERRORüúÊ„ CLI$PRESENT÷ÐP«€é«€ž CLI$GET_VALUEùP úÊl COB$ERRORüúÊ” CLI$GET_VALUEø,n «¸ž CLI$PRESENTùP úÊŒ COB$ERRORüúÊ´ CLI$PRESENT÷ÐP«€é«€žö CLI$GET_VALUEùP úÊl COB$ERRORüúÊÄ CLI$GET_VALUEÿžLIB$DISABLE_CTRLùP úʸ COB$ERRORüúÊÐLIB$DISABLE_CTRLúЫ€5û,n0 ÿž Tþ°  Xþ BúÈ  (üúÊSYS$FINDúÊ  (àôº½$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€="=>ÿ” Bÿ} ,ùËXèPž ,ùËXúÊÄâCOB$IOEXCEPTIONÿ} ,ùËX Š !öÔ«€é«€w” BüúÊSYS$GETÿ} ,üËXž ,ùËXúÊÜCOB$IOEXCEPTIONÿ} ,ùËXéP5± Fú´ž ,ùËXúʈCOB$IOEXCEPTIONÿ} ,øËXéP Š !úÔ«€‘ô5Ô«€é«€l BüúÊä SYS$DELETEÿ} ,ùËXèPž ,ùËXúÊôCOB$IOEXCEPTIONÿ} ,ñËX$"ÐËXË€žLIB$STOPùP úÊ COB$ERRORüúË|LIB$STOPþ(  û1/0û,n0 ÿž Tþ°  Xþ BüúÊSYS$GETÿ} ,üËXž ,ùËXúÊ(áCOB$IOE?XCEPTIONÿ} ,ùËXéPT± Fú´ž ,ùËXúÊ$COB$IOEXCEPTIONÿ} ,øËXéP+Š !ö"ÐËXËžLIB$STOPùP úÊ COB$ERRORüúËŒLIB$STOPÿÖ<ý›´ Fþ BüúÊ SYS$UPDATEÿ} ,ùËXèPž ,ùËXúÊ@ðCOB$IOEXCEPTIONÿ} ,ñËX$"ÐËXË žLIB$STOPùP úÊ COB$ERRORüúËœLIB$STOPÿù<û n$ cLIB$AB_CVTPT_Uÿ  þ1û( Ë8ü(#«”ú(P«Ø@ü(«¸üÐË(<ý›´ Fþ BüúÊSYS$PUTÿ} ,ùËXèPž ,ùËXúÊXöCOB$IOEXCEPTIONÿ} ,ñËX$"ÐËXË°žLI@B$STOPùP úÊ COB$ERRORüúˬLIB$STOPþ(  ùË,úÊ COB$DISPLAYÿžLIB$ENABLE_CTRLùPúʈ COB$ERRORüúÊÐLIB$ENABLE_CTRLÿž CLI$PRESENTùP úÊŒ COB$ERRORüúÊ$ CLI$PRESENT÷ÐP«€é«€_žþ CLI$GET_VALUEùP úÊl COB$ERRORüúÊ4 CLI$GET_VALUEÿžLIB$SET_SYMBOLùP úʬ COB$ERRORüúÊHLIB$SET_SYMBOLñÐP«€è«€!Ы€ËÀž LIB$SIGNALùP úʬ COB$ERRORüú˼ LIB$SIGNALóÐPèËÄÐP ”P˜P<QH¨Q9QPŸQ‹Q\Q0Q„Q6AlPþšQsþ%Q|þ§QRþ¿Qšþ·Q!þ”Qgþ+Q×þ¤Q þ˜Q›ÿQþ•Qÿ íý¾€GMENU$ADD_MENU˹EÙùâó÷÷ýáùøáüßýåÝ×þ÷÷ýøÉøóöƒ÷÷ýò÷÷ýüáùüåûú÷÷ýÍùÞüöù¦ùÞ˜ùìúü÷÷žý÷áüåùáüååüùöýü˜ý÷ýüÅÞñï…Þú½Þêùö÷õ÷÷½Þö÷åáüåáüß ¿ 4PñGMENU$ADD_MENUPüüHüüé $CODE‰H$LOCAL©8$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰B$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICHLIB$M_CLI_CTRLY COB$AB_NAM COB$HANDLER CLI$GET_VALUEü COB$ERROR COB$DISPLAY CLI$PRESENT LIB$SIGNALSTR$TRIMSTR$FIND_FIRST_NOT_IN_SET COB$CVTTI_R8 COB$CVTIP_R9LIB$AB_CVTPT_USYS$GETCOB$IOEXCEPTIONMTH$JIORSYS$FINDLIB$DISABLE_CTRL SYS$DELETEPLIB$STOP SYS$UPDATESYS$PUTLIB$ENABLE_CTRLLIB$SET_SYMBOLþ½ww1­@¬öC ¥”0:GMENU$ADD_PROFIL019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57A/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$ADD_PROFILè¼GMENU$ADD_PROFILP ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔÜDd |€ d À Q,þÿÿüPþô  'P÷MENU$FICHQüd |€ d ¾ P2QüÿÔü  üEØàüäLe profil existe déjà : üøàñprofil non crééQü,ø<ÖNombre limite de profils déjà atteint (32)Qü*Pø|üøTEXTœü ü#þü °üÿ ãProfil ajouté dans la base : QüÌøìàóCLI$GET_VALUEQü øôMTH$JNOT(ø0÷MTH$JIEORQü DøP÷MTH$JIANDQü døpõCLI$PRESENTQü „Føü $ø $èLIB$STOPÄøÌ PüðÄüP üGMENU$ADD_PROFIL÷ü Èï<ý|~ž COB$HANDLERúmÂ^žï€ý[žï€þZž€þYž COB$ERRORþXž €þWž COB$DISPLAY÷V,n «Œž CLI$GET_VALUEõPúÊœhúªh CLI$GET_VALUEü|«€žMTH$JNOTõPúʸhúªtMTH$JNOTèÐP«€Ð«ˆÑ«ˆ mžnTÅ«ˆPž@ð⮞¾d) ´«Œ úÊœfúÊÄf1f- ´ôì nЫˆ«„.Å«ˆPž@üønž¾Ë¨ž MTH$JIEORôPúÊØhúË  MTH$JIEORÒÐP«€Ö«ˆÕ«G„ úÊfúÊÄf1Ы„«ˆÃ«€«„Ϋ„«„ž MTH$JIANDôPúÊøhúÊ MTH$JIANDÓÐP«€0©€,n0©,n #©™Ô©¼,n n©À3©€Å«ˆPž@ðìn( «Œ¾( «Œ©Å«ˆPž@üônЫ€¾Ð«€©¼ž CLI$PRESENTôPúÊhúÊ( CLI$PRESENT÷ÐP«€é«€ž CLI$GET_VALUEôPúÊœhúÊ8 CLI$GET_VALUEñ›´ÇÆÇÂúÊ$SYS$PUTë}Ǭ˘èPžÇ¬Ë˜úÊ,COB$IOEXCEPTIONí}Ǭ˘ Ð˘˰žLIB$STOPôPúÊThúˬLIB$STOPîúÊtfÐPè˼ÐP ”P¸Pôcý¾§GMENU$ADD_PROFIL@¹:½ùêýæüúãûûôùÒûûûûýûóåâüçéåüéÇHâû ¿$6PïGMENU$ADD_PROFILPüü@üöé$$CODE‰@$LOCAL©à$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICH COB$AB_NAM COB$HANDLER CLI$GET_VALUE COB$ERRORwMTH$JNOT COB$DISPLAY MTH$JIEOR MTH$JIAND CLI$PRESENTSYS$PUTCOB$IOEXCEPTIONLIB$STOPþ½ww1­À.²ö ¥”0I8GMENU$ADD_USER019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57?/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$ADD_USERê¼GMENU$ADD_USER P ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔÜd |€J d À Q,þÿÿüPÿ  'ø  'P÷MENU$FICHQüd |€ d ¾ P2QüÔü üØàæCe username existe déjà :K QüôøàèUtilisateur non créé(ø<úPROFILQüPü üX`ÕVous devez spécifier un profil avec /PROFILQü+tø ÿPðrofil inconnu : Qü´øÈ`üÿ íUtilisateur créé : QüèøüàóCLI$GET_VALUEQü ø$ü $ø $ì $èMTH$JIORpøxýeû $èLIB$STOP¤øL¬(Pü<ðàüP üGMENU$ADD_USER÷ü ÈïDý|~ž COB$HANDLERúmÂ^žï€ý[žï€þZž €þYž COB$DISPLAYþXž CLI$GET_VALUEþWž€äV2¦€,n «€,n «”žgP úʬ COB$ERRORâúªhg( «€¦ž¦€ÉÔ° ÉØÉÂúʸSYS$GETî}ɬˠžÉ¬Ë úÊÀCOB$IOEXCEPTIONã}ɬˠéP,±ÉÆ´žÉ¬Ë úÊØäÿCOB$IOEXCEPTIONÔ}ɬˠéP ŠÉ¡ úʘhúÊÄh1Ô¦¼žgP úʬ COB$ERRORãúÊègÐP«Œè«Œ úÊ(húÊÄh1è«Œì1ŠÐ«Ñ« Å«Pž@ðØn) ¾«”Ö«àÑ«  úMÊPhúÊÄh1Å«Pž@üønž¾Ë°žMTH$JIORùP úÊ COB$ERRORüú˨þMTH$JIORìÐP¦¼,n «”žgP úʬ COB$ERRORåúÊègÐP«Œ1oÿ›´ÉÆÉÂúʸSYS$PUTë}ɬˠèPžÉ¬Ë úÊ COB$IOEXCEPTIONí}ɬˠ$"Ðˠ˸žLIB$STOPùP úÊ4 COB$ERRORüúË´LIB$STOPîúÊ„hÐPèËÄÐP ”PLPÑQHÕÞPþQ)þñ Q<þ³`ý¾ªGMENU$ADD_USER?¹:½üòîúœþûûýýéüûûýùüåûúûûýÎùæÇÞû ¿ 4PñGMENU$ADD_USERPüüHüöé $CODE N‰H$LOCAL©À$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICH COB$AB_NAM COB$HANDLER CLI$GET_VALUE COB$ERRORWSYS$GETCOB$IOEXCEPTION COB$DISPLAYMTH$JIORSYS$PUTLIB$STOPþ½ww1­Àc¾ö ¥”04 GMENU$EXIT019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57;/OBJECT=GMENU$ROOT:[SOURCE] GMENà ñp> $ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ æ"N OU$ROOT:[SOURCE]GMENU$EXITî¼ GMENU$EXITPøP GMENU$EXIT-û|~ž COB$HANDLERýmúïSYS$EXITüÐP#ý¾ç GMENU$EXIT¹õ¿0Põ GMENU$EXITPüüüé$CODE‰$LOCAL©$PDATA©COB$NAMES_____2© COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1 COB$HANDLERSYS$EXITþ½ww1­`Ìö ¥”08GMENU$GENERATE019-Jun-1991 09:311P9-Jun-1991 09:31VAX COBOL V4.3-57?/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$GENERATEê¼GMENU$GENERATEPP ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÕýÛd |€ Qd À Q,þÿÿü\PÜDÿÿð ÔPðÜÿ ÿ`ÿXüÿX COB$AB_NAMÂòQÿÿÿüQ¤ûÿÿ ÿ'Qý000QúQò Q #'QúQðRP÷MENU$FICHQüd |— dœ GENERATE_FILEQÜDÿÿð ÔPðÔëÿ ÿõ`ÿXüÿX COB$AB_NAMªSSELECT.ALLQü ØüäóSELECT.PROFILQü ôüõSELECT.USERQü ü õSELECT.MENUQü 0ü<úOUTPUTQüLüÿüT\å$!#* GMENU ADD MENU/PROFIL=Qüpüÿü#üœœ@ÿ"Qü´üœ¸üœ¸ õCLI$PRESENTQü ÜøèóCLI$GET_VALUEQý ÿüø ø\ð ø\ìT \ð\ø\Ñ$ GMENU := $GMENU$SYSTEM:GMENU_UTILQø\Û$! Définition des profilsQü $ÿù) $ì $ì $â$GMENU ADD PROFIL Qú/TEXT=Qø $Ö$! Définition des utilisateursQø) $ì $Ù$GMENU ADD USER /PROFIL=MTHþú$JIANDQü Ôøàø $Ý$! Définition Udes menusQø) $ì $ì) $ì) $ì $íSYS$FAOQüœøô¤ÿ1Q÷/PARENT=0Qõ/PARENT='IDQö/SYMBOL=IDQú/FILE=Qú/PARA=QôSTR$TRIMðøøðSTR$POSITION  øø\ôPPü<øŒD”ø<øP üGMENU$GENERATEæ÷ü Èï|ý|~ž COB$HANDLERúm ^žï€ë[|ËÈVÐËÈÐËÐÐËÌž CLI$PRESENTûP úïð COB$ERRORþúïì CLI$PRESENTõÐPË„èË„lž CLI$PRESENTûP úïð COB$ERRORþúï  CLI$PRESENTúÐPËÈž CLI$PRESENTûP úïð COB$ERRORþúï( CLI$PRESENTúÐPËО CLI$PRESENTûP úïð COB$ERRORþúïD CLI$PRESENTðÐPËÌ,n ÿË€ž CLI$GET_VALUEûP úï COB$ERRORþúïd CLI$GET_VALUEøµË"úï COB$IOEXCEPTIONî1œŠËØËÚ(ôïäîËÜÐËàË6šýù„Ë$úï8 SYS$CREATEûèP úï@COB$IOEXCEPTIONçWÓ Ë`7ÓWË` ±Ë\ïdù!ÁïdóPŠP±Ë\P úïXCOB$IOEXCEPTIONüúïp SYS$CONNECTûèP úïxCOB$IOEXCEPTIONý,#ïê ÿ«€ð035Ë€&Ë€LIB$AB_CVTTP_Uón6cP÷PËþúïåpSYS$PUTûèP úï´COB$IOEXCEPTIONüèËÈïú1,ïÌê ÿ«€ð025Ë€&Ë€LIB$AB_CVTTP_Uón6cP÷PËþúïpSYS$PUTûèP úï´COB$IOEXCEPTIONþ3û,n ÿž Tþ°  Xþ BúÈ  (þúïèëSYS$FINDúÊ  (ÿ” BûèP úïðCOB$IOEXCEPTIONüŠ !õ1ÐË„” BXþúïèSYS$GETþúïCOB$IOEXCEPTIONüéP%± Fù´úï COB$IOEXCEPTIONûéP Š !÷1èË„óü1‘þ3ÿí1ð001Ë€&Ë€LIB$AB_CVTTP_Uðn6cP×PÑPÿ(â1ž@«€VÃPÿWÐXÑXWÐWX(Xï8ófÐSVùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UêË€ÂWÐ XÑXWÐWX(XöfùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UúË€(#úËœ(ïLôË”ž¯ËÌ1ýû&Ë€LIB$AB_CVTTP_Uõn"c$cLIB$AB_CVTPT_UùË€&cLIB$AB_CVTTP_Uóa6cP÷PËþúïpYSYS$PUTûèPúï´COB$IOEXCEPTIONÿ” BþúïèSYS$GETþúïTCOB$IOEXCEPTIONüéP± Fù´úï COB$IOEXCEPTIONûéPŠ !óÔË„1•þèËÐ^ú1,ïlê ÿ«€ð030Ë€&Ë€LIB$AB_CVTTP_Uón6cP÷PËþúïpSYS$PUTûèPúï´COB$IOEXCEPTIONþ2û,n ÿž Tþ°  Xþ BúÈ  (þúïèSYS$FINDúÊ  (ÿ” BûèPúïŒCOB$IOEXCEPTIONüŠ !ú1ÐùûË„” BþúïèSYS$GETþúï¤COB$IOEXCEPTIONüéP± Fù´úï COB$IOEZXCEPTIONûéPŠ !÷1èË„bü1‘þ2ní1ð001Ë€&Ë€LIB$AB_CVTTP_Uðn6cP×PÑPÿ—â1ž@«€VÃPÿWÐXÑXWÐWX(Xï¼ófÐSVùX n&Ë€æLIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UêË€ÂWrÐ XÑXWÐWX(XófÐSVùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UéË€ W5ÐXÑXWÐWX(XïÌöfùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_U÷Ë€&Ë€LIB$AB_CVTTP_Uên6cP÷PËÄÐËŒÑËŒ wõ1ÅËŒPž@üønž¾ËØž MTH$JIANDûP úïè COB$ERRORüúËÐ[ MTH$JIANDúÐP˲ø1&Ë€LIB$AB_CVTTP_U½n6cPÐPV×PÑPÿuž@«€WÃPÿXÐYÑYXÐXY(Y,gÐSWÀYV×X=ÅËŒPž@ðên: ¾ÃP YÐYZÑZXÐXZ(ëñZ¾gÀZVùV®$cLIB$AB_CVTPT_UòË€ùV®$cLIB$AB_CVTPT_UðË€ÖËŒ1!ÿ&Ë€LIB$AB_CVTTP_UÚn2ËÄPùP®7nc)2ËÄPž@ËÿP(`&Ë€LIB$AB_CVTTP_Uên6cPž@ËÿP)`&Ë€LIB$AB_CVTTP_Uõn"œc$cLIB$AB_CVTPT_U÷Ë€&Ë€äLIB$AB_CVTTP_Uón6cP÷PËþúïpSYS$PUTûèP úï´COB$IOEXCEPTIONÿ” BþúïèSYS$GETþúïôCOB$IOEXC\EPTIONüéP&± Fù´úï COB$IOEXCEPTIONûéP Š !ìÔË„14ýèËÌ1,ï ê ÿ«€ð023Ë€&Ë€çLIB$AB_CVTTP_Uón6cP÷PËþúïpSYS$PUTûèP úï´COB$IOEXCEPTIONþ1ö°ˈ,n0 ê2ˈPÄ Pž@ËÌn,n0 ¾ž Tþ°  Xþ BþúïèSYS$FINDÿ” BûèP úï$COB$IOEXCEPTIONüŠ !ú1” BþúïèòSYS$GETþúï<COB$IOEXCEPTIONüéP%± Fù´úï COB$IOEXCEPTIONûéP Š !ú1‘þ15 í12ˈPÄ Pž@ËÌn) ý¾Q â1ž¯ËÈ1±Ëˆ„¶]ˈÀËÔ(  ì2ˈPÄ Pž@ËÌnž¾P(  ý¾ž Tþ°  Xþ BþúïèSYS$FINDÿ” BûèP úïTCOB$IOEXCEPTIONü Š !÷ 1 ÿ1ú±Ëˆê Ð1·Ëˆ®ËˆˈÂËÔÎËÔËÔ2ˈPÄ Pž@ËÌn( ¾ÿž Tþ°  Xþ BþúïèSYS$FINDÿ” BûèP úïlCOB$IOEXCEPTIONü Š !ö1~ÿ,n0  õ2ˈPÄ Pž@ËóûØn)  û¾l” BþúïèSYS$GETþúï„COB$IOEXCEPTIONüéP%± Fù´úï COB$IOEXCEPTIONûéP Š !ú1ÿ‘í12ˈPÄ Pž@ËÌn) ë¾1òþ1{ÿ1ñ^ýÐËÔËìžSYS$FAOûP úï¬ COB$ERRORüúËÜSYS$FAOí2ËÄPÖP÷PËÄùPn$nLIB$AB_CVTPT_UñË€ÐËŒÑËŒ C õ1ÅËŒPž@üønž¾Ëøž MTH$JIANDûP úïè COB$ERRORüúËð MTH$JIANDúÐPË~ ø1&Ë€LIB$AB_CVTTP_U½n6cPÐPV×PÑPÿuž@«€WÃPÿXÐYÑYXÐXY(Y,gÐSWÀYV×X=ÅËŒPž@ðãn: ¾ÃP YÐYZÑZXÐXZ(Z¾gÀZVçøùV®$cLIB$AB_CVTPT_UòË€ùV®$cLIB$AB_CVTPT_UðË€ÖËŒ1!ÿ&Ë€LIB$AB_CVTTP_UÚn2ËÄPùP®7ncW2ËÄPž@ËÿP(`&Ë€LIB$AB_CVTTP_Uìn6cPž@ËÿP)`&Ë_€LIB$AB_CVTTP_UÕn–Ë‚‘Ë‚:ÐQžË‚P–p‘`:0`õQó&Ë€íLIB$AB_CVTTP_Uõn"Œc$cLIB$AB_CVTPT_UúË€(#úËœ(ïLòË”ž¯ËÌ1- ö0n&Ë€LIB$AB_CVTTP_UÔn6cP×PÑPÿBž@«€QÃPÿPÐ VÑVPÐPV(Vï¼öaùV n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UôË€1&Ë€LIB$AB_CVTTP_Uðn6cP×PÑPÿQ â1ž@«€VÃPÿWÐ XÑXWÐWX(XïÈófÐSVùX n&Ë€LIB$AB_CVTTP_Uô® nc$®LIB$AB_CVTPT_UêË€ WoÐ XÑXWÐWX(XófÐSVùX n&Ë€LIB$AB_CVTTP_Uõ® à ðŽp)$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ "_` nc$cLIB$AB_CVTPT_UáË€ W2ÐXÑXWÐWX(X'fùX n&ýË€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UøË€-P@ü nø1&Ë€LIB$AB_CVTTP_Uðn6cP×PÑPÿ:â1ž@«€VÃPÿWÐ XÑXWÐWX(XïÔófÐSVùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UêË€ WÐ XÑXWÐWX(X öfùX n&Ë€ûLIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UôË€1&Ë€LIB$AB_CVTTP_Uðn6cP×PÑPÿÚâ1ž@«€VÃPÿWÐXÑXWÐWX(XïàófÐSVùX n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTaPT_UòË€ÂW: P@ëÃPPPÐPXÑXWÐWX(X@öfùX n&Ë€òLIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UòË€,n #Ëœ,ø #Ëœ(ïèðË”ž¯ËÌ&Ë€LIB$AB_CVTTP_Uõn"c$cLIB$AB_CVTPT_UùË€&cLIB$AB_CVTTP_Uóa6cP÷PËþúïpSYS$PUTûèPúï´COB$IOEXCEPTIONòÐËÈPÔËÈ`žâSTR$TRIMûPúï COB$ERRORþúï¤STR$TRIMòÕËÀ1&Ë€LIB$AB_CVTTP_UÈn6nP×PÑPÿž@«€QÃPÿPÐVÑVPÐPV(VË”aùV n&Ë€LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_UöË€ÐËŒbž STR$POSITIONûPúï ê COB$ERRORþúïÀ STR$POSITIONöÐPËÕËà1¡ËËĢˌËÄ®ËÄËÄ&Ë€LIB$AB_CVTTP_Uœn6cPÐPV×PÑPÿkž@«€WÃPÿXÐYÑYXÐXY(Y"gÐSWÀYV×X4ÐËŒP2ËÄYž@Ë›PÐYZÑZXÐXZ(Z`gÀZVùVn$cLIB$AB_CVTPT_UóË€ùVn$cLIB$AB_CVTPT_UóË€ÁËËŒž STR$POSITIONûP úï  COB$ERRORþúïÌ STR$POSITIONÛÐPË1'ÿ¡ËÀËĢˌËÄ®ËÄËÄ&Ë€LIB$AB_CVTTP_Uín6cPÐPV×PÑPÿ¦®1†ž@«€WÃPÿXÐYÑYXÐXY(Y"gÐSWÀYV×XOÐËŒP2ËÄYž@Ë›PÐYZÑZXcÐXZ(Z`gÐSWÀZVÂYXþä%ÐYÑYXÐXY(Y"gÀYVùVn$cLIB$AB_CVTPT_UóË€ùVn$cLIB$AB_CVTPT_UÝË€ÐËÌPÔËÌ`´ËÞŠËØ<Ë$úï8 SYS$CLOSEûèP úï,COB$IOEXCEPTIONí”ËÙÐPèËüÐP ”PÐPÔüPŸQèQHOQ4QWQLþQ,âQ& QÔ Q_ QÆ íPþgQ¦ÿ QÿQþ´QGþkQþcQ þWQ'þQÿQ4ÿ5QÿQCÿQþ$ Q>ÿ Q)ÿ&Q ÿQ ÿ QÿQ þÈQ:ÿ Q^ÿ Q ÿ QÿQþdQ#ÿ%Q ÿQ ÿ þQÿQþÌQþÄQ þ¸Q'þ¼QÞþÕQ9þ“QxÿQþ Qªÿ QÿQþT QBþ·Q þ¤QþˆQÿQþšQŽþOQWþÕQ9þ“QGþ!Q ÿ`Q^þØQþºQÉþ QþQÿQ4ÿ5QÿQ.þÕQþ‘QÿQ4ÿGWQÿQMÿQÿWQ>ÿ QÿQÿ QÿQþQÿ@QÿQ8ÿ Q"þÐýý¾€GMENU$GENERATEâ¹PÜñÜûÜÜÜöá°óõÒøóõÒùö§ýû¿ýìõöö÷âÔ¿ùøóõÒùö§ýû¿ýìõÚëûöÊû“ùãòåâÒ¿eùøŽóõÒôá½ý¿ýØ÷ùüûÙ½þýùöóòé½ýöç¿ýÞúýÜäûöÊû“ùãòçÐâöö÷ô Øï ¯øôöøâÇ.Ô$¹á÷¥ûÜ÷øð‰øÙøð´Ñ ¿uBPñGMENU$GENERATEQü\Püü€ôéu$CODE‰€$LOCAL©D$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICH COB$AB_NAM COB$HANDLER CLI$PRESENT COB$ERRORä CLI$GET_VALUE fCOB$IOEXCEPTIONSYS$OPEN SYS$CREATE SYS$CONNECTSYS$PUTLIB$AB_CVTTP_USYS$FINDSYS$GETLIB$AB_CVTPT_U MTH$JIANDSYS$FAOSTR$TRIM STR$POSITION SYS$CLOSEþ½ww1­ aÛö ¥”04 GMENU$HELP019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57;/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$HELPî¼ GMENU$HELPþP ÿ'QøLIB$PUT_OUTPUT LIB$GET_INPUTDVI$_DEgVBUFSIZô PþP1Qüüÿü õSYS$OUTPUT:Qü  üü,êGMENU$SYSTEM:GMENUHELPQüHóCLI$GET_VALUEQü hø»xöLIB$GETDVIQü Œø˜öLIB$SIGNALQü ¬ø¸ñLBR$OUTPUT_HELPQüÌøÜ Pð `ôP < GMENU$HELPúû<|~ž COB$HANDLERýmžï€ý[žï€þZž COB$ERRORþYž LIB$SIGNALõX,n ÿ«€ž CLI$GET_VALUE÷Phújiúª” CLI$GET_VALUEÿž LIB$GETDVIöPúª iúª´ LIB$GETDVIÈÐPË€èË€ÐˀˤžhPúª@iúË hÁ˘˜˔ÐˈˬÐËŒËÀžLBR$OUTPUT_HELPõPúªdiú˨7LBR$OUTPUT_HELPÝÐPË€èË€ÐË€ËÈžhPúª@iúËÄhÐP-ý¾Ý GMENU$HELP¹Ù÷ìææö׿É0Põ GMENU$HELPPüüLü÷éÉ$CODE‰L$LOCAL©ð$PDATA©COB$NAMES_____2© COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1LIB$PUT_OUTPUT LIB$GET_INPUTDVI$_DEVBUFSIZ COB$HANDL iER CLI$GET_VALUE COB$ERROR LIB$GETDVI$ LIB$SIGNALLBR$OUTPUT_HELPþ½ww1­@éö ¥”0;GMENU$MODIFY_MENU019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57B/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$MODIFY_MENUç¼GMENU$MODIFY_MENUàP ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´j`ÿ üÿ  COB$AB_NAMÕÛd |€ d À Q,þÿÿüPð  ' #'Q 'Q P'ä000000000000000000000000  'üLIB$M_CLI_CTRLYP÷MENU$FICHQüd |ˆk dª IDENTIFICATIONQüÔüäü ÌüäôüôôØö0123456789Qü üð$ÙValeur illégale pour /IDENTIFICATION : Qü'8ÿù`ôìMenu non modifiéxøˆñMenu inconnu : Qüœü ´ø¬´ÒVous devez spécifierl l'ID avec /IDENTIFICATIONQü.ÌøüúPARENTQüüüôóValeur illégaîle pour /PARENT : Qü4øTôèMenu père inconnu : lü Àø€ˆæPère terminal - fichier : Qü üP@ø¼ÄóMenu non crééQü ÜøìãUn menu de même père et de mêême libellé existe déjàQü3ø4úPROFILQüHü üPXïProfil inconnu : Qülmø€Xü° øFILE¤ü¨üP`ü¨¸äCe menu a des sous-menusÌøÿäêqualifier /FILE ignoréQüøøöPARAMETERSQü $ü0æCe menu n'a pas de FICHIERQü@ø\àQualifier /PARAMETERS ignorépøŒü@ü0 øTEXT´ü¸ü#ü¸ÈüÜüÿ ðMenu modifié ìøøõCLI$PRESENTQü  øóCLIn$GET_VALUEQü ,ø<öLIB$SIGNALQü Pø\ôSTR$TRIMpøxèSTR$FIND_FIRST_NOT_IN_SEÿTQüŒø¨ü $ø $ì $ì $ì) $ì $ì $ì $èMTH$JNOTløt÷MTH$JIANDQü ˆø”ôMTH$JIOR¨ø°ø $àLIB$DISABLEo_CTRLÜøìø $èLIB$STOPø ø$ $ì $íLIB$ENA›øBLE_CTRLQüdøtèPôÌì°ðäôäôäüP üGMENU$MODIFY_MENUå÷ü ÈïDý|~ž COB$HANDLERúmÂ^žï€ý[žï€çZ,n P«à,n #«œ,n «Àž CLI$PRESENTùP úÊ  COB$ERRORýúªl CLI$PRESENTùÐP«€è«€cõ1,n «Lž CLI$GET_VpALUEùP úÊÄ COB$ERRORýúª| CLI$GET_VALUEñÐP«€è«€$Ы€Ëlžð LIB$SIGNALùP úÊä COB$ERRORüúËh LIB$SIGNALü1žSTR$TRIMùP úÊ COB$ERRORüúʈSTR$TRIMÕЫXQž«LPÁQPRÑPR‘` 0`ÖPïÖPëЫXP°PËpžSTR$FIND_FIRST_NOT_IN_SETùP úÊ0 COB$ERRORüúʬSTR$FIND_FIRST_NOT_IN_SETöÐP«€úÊè COB$DISPLAYüúÊ COB$DISPLAYç1,n0 «4ЫXPÐPVž«LWžnX COB$CVTTI_R8óÔVžnWÐ Xž® Y COB$CVTIP_R9ü$ ® LIB$AB_CVTPT_Uú «4( c ÿž  Tü°  Xþ BüúÊ<SYS$GETÿ} ,üË`ž ,ùËà mÒá$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€™•"pq`úÊDCOB$IOEXCEPTIONÿ} ,ùË`éP± Fú´ž ,÷ùË`úÊ\COB$IOEXCEPTIONÿ} ,øË`éPŠ !úúÊ< COB$DISPLAYû1(#ú«œ(P@ü«à(ü«À( ý«@Ð<ø«0 úÊ„ COB$DISPLAYü1ž CLI$PRESENTùP úÊ  COB$ERRORüúÊ  CLI$PRESENTùÐP«€è«€Wõ1,n «Lž CLI$GET_VALUEùP úÊÄé COB$ERRORüúʨ CLI$GET_VALUEñÐP«€è«€$Ы€Ë|ž LIB$SIGNALùP úÊä COB$ERRORüúËx LIB$SIGNALü1žSTR$TRIMùP úÊ COB$ERRORüúʈSTR$TRIMÕЫXQž«LPÁQPRÑPR‘` 0`ÖPïÖPëЫXP°PËpžrSTR$FIND_FIRST_NOT_IN_SETùP úÊ0ô COB$ERRORüúʬSTR$FIND_FIRST_NOT_IN_SETöÐP«€úÊÜ COB$DISPLAYüúÊ COB$DISPLAYç1,n0 «@ЫXPÐPVž«LWžnX COB$CVTTI_R8óÔVžnWÐ Xž® Y COB$CVTIP_R9ü$ ® LIB$AB_CVTPT_Uö «@- c0ndù1( «@ ÿž  Tü°  Xþ BüúÊ<SYS$GETÿ} ,üË`ž ,ùË`úÊtCOB$IOEXCEPTIONÿ} ,ùË`éP± Fú´ž ,ùË`úÊ\COB$IOEXCEPTIONÿ} ,øË`éPŠ !úúÊ COB$DISPLAYüúÊ COB$DISPLAYù1-P@÷ núÊL COB$DISPLAYüúÊt COB$DIsSPLAYõ1Ы€( «@þ1ÿžì Tþ°  Xþ BüúÊ<SYS$FINDþ Bÿ} ,ùË`èPž ,ùË`úÊŒCOB$IOEXCEPTIONÿ} ,ùË`Š !ü2ÿ‘ü1o” BüúÊ<SYS$GETÿ} ,üË`ž ,ùË`úʤCOB$IOEXCEPTIONÿ} ,ùË`éP9± Fú´ž ,ùË`úʼÿCOB$IOEXCEPTIONÿ} ,øË`éPŠ !ü2ýè«€ü1‘þ1#û1) ý«@1ù1€)#«œúÔ«€” BüúÊ<SYS$GETÿ} ,üË`ž ,ùË`úÊÔCOB$IOEXCEPTIONÿ} ,ùË`éP9± Fú´ž ,ùË`úʼCOB$IOEXCEPTIOtNÿ} ,øË`éPŠ !ü2õ1_ÿè«€úʼ COB$DISPLAYüúÊ COB$DISPLAYù1Ô«ˆž CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊà CLI$GET_VALUEíÐP«€- « -#Ыˆž CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊà CLI$GET_VALUEùÐP«€è«€ ì1óЫ„Ñ«„ Å«„Pž@ðìn) ¾«Ö«„àÑ«„ êüúÊ COB$DISPLAYüúÊ COB$DISPLAYð1髈UÅ«„Pž@üønž¾Ë„žMTH$JNOTùP úÊü COB$ERRORüúË€MTH$JNOTûÐP«Œž MTH$JIANDùP úÊ COB$ERRORüúÊ MTH$JIANDóÐP«02Å«„Pž@üønž¾ËžMTH$JIORùP úÊ8 COBu$ERRORüúˈMTH$JIORôÐP«0,n «ž CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊà CLI$GET_VALUEøÐP«€1ÿž CLI$PRESENTùP úÊ  COB$ERRORüúÊ0 CLI$PRESENTùÐP«€è«€9ü1Þ CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊ@ CLI$GET_VALUEþà‡Â¬~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$d§ º1ü( «4ÿž Tþ°  Xÿíÿ BüúÊ<SYS$GETÿ} ,üË`ž ,ùË`úÊDCOB$IOEXCEPTIONÿ} ,ùË`éP4± Fú´ž ,ùË`úÊ\COB$IOEXCEPTIONÿ} ,øË`éP Š !øúÊl COB$DISPLAYüúʘ COB$DISPLAYö,n P«àž CLI$PRESENTùP úÊ  COB$ERRORüúvʸï CLI$PRESENTéÐP«€é«€:-P«à núÊä COB$DISPLAYüúÊ COB$DISPLAYýž CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊ( CLI$GET_VALUEÿž CLI$PRESENTùP úÊ  COB$ERRORüúÊ@ CLI$PRESENT÷ÐP«€é«€ž CLI$GET_VALUEùP úÊÄ COB$ERRORüúÊP CLI$GET_VALUEü( «4 ÿžLIB$DISABLE_CTRLùP úÊt COB$ERRORüúÊ\LIB$DISABLE_CTRLÿž  Tü°  Xþ BüúÊ<SYS$GETÿ} ,üË`ž ,ùË`úÊ€COB$IOEXCEPTIONÿ} ,ùË`éPT± Fú´ž ,ùË`úÊ\COB$IOEXCEPTIONÿ} ,øË`éP+Š !wö"ÐË`˘žLIB$STOPùP úʨ COB$ERRORüúË”LIB$STOPþ BüúÊ< SYS$DELETEÿ} ,ùË`èPž ,ùË`úÊ´COB$IOEXCEPTIONÿ} ,ñË`$"ÐË`˨žLIB$STOPùP úʨ COB$ERRORüúˤLIB$STOPþ1ü( «@ü(#«œú(P«à@ü(«ÀýЫ0<þý›´ Fþ BüúÊ<SYS$PUTÿ} ,ùË`èPž ,ùË`úÊÌCOB$IOEXCEPTIONÿ} ,ñË`$"ÐË`˸žLIB$STOPùP úʨ COB$ERRORüúË´LIB$STOPÿžLIB$ENABLE_CTRLùP úÊü COB$ERRORüúÊ\LIB$ENABLE_CTRLüúÊ€ COB$DISPLAYóÐPèËÄÐP ”xPüÐPéQ,êQ‘Q Q,§QlßQ88 Q0• Q/ aPþÂQKþÅ QyþJ Q‹ÿ>Q(ÿQÿ Q þ€Q:þDQ$þsQLþÐQyþUQBþ¾QSÿGQ(ÿQÿQþvQ!þSQóþšQ þŽQ¥þ«Q“þýý¾€GMENU$MODIFY_MENUß¹EÙéâùùâüßýåßØþ÷÷ýùÎøƒ÷ý÷õ÷÷ö÷ýáùùáüßýåßØþ÷÷ýùÎõ÷ƒ÷÷ýò÷÷ýü÷ù¥Žù÷˜ùßõý˜öü÷÷ýýáöüáùüåûú÷÷ýúÎßÎùÞáùåù÷…þ÷÷÷áüõ÷õåáüå÷åƒyÞÅÞå¹ù÷÷õ÷ø½Þå÷ ¿‚ 7PîGMENU$MODIFY_MENUPüüHüúé‚ $CODE‰H$LOCAL©ˆ$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½t¾´REC_MENU½ LIST_PROFIL½à MENU_FICHLIB$M_CLI_CTRLY COB$AB_NAM COB$HANDLER CLI$PRESENTõ COB$ERROR CLI$GET_VALUE LIB$SIGNALSTR$TRIMSTR$FIND_FIRST_NOT_IN_SET COB$DISPLAY COB$CVTTI_R8 COB$CVTIP_R9LIB$AB z_CVTPT_USYS$GETCOB$IOEXCEPTIONSYS$FINDMTH$JNOT MTH$JIANDMTH$JIORRLIB$DISABLE_CTRLLIB$STOP SYS$DELETESYS$PUTLIB$ENABLE_CTRLþ½ww1­àØöö ¥”0=GMENU$MODIFY_PROFIL019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57D/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$MODIFY_PROFILå¼GMENU$MODIFY_PROFILDP ÿ' P ÿ'Q!ÜD´´{  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔÜd |€ d À Q,þÿÿüPÿø  '  ' #'P÷MENU$FICHQüd ||€ d ¾ P2QüÔü üØàþP3Qüôüøü üøøTEXTü ü# ü 0äLe profil existe déjà : Dø\îprofil non modifiéQütøˆíProfil inexistant :û œø°àüÿ òPro}fil modifiéQüÐøàóCLI$GET_VALUEQü ôøõCLI$PRESENTQü ø$ü $ø $ì $èLIB$STOPpù­ÿxø $ì$ $ì $ôLPôÈôÈôÈôÈüP  üGMENU$MODIFY_PROFILì÷ü ÈïŒý|~ž COB$HANDLERúm ^žï€ý[žï€þZž €þYž€þXž COB$ER~RORþWžLIB$STOP÷V,n ;«ˆž CLI$GET_VALUEõPúÊŒgúªh CLI$GET_VALUEÿž CLI$PRESENTôPúʬgúÊ€ CLI$PRESENT÷ÐP«€é«€ž CLI$GET_VALUEôPúÊŒgúÊð CLI$GET_VALUEÿž CLI$PRESENTôPúʬgúʨ CLI$PRESENT÷ÐP«€é«€ž CLI$GET_VALUEôPúÊŒgúʸ CLI$GET_VALUEä}«€Ñ«„ MžnTÅ«„Pž@ð实¾d- ´ n*) ´«”úÊä COB$DISPLAYüúÊ COB$DISPLAYâ1) ´«ˆЫ„«€Ö«„­Õ«€ úÊ8 COB$DISPLAYÔ10¨€,n0¨,n #¨™Ô¨¼,n n¨À3¨€Å«€Pž@ðån( ¾¨ž¨€ÉÔ° ÉØÉÂúʸSYS$GETî}ɬËĞɬËÄúÊÀCOB$IOEXCEPTIONâ}ɬËÄéP@±ÉÆ´žÉ¬ËÄúÊØCOB$IOEXCEPTION½}ɬËÄéPŠÉ¡ÐËÄËОfPúÊgúËÌf-#«  n(#« ¨™- «” n›´ÉöõÆÉÂúʸ SYS$UPDATEë}ɬËÄèPžÉ¬ËÄúÊ COB$IOEXCEPTIONÓ}ɬËÄÐËÄËàžfPúÊgúËÜf1ÏÉÂúʸ SYS$DELETEë}ɬËÄèPžÉ¬ËÄúÊ$COB$IOEXCEPTIONØ}ɬËÄÐËÄËðžfPúÊgúËìfÅ«€Pž@ðìn( «”¾( «”¨Å«€Pž@üönù¾ ®$ cáLIB$AB_CVTPT_Uî ¨›´ÉÆÉÂúʸSYS$PUTë}ɬËÄèPžÉ¬ËÄúÊ<COB$IOEXCEPTIONÛ}ɬËÄÐËÄËžf€PúÊgúËüfúÊh COB$DISPLAYóÐPèË ÐP ”PLPÕQH<QˆQPþQ!þñQÆÿR|ý¾ŽGMENU$MODIFY_PROFILV¹;½ùêåüéåüéôúâø÷÷õûûû÷ýâüíœê÷ú÷ÇêýÍêçâÇê÷ ¿:9PìGMENU$MODIFY_PROFILPüüüöé:$CODE‰$LOCAL©Ô$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICH COB$AB_NAM  COB$HANDLER CLI$GET_VALUE COB$ERROR˜ CLI$PRESENT COB$DISPLAYSYS$GETCOB$IOEXCEPTIONLIB$STOPSYS$FIND SYS$UPDATE SYS$DELETELIB$AB_CVTPT_USYS$PUTþ½ww1­ 5 ÷ ¥”0;GMENU$MODIFY_USER019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57B/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$MODIFY_USERç¼GMENU$MODIFY_USER(P ÿ' P ÿ'Q!ÜDà ¶Þ$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€O™"‚´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔÜd |€ d À Q,þÿÿüPý  'ð  'P÷MENU$ƒFICHQüd |€ d ¾ P2ÿQüÔü üØàíUsername inconnu : QüôøàéUtilisateur non modifiéQü ø8úPROFILQüLüTêPas de profil spécifiéQüdø|ü üTïProfil inconnu : Qü„¤ø¸èUtilisateur non crééÐøäü<üÿ êUtilisateur modifié : Qü ø$àóCLI$GET_VALUEQü <øLü $ø $ôø $éCLI$PRESENTQü ˜ø¤ôMTH$JNOT¸øÀ÷MTH$JIANDQü ÔøàôMTH$JIORôøüø $èLIB$STOP(ø00Pô<üôü…P üGMENU$MODIFY_USER÷ü ÈïTý|~ž COB$HANDLERúmÂ^žï€ý[žï€þZž €þYž COB$ERRORþXž CLI$GET_VALUEþWž COB$DISPLAYýV2à,n «€,n «œžgPúÊÔhúªhg( «€ÿžïÉÔ° ÉØÉÂúÊàSYS$GETî}ɬ˨žÉ¬Ë¨úÊèCOB$IOEXCEPTIONç}ɬ˨éP7±ÉÆ´žÉ¬Ë¨ûúÊCOB$IOEXCEPTIONÞ}ɬ˨éPŠÉ¡ úÊfúÊÀf1Ô«”ž CLI$PRESENTôPúÊ,húÊÜ CLI$PRESENT´ÐP«Œè«Œ úÊfúÊÀf1žgPúÊÔhúÊgÐP«Œ- «œ -Ы”žgPúÊÔhúÊgÐP«Œè«ŒMì1Ы˜Ñ«˜ Å«˜Pž@†ðÔn) ¾«œÖ«˜àÑ«˜  úÊ@fúÊlf1é«”NÅ«˜Pž@üñønž¾Ë´žMTH$JNOTôPúÊHhúË°MTH$JNOTûÐP«ž MTH$JIANDôPúÊhhúÊx MTH$JIANDþÐP<÷1Å«˜Pž@üønž¾ËÀžMTH$JIORôPúÊ„hú˸MTH$JIORþÐP<Ô,n «œžgPúÊÔhúÊgÐP«Œ1"ÿ›´ÉÆÉÂúÊà SYS$UPDATEë}ɬ˨èPžÉ¬Ë¨úÊšCOB$IOEXCEPTIONí}ɬ˨ Ð˨ËÈžLIB$STOPôPúʸhúËÄLIB$STOPîúʬfÐPèËÔÐP ”PtPÖQ¤]áPþQ-þnQ9þ×Q5þüoý¾›GMENU$MODIFY_USERK¹<½ùòò÷™ûûýýåüûû‡ýíöüíùüåûúûûýüÒàÏùêÇâû ¿7PîGMENU$MODIFY_USERPüüXüöé$CODE‰X$LOCAL©D$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICH COB$AB_NAM COB$HANDLER CLI$GET_VALUE COB$ERROR’SYS$GETCOB$IOEXCEPTION COB$DISPLAY CLI$PRESENTMTH$JNOT MTH$JIANDMTH$JIORSYS$FIND SYS$UPDATELI ˆB$STOPþ½ww1­ j÷ ¥”06 GMENU$REMOVE019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57=/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$REMOVEì¼ GMENU$REMOVEÒáùáùðïøáýùáüåûúõýÓù÷“ÜÉÜÉùÌá ý¢ýüíÝóøÃÜ÷êõ¢úêùáÓù÷“õþɶÜêùááßÔþõõýÉËøõýù“þõýË•õýÉÜùôöÃÜê ¿  2Pó GMENU$REMOVEPüü¸üÿé  $CODE‰¸$LOCAL©ü$PDATA©COB$NAMES_____2© COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ LIST_PROFIL½à MENU_FICHLIB$M_CLI_CTRLY COB$AB_NAM – COB$HANDLERLIB$DISABLE_CTRLô COB$ERROR CLI$GET_VALUELIB$ENABLE_CTRL COB$DISPLAYSYS$GETCOB$IOEXCEPTIONLIB$STOPSYS$FIND SYS$DELETEMTH$JNOT MTH$JIAND SYS$UPDATESTR$TRIMSTR$FIND_FIRST_NOT_IN_SET COB$CVTTI_R81 COB$CVTIP_R9LIB$AB_CVTPT_USYS$PUTþ½ww1­`Ç-÷ ¥”0:GMENU$SET_OUTPUT019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57A/OBJECT=GM—ENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$SET_OUTPUTè¼GMENU$SET_OUTPUTP ÿ' P ÿ'Q!ÜDÿÿ  ø hÔP ¸Üÿ ÿ`ÿ üÿ  COB$AB_NAMÓûáQôþÿÿüPüPõOUTPUT_FILEQÜDÿÿ  ø hÔP˜ ¸àÿ ÿ`ÿ üÿ  COB$AB_NAM°ÿ þP2Qüüÿü ôLIB$STOP(ø0öLIB$SIGNALQü DøPøãõ $ü hø $çCLI$GET_VALUEQü ÀøÐõSYS$OUTPUT:Qø $ì $™ì $ì  $ð $ø $÷7ýPôôüP <GMENU$SET_OUTPUTï÷< Èï8û1™ÐïüP}`ïþèïý,ÐïÿïÿžLIB$STOPûP úï8 COB$ERRORþúïLIB$STOPü0Ðïÿï,ÿž LIB$SIGNALûP úïX COB$ERRORþúï( LIB$SIGNALþÔïþÐïûPóï ÿïýÔïü`úïdä COB$ERRORþŸïlýÝž COB$HANDLERþmž €ý[žï€ýZžï€þYžCOB$šIOEXCEPTIONñX,n ª„,n ÿè骀`´Ë¦ŠË <ËìúÉ  SYS$CLOSEÕ}Ëðˬ}ËðÊèPžËðÊúÉ(h}Ëðʔˡž CLI$GET_VALUEùP úÉX COB$ERRORüúÉœ CLI$GET_VALUEõ, Éd ÿ”µËêžË¬ÊúÉph}ˬÊ1áË žË¬ÊúɈh}ˬÊ1ŠË ,n ÿ«„Ë¢(ô©ŒË¤Ð˨Ëþš„ËìúÉ  SYS$CREATEœ}Ëðˬ}ËðÊèPžËðÊúÉ h}ËðÊhÓ Ë(9ÓË( ±Ë$© &Á© PŠP±Ë$PžËðÊúɸh}ËðÊ}ú(úÉÐ SYS$CONNECTÝ}ˬÊèPžË¬ÊúÉØh}ˬÊèÊ`ì1{þЪ€ÐPèʸÐP ˜P›”PsPþãQþÇQIÿCý¾ÇGMENU$SET_OUTPUT ¹âùÔÖ ôü½ãòÿøü ¿q6PïGMENU$SET_OUTPUTPüü<üøéq$CODE‰<$LOCAL©p$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½ÿ REC_OUTPUT½ÿOUTPUT_FICHIER½OUT_LEN½ OUTPUT_FILE COB$AB_NAMLIB$STOP COB$ERROR€ LIB$SIGNAL COB$HANDLER SYS$CLOSECOB$IOEXCEPTION CLI$GET_VALUESYS$O œPEN SYS$CREATE SYS$CONNECTþ½ww1­àá3÷ ¥”0:GMENU$SHOW_FILES019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57A/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$SHOW_FILESè¼GMENU$SHOW_FILESìP ÿ'QüPüÿüÿüèFichier de menus :  ø4üÿüLèFichier de sortie : døxôSTR$TRIMø˜PüüP GMENU$SHOW_FILESº÷ Èï ý|~ž COB$HANDLERýmžï€ý[žï€þZžSTR$TRIM÷YžiPú« COB$ERRORïú«iÐÊ€P°PÊ„ú«¼ COB$DISPLAYøžiPú« COB$ERRORðú«ÔiÐÊ€P°PÊ„úk COB$DISPLAYóÐPèÊŒÐP3ý¾×GMENU$SHOW_FILES¹ Õïîïï ¿}6PïGMENU$SHOW_FILESPüüüåé}$CODE‰$LOCAL©¬$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½ÿOUTPUT_FICHIER½ÿ ž INPUT_FILE COB$HANDLERSTR$TRIM COB$ERROR COB$DISPLAYþ½ww1­€A÷ ¥”09GMENU$SHOW_MENU019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57@/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$SHOW_MENUé¼GMENU$SHOW_MENUP ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´Ÿ`ÿ üÿ  COB$AB_NAMÕÛd |€ d À Q,þÿÿü P ÿ'Q!ÜDÿÿ  ø hÔP ¸ Üÿ ÿ` ÿ üÿ  COB$AB_NAMÇíQôþÿÿüPQðòQöQþQü  'ä000000000000000000000000  ' #'Q #'Qü P'Ú P÷MENU$FICHQüd |è€ d Í¡OUTPUT_FILEQúPROFILQüàüèü <üèøõProfil incoúnnu : Qü ø øøTEXT8ü<ü#Hü<LüLLüLLûDEPTHQü|ü„üü„”ü”ÚProfondeur illégale, mise à 20Qü¼üüÜøFILEðüôüP”üôüäòIDENTIFICATIONQü(ü8ü ü8Hü¢HH ö0123456789Qü lüxÙValeur illégale pour /IDENTIFICATION : Qü'Œø´HúPARENTQüÌüÔüÔHáValeur illégale pour /PARENT : QüðøHü<ü#lü#ü4<ü4 üP@üd(ó!#* !AS : !ASQÿ ýýxüÿü  üddî!#* !8* File : !ASQü°üüÌÌî!#* !8* Par. : !ASQü£äî!#* !8* Père : !ASQüü êAucun menu sélectionnéQü$ø<õCLI$PRESENTÿQü Pø\óCLI$GET_VALUEQü pø€ôSTR$TRIM”øœöSTR$UPCASEQü °ø¼ðOTS$CVT_TI_L ÐøÜçSTR$FIND_FIRST_NOT_IN_SETQüðø ü $ø $ì $ì) $ì $ì $ì)à(…zö$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€vê"£¤ $ì) $ì $ëMTH$JIANDQü èøôðSTR$FIND_FIRST_SôUBSTRINGø òSTR$MATCH_WILDQü4øDùSYS$FAOQüXø`þ, Qü $ø $ôPüüHü”üˆüü˜<ü<ø@üiÄüüXüüøüüxüüüüP üG¥MENU$SHOW_MENU÷ü Èï°ý|~ž COB$HANDLERúmÂ^žï€ö[ÔËŒÔË€ž CLI$PRESENTûP úïd COB$ERRORþúïð CLI$PRESENT÷ÐPËhèËhT÷1ÐË€ž CLI$GET_VALUEûPúïˆ COB$ERRORþúï CLI$GET_VALUEê°ˈ±Ëˆ 2ˈPÄPž@ ðçn) ¾Ë¼¶Ëˆڱˈ úïæ( COB$DISPLAYó12ˈPÄPž@ üønо˞ CLI$PRESENTûPúïd COB$ERRORþúïD CLI$PRESENTðÐPËléËlÐË€ž CLI$GET_VALUEûPúïˆ COB$ERRORþúïT CLI$GET_VALUEÿžSTR$TRIMûPúï¤ COB$ERRORþúï`é¦STR$TRIMÿž STR$UPCASEûPúïÄ COB$ERRORþúïp STR$UPCASEÿž CLI$PRESENTûPúïd COB$ERRORþúïŒ CLI$PRESENT÷ÐP«pé«pž CLI$GET_VALUEûPúïˆ COB$ERRORþúïœ CLI$GET_VALUEÿž OTS$CVT_TI_LûPúïäâ COB$ERRORþúï¨ OTS$CVT_TI_Lñ±ËˆµËˆúïä COB$DISPLAYó°ˈ°ˈž CLI$PRESENTûPúïd COB$ERRORþúïü CLI$PRESENTðÐPËpéËpÐË€ž CLI$GET_VALUEûPúïˆ COB$ERRORþúï  CLI$GET_VALUEÿžñSTR$TRIMûPúï¤ COB$ERRORþúï§STR$TRIMÿž CLI$PRESENTûPúïd COB$ERRORþúï@ CLI$PRESENT÷ÐPËtèËtzí1îÐË€,n Ë”ž CLI$GET_VALUEûP úïˆ COB$ERRORþúïP CLI$GET_VALUEûÐP«pžSTR$TRIMûP úï¤ü COB$ERRORþúï\STR$TRIMÒÐË QžË”PÁQPRÑPR‘` 0`ÖPïÖPëÐË P°P˘žSTR$FIND_FIRST_NOT_IN_SETûP úï COB$ERRORþúï€STR$FIND_FIRST_NOT_IN_SETøÐP«púï¼ COB$DISPLAYä1,n0 ˤÐË PÐPVžË”WžnX COB$CVTTI_R8óÔVžnWÐ Xž® Yò COB$CVTIP_R9ü$ ® LIB$AB_CVTPT_Uû ˤž CLI$¨PRESENTûP úïd COB$ERRORþúïÜ CLI$PRESENT÷ÐPËxèËx”ô1,n Ë”ž CLI$GET_VALUEûP úïˆ COB$ERRORþúïä CLI$GET_VALUEûÐP«pžSTR$TRIMûP úï¤ COB$ERRORþúï\èSTR$TRIMÒÐË QžË”PÁQPRÑPR‘` 0`ÖPïÖPëÐË P°P˘žSTR$FIND_FIRST_NOT_IN_SETûP úï COB$ERRORþúï€STR$FIND_FIRST_NOT_IN_SETøÐP«púï COB$DISPLAYä1,n0 Ë°ÐË PÐPVžË”WžnX COB$CVTTI_R8óÔVžnWÐ Xž® Yÿ COB$CVTIP_R9ü$ ® LIB$AB_CVTPT_Uñ Ë°Ô«tÔË|èËtŠø1ƒ( ˤ ÿž © Tü°  Xþ Bþúï SYS$GETþúï(COB$IOEXCEPTIONüéP%± Fù´úï@COB$IOEXCEPTIONûéP Š !ñ1éËx) Ë°ÿâ1ž¯ËŒ11°ËŒéËx%( Ë°ñà2ËŒPÄ Pž@Ëtÿnž¾P( Ë°¾,n0 é2ËŒPÄ Pž@Ëtÿn,n0 ¾1ÿž Tþ°  Xþ Bþúï SYS$FINDÿ” BûèP úïXCOB$IOEXCEPTIONü Š !ú1” Bþúï SYS$GETþúïpCOB$IOEXCEPTIONüéP%± Fù´úïˆCOB$IOEXCEPTIONûéP Š !ú1‘þ1øí12ËŒPÄ Pž@Ëtÿn) ý¾ªÛ1ž¯ËŒ1±ËŒËˆ‚¶ËŒèË€ÀË|(  ì2ËŒPÄ Pž@Ëtÿnž¾P(  ý¾ž Tþ°  Xþ Bþúï SYS$FINDÿ” BûèP úï COB$IOEXCEPTIONü Š !ø 1ÿñÿ1ú±ËŒ´Ë1·ËŒ®ËŒËŒèË€ÂË|ÎË|Ë|2ËŒPÄ Pž@Ëtÿn( ¾ÿž Tþ°  Xþ Bþúï SYS$FINDÿ” BûèP úï¸COB$IOEXCEPTIONü Š !ö1yÿ,n0  ñ2ËŒPÄ Pž@«€n)  û¾l” Bþúï SYS$GETþúïÐâCOB$IOEXCEPTIONüéP%± Fù´úïˆCOB$IOEXCEPTIONûéP Š !ú1ÿ‘í1«2ËŒPÄ Pž@Ëtÿn) í¾1îþ1|ÿ1æýéËhž MTH$JIANDûP úïü COB$ERRORþúï( MTH$JIANDûÐP«xï÷1éËlSž STR$UPCASEûP úïÄ COB$ERRORþúïD STR$UPCASEõÐËP°PË žSTR$FIND_FIRST_SUBSTRINGûP úï( COB$ERRORþúïPSTR$FIND_FIRST_SUBSTRINGùÐP«xè«xGí1éËp4ÐËdP°P˨žSTR$MATCH_WILDûP úïL COB$ERRORþúïlSTR$MATCH_WILDùÐP«xè«x€ó1Ыt,n ÿÿøÐË|ËÀžSYS$FAOûP úïh COB$ERRORüúË°SYS$FAOò2«|PÀPùPn$cLIB$AB_CVTPT_Uÿ õ°Ë¬ˆ±Ëˆ Üó12ˈPÄPž@ üønž¾ËÔž MTH$JIANDûP úïü COB$ERRORüúËÌ MTH$JIANDúÐPË€ û1& LIB$AB_CVTTP_Uîn6cPÐPV×PÑPÿÿ< û1ƒž@éWÃPÿXÐYÑYXÐXY(YïtêgÐSWÀYVÂXB2ˈPÄPž@ ðÚn: ¾ÃP YÐYZÑZXÐXZ(Z¾gÀZVùV®$®LIB$AB_CVTPT_Uÿ öùV®$cLIB$AB_CVTPT_Uÿ ð¶Ëˆ1 ÿ¶«|2«|Pž@ÿòPð - `° þ& LIB$AB_CVTTP_Uøn6cP÷P FþŠ üÿ” BþúïxSYS$PUTûèP úï€COB$IOEXCEPTIONü-P@ü n7 ü1«žSTR$TRIMûP ú­ï¤ COB$ERRORþúï STR$TRIMîÐË|ËðÐË€P°PËØžSYS$FAOûP úïh COB$ERRORüúËàSYS$FAOõ2«|PùPn$nLIB$AB_CVTPT_Uÿ ü° þ& ãLIB$AB_CVTTP_Uøn6cP÷P FþŠ ÿ” BþúïxSYS$PUTûèP úï€COB$IOEXCEPTIONþ-ü nñ ü1«žSTR$TRIMûP úï¤ COB$ERRORþúïÔSTR$TRIMîÐË|ËÐË€P°PËøžSYS$FAOûP úïh COB$ERRORüúËðSYS$FAOõ2«|PùPn$cLIB$AB_CVTPT_Uÿ ü° þ& LIB$AB_CVTTP_Uøn6cP÷P FþŠ ÿ” Bþúïx®SYS$PUTûèP úï€COB$IOEXCEPTIONüèË€¤ ó1„ÐË|Ë(žSYS$FAOûP úïh COB$ERRORüúËSYS$FAOõ2«|PùPn$cLIB$AB_CVTPT_Uÿ ü° þ& LIB$AB_CVTTP_Uøn6cP÷P FþŠ ÿ” BþúïxSYS$PUTûèP úï€COB$IOEXCEPTIONíÐËŒPÔËŒ`è«t úïD COB$DISPLAYóÐPèË0ÐP ”P ˜PÔ4PêQ,¥QéQ,žQ.üQ”RPþzQ ÿ Q!ÿQÿQ ÿQ þŒ Qÿ QÿbQ ÿ Qÿ Qÿ Qÿ Qÿ]Qÿ Qÿ Qÿ¯QÿQÿQ ÿ QÿCQ ÿ Qÿ Qÿ QÒþ QgþçQ›ÿQ þQ­þHQþ4Qþ¸Qþ(Q™þQBþ¾WQ þ«QþQÿQþ¥Q•þQÿ(Q&þ9QVþáQ7þ¨QZþêQ;þ¦üý¾€GMENU$SHOW_MENUà¹aÜüÜøûáûàúùõýêÜûûáááÝüááóõùûÜûûááÜöûøÝáÝÓþõýøËÜøøÝáÝÓþõýøËýüøöªýì÷ýûûÛáù½ý¿ýØ÷÷üöÙ½þýùöóíé½ýöè¿ýÞúýûÝûûáÓùûÓùüôÜçûöÈû¦4Î*¹ùýë¸ïáÒê¸ñáÒ기öÜê«ñ ¿Q 5PðGMENU$SHOW_MENUPüü´üñéQ $CODE‰´$LOCAL©˜$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ÿ REÐ:##ß~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$d:XøC_OUTPUT½ÿOUTPUT_FICHIER½OUT_LEN½ LIST_PROFIL½à MENU_FICH½ OUTPUT_FILE COB$AB_NAM COB$HANDLER CLI$PRESENT COB$ERROR CLI$GET_VALUE COB$DISPLAYSTR$TRIM STR$UPCASE OTS$CVT_TI_LSTR$FIND_FIRST_NOT ±_IN_SET COB$CVTTI_R8 COB$CVTIP_R9LIB$AB_CVTPT_USYS$GET‹COB$IOEXCEPTIONSYS$FIND MTH$JIANDSTR$FIND_FIRST_SUBSTRINGSTR$MATCH_WILDSYS$FAOLIB$AB_CVTTP_USYS$PUTþ½ww1­@úV÷ ¥”0;GMENU$SHOW_PROFIL019-Jun-1991 09:3119-Jun-1991 09:31VAX COBOL V4.3-57B/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$SHOW_PROFILç¼GMENU$SHOW_PROFILP ÿ' P ÿ'Q!ÜD²´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔÜd |€ d À Q,þÿÿü P ÿ'Q!ÜD³ÿÿ  ø hÔP ¸ Üÿ ÿ`ÿ üÿ  COB$AB_NAMÆîQôþÿÿüPø  'üP÷MENU$FICHQüd |€ d Ù Ü´OUTPUT_FILEQþP2Qüàü üäìüììäAucun profil sélectionnéø(óCLI$GET_VALUEQü <øLôSTR$TRIM`øhü $ø) $üŠð $ì $ð $ø $ì $ô PüP üGMENU$SHOW_PROFILð÷ü Èï ý|~ž COB$HANDLERúm ^žï€þ[ž €ýZžï€ýY3û,n ø,n ©ˆžà¿ÏM$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ës"´µ CLI$GET_VALUEùP úËÔ COB$ERRORýú«t CLI$GET_VALUEÿžSTR$TRIMùP úËð COB$ERRORüúË€STR$TRIMü( ©ˆüÔ©„žæÊÔ° ÊØÊÂÈ Ê¨úËüûSYS$FINDìÊ Ê¨”ÊÂèP úËCOB$IOEXCEPTIONèŠÊ¡1­Ð©€”ÊÂúËüSYS$GETüúËCOB$IOEXCEPTIONðéP±ÊÆ´ úË4COB$IOEXCEPTIONðéP ŠÊ¡1qè©€ü1j‘þ3 ï1^Щ”PЩ”Q-P©ˆ Qÿ8ñ1FЩ„ð001 ù,n ÿþ& øLIB$AB_CVTTP_Uðn6cP×PÑPÿuû1Šž@êVÃPÿWÐ XÑXWÐWX(XöfÐSVùX n& LIB$AB¶_CVTTP_Uõ® nc$cLIB$AB_CVTPT_Uÿ î W9Ð#XÑXWÐWX(XùfùX n& LIB$AB_CVTTP_Uõ® nc$cLIB$AB_CVTPT_Uÿ ü° þ& LIB$AB_CVTTP_Uøn6cP÷P FþŠ ÿ” BüúËLSYS$PUTùèP úËTCOB$IOEXCEPTIONø”ÊÂúËüSYS$GETüúËlCOB$IOEXCEPTIONðéP±ÊÆ´ úË4COB$IOEXCEPTIONèéP ŠÊ¡Ô©€1þè©„ úË° COB$DISPLAYóÐPèÉ ÐP ”P ˜PÔPÎQ QLxÆPÿ QÿRý¾¸GMENU$SHOW_PROFIL.¹BÒùïæå÷ý¹ýüËýÕüóôª¼Ëú·ó ¿˜7PîGMENU$SHOW_PROFILPüü$üé˜$CODE‰$$LOCAL©$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ÿ REC_OUTPUT½ÿOUTPUT_FICHIER½OUT_LEN½à MENU_FICH½ OUTPUT_FILE COB$AB_NAM­ COB$HANDLER CLI$GET_VALUE COB$ERRORSTR$TRIMSYS$FINDCOB$IOEXCEPTIONSYS$GETLIB$AB_CVTTP_ULIB$AB_CVTPT_USYS$PUT COB$DISPLAY ¸þ½ww1­"`÷ ¥”09GMENU$SHOW_USER019-Jun-1991 09:3219-Jun-1991 09:32VAX COBOL V4.3-57@/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$SHOW_USERé¼GMENU$SHOW_USER0P ÿ' P ÿ'Q!ÜD´´  ø hØP   ¸Ø ´`ÿ üÿ  COB$AB_NAMÔ¹Üd |€ d À Q,þÿÿü P ÿ'Q!ÜDÿÿ  ø hÔP ¸ Üÿ ÿ`ÿ üÿ  COB$AB_NAMƺîQôþÿÿüP  'è  'P÷MENU$FICHQüd |€ d é ÌOUTPUT_FILEQþP2Qüàü üäìüìì úPROFILQüüü $ü(ïProfil inconnu : Qü<øP(ü<» òAucun utilisatñeur sélectionnéQütø”óCLI$GET_VALUEQü ¨ø¸ôSTR$TRIMÌøÔü $ø) $éCLI$PRESENTQü øø $ì $ïMTH$J…üIANDQü Xødþ, Qü $ø $ì $ô8Pü<øP üGMENU$SHOW_USER÷÷ü ÈïDý|~ž COB$HANDLERúmÂ^žï€ý[2ñ,n ¼«€,n «¤ž CLI$GET_VALUEûP úïÀ COB$ERRORþúïô CLI$GET_VALUEÿžSTR$TRIMûP úïÜ COB$ERRORþúïSTR$TRIMü( «€üÔ«”ž Tþ°  Xþ BúÈ  (þúïèSYS$FINDúÊ  (ÿ” BûèP úïðCOB$IOEXCEPTIONü Š !÷1Ô« ž CLI$PRESENTûP úï COB$ERRORþúï  CLI$PRESENT÷ÐP«é«iž CLI$GET_VALUEûP úïÀ COB$ERRORþúï0 CLI$GET_VALUEïЫœÑ«œ Å«œPž@ ðën) ¾«¤Ö«œàÑ«œ úñÿïX COB$DISPLAYö1Å«œPž@ üònо« Ô«”Ы” Bþ½úïèSYS$GETþúï(COB$IOEXCEPTIONüéP%± Fù´úï@COB$IOEXCEPTIONûéP Š !ø1è«Àü1‘þ2Ìï1ЫŒPЫŒQ-P«€ Qÿäü1ž MTH$JIANDûP úïlÿ COB$ERRORþúïh MTH$JIANDöÐP«˜Õ« ò1Ы”,n ÿøð013 þ, ü ÿ÷ЫœÑ«œ Kö1Å«œPž@ üønž¾ËÀž MTH$JIANDûP úïl COB$ERRORüú˸ MTH$JIAND÷ÐP«˜Ñ«˜ˆû1& LIB$AB_CVTTP_Uín6cPÐPV×PÑPÿ«ôû1ž@éWÃPÿXÐYÑYXÐXY(YïxígÐSWÀYVÂXÅ«œPž@ ¾ðÛn: ¾ÃP YÐYZÑZXÐXZ(Z¾gÀZVùV®$cLIB$AB_CVTPT_Uÿ öùV®$cLIB$AB_CVTPT_Uÿ øÖ«œ1ÿ  ü° þ& LIB$AB_CVTTP_Uøn6cP÷P FþŠ þ Bþúï|SYS$PUTûèPúï„COB$IOEXCEPTIONÿ” BþúïèSYS$GETþúïœCOB$IOEXCEPTIONüéP± Fù´úï@COB$IOEXCEPTIONûéPŠ !òÔ«1òýè«”úïœ COB$DISPLAYóÐPèËÄÐP ”P ˜PÔüPØQ4¶QpÁÙPþìQþz•Q[þQþQ þûQþãQ$ÿQþoQ8þåQ;þ¢¿Q!þQÿQÿ>QÿQÿQ]ÿ Q)ÿ%Q ÿQ ÿ QÿQ ÿ Qÿuý¾•GMENU$SHOW_USERS¹Kàùòáá÷ý§ýýÝüáüåûúõýîýü¿ýÕÝöüôóðü÷Ì÷¢úù·¿úñ ¿ã5PðGMENU$SHOW_USERPüüHüñéã$CODE‰H$LOCAL©´$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ÿ REC_OUTPUT½ÿOUTPUT_FICHIER½OUT_LEN½ LIST_PROFIL½à MENU_FICH Àî½ OUTPUT_FILE COB$AB_NAM COB$HANDLER CLI$GET_VALUE COB$ERRORSTR$TRIMSYS$FINDCOB$IOEXCEPTION CLI$PRESENT COB$DISPLAYSYS$GET MTH$JIANDLIB$AB_CVTTP_ULIB$AB_CVTPT_USYS$PUTþ½ww1­`Ðj÷ ¥”04 GMENU_UTIL019-Jun-1991 09:3219-Jun-1991 09:32VAX COBOL V4.3-57;/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU_UTILî¼ GMENU_UTIL8P ÿ' P ÿ'Q!ÜDÁ´´  ø hØP   ¸Üÿ ´`ÿ üÿ  COB$AB_NAMÕÛd |€ d À Q,þÿÿüP ÿ'Qÿ QðÂGMENU_UTIL_CLI LIB$GET_INPUTRMS$_EOFRMS$_FNFP÷MENU$FICHQÜD´´  ø hØP   ¸ïÿ ´ñ`ÿ üÿ  COB$AB_NAM°d |‚ d ºà ÿ üü üÿñGMENU$DIR:.DAT;QüèüØàøü ëFichier non trouvé : Qü ø8àèVoulez-vous le créer (O/ûN) ? QüPøpüø„ü„„ÞMauvais format du fichier d'entréeQü"¤øÈüÿüÜùGMENU> QüìôLIB$STOPüøø$äÿÄô( $ìGMENU$SET_OUTPUTTødïLIB$FIND_FILE_ENDQüxøŒü xø öSTR$UPCASEQü ´øÀöGMENU$EXITQü Ôøàø $ì $ÿð hø $ì  $ì  $ì $ì $ð $ø $ì $ì $ìÅ $ÿì) $ì $ì $åLIB$GET_FOREIGNQüTødóCLI$DCL_PARSEQü xøˆðCLI$DISPATCH œø¨öLIB$SIGNALQü ¼øÈq@PôÈôàüÜôôìôôP ü GMENU_UTILú÷ü Èï˜ü`Ðï8üP}`ï8þÐï8ÿïDÿžLIB$STOPûP úï  COB$ERRORþúï@à=Œ3$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ª"ÅÆLIB$STOPþÐï(ûPóï,ÿï$ýÔï(ü`úï COB$ERRORþŸï ýÝž COB$HANDLERúmÂ^žï€þ[ž €ýZžï€þYžCOB$IOEXCEPTIONöX,nˤžòGMENU$SET_OUTPUTùP úÉì COB$ERRORþûGMENU$SET_OUTPUTÿžLIB$FIND_FILE_ENDùP úÉ COB$ERRORüúÉPLIB$FIND_FILE_ENDÿž LIB$FIND_FILEùP úÉ( COB$ERRORüúÉ€ LIB$FIND_FILEîÐPË„ÑË„Ë kúÉÀ COB$DISPLAYì‘Ë€O7‘Ë€N/úÉøCOB$DISP_NO_ADVüúÉ  COB$ACCEPTÿž STR$UPCASEùP úÉH COB$ERRORüúÉ STR$UPCASEõÁ‘Ë€Nž GMÇENU$EXITùP úÉh COB$ERRORþû GMENU$EXITñ'èË„"ÐË„ËÔžLIB$STOPùP úÉŒ COB$ERRORüúËÐLIB$STOP×µÊêžÊ¬Ë¸úÉth}ʬ˸1áÊ žÊ¬Ë¸ÃúÉŒh}ʬ˸1,n ÿª„Ê¢(¼©ŒÊ¤ÊþЀÊì Êÿúɤ SYS$CREATE¹}Êðʬ}Êð˸èPžÊð˸úɬh}Êð˸1ÓÊ(žÊð˸úÉÄh}Êð˸èPJš1Ó Ê(:ÓÊ( ±Ê$© 'Á© PŠP±Ê$PžÊð˸úÉÜh}Êð˸1‘Ê žÊð˸úÉôh}Êð˸pµÊ¶/¸‘ÊÆ (‘ʬ!•Ê«±Ê ‘Ê*  ‘Ê•ÊžÊð˸úÉ h}Êð˸&úÉ$ SYS$CONNECTá}ʬ˸ÈèPžÊ¬Ë¸úÉ,h}ʬ˸0û,n0 ÷ÊÂúÉ$SYS$GET»}ʬ˸žÊ¬Ë¸úÉDh}ʬ˸éPl±ÊÆ´žÊ¬Ë¸úÉ\h}ʬ˸éPMŠÊ¡FÐ<þ0û,n0 ö›´ÊÆÊÂûúÉ$SYS$PUTå}ʬ˸žÊ¬Ë¸úÉth}ʬ˸‘ù0"úÉP COB$DISPLAYÿž GMENU$EXITùP úÉh COB$ERRORþû GMENU$EXIT÷ÐWÅWVžF ðön,n ¾žF üñnÔ¾ÖWÑW Ù3û,n úÐË„žæÊÔ° ÊØÊÂÈ Ê¨úÉ$SYS$FINDçÊ Ê¨”ÊÂ}ʬ˸èPžÊêЬ˸úÉŒh}ʬ˸ ŠÊ¡ÔË„ÐˈéË„T”ÊÂúÉ$SYS$GETµ}ʬ˸žÊ¬Ë¸úɤh}ʬ˸ÉéP*±ÊÆ´žÊ¬Ë¸úÉ\h}ʬ˸éP ŠÊ¡ÔË„èË„ìü1ž‘þ3ø÷1’Ñˈ õ1ˆÅˈPž@ ðýn( ö¾ÅˈPž@ üþnÐ<ò¾Öˈ”ÊÂúÉ$SYS$GETµ}ʬ˸žÊ¬Ë¸úɼh}ʬ˸éP*±ÊÆ´žÊ¬Ë¸úÉ\h}ʬ˸éP ŠÊ¡ÔË„1ZÿžLIB$GET_FOREIGNùP úÉì COB$ERRORüúÉdLIB$GET_FOREIGNæ-ÿ«€ n}Ë”ËèÐ˘Ëðž CLI$DCL_PARSEùP úÉ COB$ERRORüúËà CLI$DCL_PARSEéÐPË„éË„ž¯Ë°b1±}Ëâó”ËÐ˘Ëž CLI$DCL_PARSEùP úÉ COB$ERRORüúËø CLI$DCL_PARSEñÐPË„ÑË„Ëœž GMENU$EXÊITùP úÉh COB$ERRORþû GMENU$EXITðéË„ž¯Ë°¡ž CLI$DISPATCHùP úÉ0 COB$ERRORþû CLI$DISPATCHîÐPË„èË„"ÐË„ËžÔ LIB$SIGNALùP úÉP COB$ERRORüúË LIB$SIGNALæÐË°PÔË°`ÐPèËÐP ˜PHPQ„yQD‚QàQƒ®PþgQÿQþKQXþñQ"þÍQ?þŒQÿQÿ>Q2ÿQÿ„ý¾† GMENU_UTILg¹Jãˆçåà÷÷ð÷÷ãøàÞƒï¯ùïÒ÷÷çÖùöû¨üûû°üâéêü°ùåõÒóýÒÞóþâÌ ¿¬0Põ GMENU_UTILPüËüœüüé¬$CODE‰œ$LOCAL©Ü$PDATA©COB$NAMES_____2© COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½´REC_MENU½ÿ INPUT_FILE½ LIST_PROFIL½à MENU_FICHGMENU_UTIL_CLI LIB$GET_INPUTRMS$_EOF÷RMS$_FNF COB$AB_NAMLIB$STOP COB$ERROR COB$HANDLERGMENU$SET_OUTPUTLIB$FIND_FILE_END LIB$FIND_FILE COB$DISPLAYCOB$DISP_NO_ADV COB$ACCEPT STR$UPCASE GMENU$EXITCOB$IOEXCEP ÌTIONSYS$OPEN‹ SYS$CREATE SYS$CONNECTSYS$GETSYS$PUTSYS$FINDLIB$GET_FOREIGN CLI$DCL_PARSE CLI$DISPATCH LIB$SIGNALþ½ww1­Œx÷ ¥”0-0)GMENU_UTIL_CLI0-019-JUN-1991 09:32-VAX/VMS Command Definition Utility (V4-001) GMENU_UTIL_CLI‰( CLI$TABLESP€<((ADDEXITGENEHELPMODIREMOSETSHOW(ddœðL4 X ( ( ŒÍ €ADD(´!P1What ÐADD_TYPE(ø¬PROFIL$€øUSER$@MENU<à| Œ )ADD_MENUGMENU$ADD_MENU$€P1$ÄTEXT,ð PARAMETERS(€SYMBOL$<FILE(qdPROFIL(΀PARENTœÐ¬¸ Ä Ä àì ð <`€4„" )ADD_USERGMENU$ADD_USER$XP1,!P2 Userna€me (uPROFIL@`ì@" + ADD_PROFILGMENU$ADD_PROFIL$€P10!P2 Profil name $TEXÏT8  &€EXIT GMENU$EXIT@@Ü * GENERATEGMENU$GENERATE(e@SELEC€T<%OUTPUTGMENU_GENERATE.COM\ SELECT_TYPE$€ALL€$¤MENU$ÈUSER(PROFIL8 (€ &HELP GMENU$HELP$P1( tÐ MODIFY(€œ!P1What ¸ MODIFY_TYPE(à@ PROFIL$„U€SER$(MENUD`l , MODIFY_MENUGMENU$MODIFY_MENU$€P1$´TEXT,à PARAMETERS0I€DENTIFICATION$4FILE(q\ÑPROFIL(PAREN€TD`È " , MODIFY_USERGMENU$MODIFY_USER$ìP1,€!P2 Username (qPROFILH`ˆ  2 . MODIFY_PROFILGMENU$MODIFY_€PROFIL$¬ P10Ü !P2 Profil name 4!P3Ne€w profil name $TEXT< p Ò" (REMOVE GMENU$REMOVE(˜ €Ì !P1What 4!P2Item to remove è  REMOVE_TYPE( €PROFIL$4 USER$MENU< ” "% %SET€GMENU$SET_OUTPUT(¼ ä !P1What (!P2File  SET_TYPE€(OUTPUT( P Ó& SHOW(x !P1What €”  SHOW_TYPE(¼ ”PROFIL$à ÜUSER$ Œ M€ENU$( FILES@ h & + SHOW_FILESGMENU$SHOW_FILES$€P1@`Ì ð & * SHOW_MENUGMENU$SHOW_MENU$P1$€TEXT0DÔIDENTIFICATION$hFILE(€PROFIL$´DEPTH(PARENT@`l!& * SHO,€W_USERGMENU$SHOW_USER$@P1,!P2 Username (€PROFILD Ø!& , SHOW_PROFILGMENU$SHOW_PROFIL$üP1,Ø!P2PrÕofil GMENU$ADD_MENUiPGMENU$ADD_MENUGMENU$ADD_USER!PGMENU$ADD_USERGMENU$ADD_PROFIL×PGMENU$ADD_PROFIL GMENU$EXITŠP GMENU$EXITGMENU$GENERATEÆPGMENU$GENERATE GMENU$HELPP GMENU$HELPGMENU$MODIFY_MENUTPGMENU$MODIFY_MENUGMENU$MODIFY_USER°PGMENU$MODIFY_USERGMENU$MODIFY_PROFILn PGMENU$MODIFY_PROFIL GMENU$REMOVE\ P GMENU$ REMOVEGMENU$SET_OUTPUT} PGMENU$SET_OUTPUTGMENU$SHOW_FILESS PGMENU$SHOW_FILESGMENU$SHOW_MENU¶ PGMENU$SHOW_MENUGMENU$SHOW_USERPGMENU$SHOW_USERGMENU$SHOW_PROFILÀPGMENU$SHOW_PROFILwwà •ý¤$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€Š3"Ö×1­àa‡*”0x/GMENU025-Jul-1991 15:3825-Jul-1991 15:385VAX COBOL V4.3-5736/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENUó ¼GMENU|ÖPÜD´´ðÀÖØP p××Ø ´`ÿxÕüÿxÕ COB$AB_NAMÎâdÔ×€Ø d À Q@þÿÿüQÀùDãçç´´ð€ÙØP 0ÚÐÙl Ü"ç`ÿ8Øüÿ8Ø COB$AB_NAMÃdÙQ¤þÿÿüQ`*ÿÿý0QÈ &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Qþÿÿ  'Q,  'ýQ,  'Q,$$  'Q,  'Q,  'Q,  'Q,  'Q,  'Q,  'QþÿÿüQ2üQ2üQ2üQ2üQ2üQ2üQ2üQ2üQ2üQþÿÿþQ4þQ4þQ4þQ4þQ4þQ4þQ4þQ4þQ4þQþ '  'ÿ Ú #'ÿ  P' H'QêGMENU$DIR:POS_DISPLAY.  'Q€1000000000000000000000000000000000000 000000000000 000000000000000000000000"×000000000000(000000000000à000000000000 000000000000Qô  'QöQø P'÷@ þ'QîQQþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$Q–RÿÿþQÄþQÄþQÄþQÄþQÄþQÄþQÄþQšRÿÿþQÄÛþQÄþQÄþQÄþQÄþQÄþQÄþQ–RÿÿþQÄþQÄþQÄþQÄþQÄþQÄþQÄþQ–Rÿÿü QÂü QÂü QÂü QÂü QÂü QÂü QÂü Q° P' 'Qÿ0Qÿ0QüðúQþQþ Q €'SMG$_NO_MORMSGSMG$M_WRAP_WORD SMG$M_BORDER SMG$M_REVERSE SMG$M_BOLD SMG$M_BLINK SMG$M_NOTABSSMG$M_CURSOR_OFFSMG$M_SCROLL_JUMPSMG$M_RETURN_IMMEDSMG$M_FIXED_FORMATSMG$K_VERTICALï SMG$K_TOP SMG$K_TRM_CÜR SMG$K_TRM_F8SMG$K_TRM_ZERO SMG$K_TRM_ONESMG$K_TRM_EIGHTSMG$K_TRM_SELECTSMG$K_TRM_REMOVE SMG$K_TRM_UPSMG$K_TRM_DOWNSMG$K_TRM_RIGHTSMG$K_TRM_LEFTSMG$K_TRM_CTRLWSMG$K_TRM_HELPQ€SMG$K_TRM_TIMEOUT SMG$K_TRM_DOSMG$K_TRM_UPPERCASE_ASMG$K_TRM_UPPERCASE_ZSMG$K_TRM_LOWERCASE_ASMG$K_TRM_LOWERCASE_ZüDVI$_DEVBUFSIZ SS$_WASSET SS$_TIMEOUTLIB$K_DELTA_SECONDSø SYS$SETEFüQ@÷GMENU$GAGPùMENU$FIþCHQÜDÝ´´ðÀÖØP p××Ü ´`ÿxÕüÿxÕ COB$AB_NAMÏádÔ×€ d ¯ POSITION_DISPLAYSQÜDÞçç´´ð€ÙØP 0ÚÐÙl Èà"ç`ÿ8Øüÿ8Ø COB$AB_NAMË€dñü àPlus de menus disponibles...TüœÒpÐÓ@Óø”ÚœÚx ÿý!UWQüó ü¬Òü€ üP$Òüþá ìSYS$DISK:[].COM;Ìü¼Ä€ ÜøÐÓüPˆ üœÒÐÓ@Óøÿà ü$íChoix impossible...Qü4üœÒHÐÓ@ÓÆTerminal en mode déplacement (SELECT pour terminer)...Qü6hüœÒ ÐÓ@Óø ¤ÒüäÓü ¤ü¤ÒÔü¤üè€ÛýTT:Qüüüüü\ üà1­àÁ4Ó”0$/GMENU025-Jul-1991 15:2925-Jul-1991 15:297VAX COBOL V4.3-5736/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENUó ¼GMENU|ÖPÜD´´ðÀÖØP p××Ø ´`ÿxÕüÿxÕ COB$AB_NAMÎâdÔ×€á d À Q@þÿÿüQÀùDãçç´´ð€ÙØP 0ÚÐÙl Ü"ç`ÿ8Øüÿ8Ø COB$AB_NAMÃdâQ¤þÿÿüQ`*ÿÿý0QÈ &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Q &'Qþÿÿ  'Q,  'ýQ,  'Q,  'Q,  'Q,  'Q,  'Q,  'Q,  'Q,  'QþÿÿüQ2üQ2üQ2üQ2üQ2üQ2üQ2üQ2üQ2üQþÿÿþQ4þQ4þQ4þQ4þQ4þQ4þQ4þQ4þQ4þQþ '  'ÿ ã #'ÿ  P' H'QêGMENU$DIR:POS_DISPLAY.  'Q€1000000000000000000000000000000000000 000000000000 000000000000000000000000"×000000000000(000000000000à000000000000 000000000000Qô  'QöQø P'÷@ þ'QîQQþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$QÄþ$Q–RÿÿþQÄþQÄþQÄþQÄþQÄþQÄþQÄþQšRÿÿþQÄäþQÄþQÄþQÄþQÄþQÄþQÄþQ–RÿÿþQÄþQÄþQÄþQÄþQÄþQÄþQÄþQ–Rÿÿü QÂü QÂü QÂü QÂü QÂü QÂü QÂü Q° P' 'Qÿ0Qÿ0QüðúQþQþ Q €'SMG$_NO_MORMSGSMG$M_WRAP_WORD SMG$M_BORDER SMG$M_REVERSE SMG$M_BOLD SMG$M_BLINK SMG$M_NOTABSSMG$M_CURSOR_OFFSMG$M_SCROLL_JUMPSMG$M_RETURN_IMMEDSMG$M_FIXED_FORMATSMG$K_VERTICALï SMG$K_TOP SMG$K_TRM_CåR SMG$K_TRM_F8SMG$K_TRM_ZERO SMG$K_TRM_ONESMG$K_TRM_EIGHTSMG$K_TRM_SELECTSMG$K_TRM_REMOVE SMG$K_TRM_UPSMG$K_TRM_DOWNSMG$K_TRM_RIGHTSMG$K_TRM_LEFTSMG$K_TRM_CTRLWSMG$K_TRM_HELPQ€SMG$K_TRM_TIMEOUT SMG$K_TRM_DOSMG$K_TRM_UPPERCASE_ASMG$K_TRM_UPPERCASE_ZSMG$K_TRM_LOWERCASE_ASMG$K_TRM_LOWERCASE_ZüDVI$_DEVBUFSIZ SS$_WASSET SS$_TIMEOUTLIB$K_DELTA_SECONDSø SYS$SETEFüQ@÷GMENU$GAGPùMENU$FIþCHQÜDæ´´ðÀÖØP p××Ü ´`ÿxÕüÿxÕ COB$AB_NAMÏádÔ×€ d ¯ POSITION_DISPLAYSQÜDççç´´ð€ÙØP 0ÚÐÙl Èà"ç`ÿ8Øüÿ8Ø COB$AB_NAMË€dñü àPlus de menus disponibles...TüœÒpÐÓ@Óø”ÚœÚx ÿý!UWQüàÙýûD$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€.Ù"çè ü¬Òü€ üP$Òüþá ìSYS$DISK:[].COM;Ìü¼Ä€ ÜøÐÓüPˆ üœÒÐÓ@Óøÿà ü$íChoix impossible...Qü4üœÒHÐÓ@ÓÆTerminal en mode déplacement (SELECT pour terminer)...Qü6hüœÒ ÐÓ@Óø ¤ÒüäÓü ¤ü¤ÒÔü¤üè€ÛýTT:Qüüüüü\ ü9\ HÓü\ ü üØ ü ÐÓü´Óüè üÔÓè  ÞGMENU$SYSTEM:GMENU_SCREEN_HELP.DATQü"„üà ¨üà üè ü$Ôè ä 8ÓêListe des touches défiænies par l'utilisateur,àüä  ø@ÓüøÓè  8ÓÊ*** NOUVEAU MESSAGE (tapez une touche pour sortir) ***Qü6@ü x`Óüt üÔÓè ô 8Óü  ü¬t þê1­à=“)”0 3 GMENU$GAG025-Jul-1991 15:3825-Jul-1991 15:38VAX COBOL V4.3-57:/OBJECT=GMENU$ROOT:[SOURCE] GMENU$ROOT:[SOURCE]GMENU$GAGï¼ GMENU$GAGPúQôБ–òˆ~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$džz|6 SMG$M_BOLD SMG$M_REVERSE SMG$M_BORDERSMG$K_TRM_TIMEOUT SS$_TIMEOUT %'Qô000000Q@‰ Alors, on ne tape plus sur son clavier ? C'est la fin de la journée ? Comment all€ez-vous ? HëÉ HO ! Je suis toujours là... Quoi de neuf, Docteur ?!... Vive leƒ vent, vive le vent, vive le vendredi... La vie n'est pas un long fleuve tranquille... AH ! La mer, les palmiers, le sable” chaud... Et si on faisait une petite belote ?... La question n'est pas POURQUOI mais POURQUOI MOIPütüüœ`ü\ø O<ü@d üû / \Qüdülÿh üû \ /Qìüü˜l üû |\Qü¼üÄp üû ||Qüèüðt üÿ\Qüü`ôüüŒ\œü üü€üüdüxh üú | \Qüœü¤l üú | |QüÈüÐt üû \ Qüôüül üüðp üû / í|Qü<üDt üÞ SESSION INACTIVE DEPUIS !UL MNQü"hü%(ü”\\üÞ ELLE SERA DECONNECTEE DANS 5 MNQü"¸üÜd\üë ********* TAPEZ UNE ÿðTOUCHE *********Qü%ü(l\üüdüüüüXæSMG$CREATE_VIRTUAL_DISPLAYQü€øœïSMG$ERASE_DISPLAYQü°øÄçSMG$PASTE_VIRTUAL_DISPLAYQRýüîØøôóSMG$RING_BELLQü øóSMG$PUT_CHARSQü ,ø<üPüPîSMG$READ_KEYSTROKEQü`øtåSMG$UNPASTE_VIRTUAL_DISPLAYQüˆø¤ùSYS$FAOQüv¸øÀêSMG$PUT_CHARS_HIGHWIDEQüÔøìŒPô0Œü”øP ü GMENU$GAGÿ÷ü Èï¨ý|~ž COB$HANDLERúmÂ^žï€ý[žï€þZž SMG$PUT_CHARSþYž COB$ERRORþXž €þWžSMG$READ_KïEYSTROKEÉV,nÊüÕªˆIÁª”ª˜ªˆÐª€Ñª€PЪ€PÞ@ªØnЪ€¾Öª€ãžSMG$CREATE_VIRTUAL_DISPLAYõPúË$hú«€SMG$CREATE_VIRTUAL_DISPLAYùÐPª€èª€$™ü1žSMG$ERASE_DISPLAYõPúËLhú«”SMG$ERASE_DISPLAYûЧ€žSMG$PASTE_VIRTUAL_DISPLAYõPúË|hú«œSMG$PASTE_VIRTUAL_DISPLAYùÐPª€èª€Ôü1ž SMG$RING_BELLõPúË hú«° SMG$RING_BELLÌЪŒÑªŒ#'駀#ž¯Êü1ÖªŒž¯Ê1ÖªŒž¯Ê1Ó觀"û¤1–žiPúËÄhú«ÈižiPúËÄhú«ôižiPúËÄhú« ižiPúËÄhú«LižiPúËÄhú«xižiPúËÄhúË iúËØ COB$AðCC_TIMEü&ªÕLIB$AB_CVTTP_UŠn6cP÷PªÖ¶ªÖ2ªÖPÄ0Pž@Êìnž¾ÊžiPúËÄhú˼i駀žfPúËühúËØfÐPª€2ª„PÑPª Ѫ€ª¤Ô§€é§€Ö¼Ô¼Ѽ ž¯Ê1ÇžüýSMG$UNPASTE_VIRTUAL_DISPLAYôPúË,húËìSMG$UNPASTE_VIRTUAL_DISPLAY€1žiPúËÄhú«ÈižiPúËÄhúËižiPúËÄhúË,ižiPúËÄhú«LižiPúËÄhúËXiÐÊüPÔÊü`žiPúËÄhú«ÈižiPúËÄhúËižiPúËÄhÏúË„ižiPúËÄhúË ižiPúËÄhúËÌiÐÊPÔÊ`žïSMG$ERASE_DISPLAYõPúËLhú«”SMG$ERASE_DISPLAYìǼª€,n %ª¨Ðª€Ê$žSYS$FAOôPúËHhúÊñSYS$FAOÿžSMG$PUT_CHARS_HIGHWIDEôPúËthúËSMG$PUT_CHARS_HIGHWIDEÿžSMG$PUT_CHARS_HIGHWIDEôPúËthúËdSMG$PUT_CHARS_HIGHWIDEÿžSMG$PUT_CHARS_HIGHWIDEôPúËthúË°SMG$PUT_CHARS_HIGHWIDEÿž SMG$RING_BELLôPúË húËÌ SMG$RING_BELL…<,ª€žfPúËühúËØfÐPª€2ª„PÑPª Ѫ€ª¤Ô¼ÐÊPÔÊ`žfPúËühúËìfÐPª€2ª„PÑPª Ѫ€ª¤Ô§€ÐÊPÔÊ`ÐPèÊ(ÐPQ»üÿÿþ6Q9þûQ+#þQ þaQ þ‚Q¢ÿ'QZþ·µý¾€ GMENU$GAG˜¹4µûùüöòûæùêüæùêüö÷ý÷ýõùòòòòòòñ÷êÞüíïýüûýñéýòññòäòñññäÖêúùãééééúíïðíïð ¿ÜÓ/Pö GMENU$GAGPüü¬üÿðéÜ$CODE‰¬$LOCAL©$PDATA©COB$NAMES_____2© COB$NAMES_____4™ DBM$SSC_B‰$LOCAL_1½ PASTEBOARD_ID½ KEYBOARD_ID½ DRAPEAU_GAG SMG$M_BOLD SMG$M_REVERSE SMG$M_BORDER÷SMG$K_TRM_TIMEOUT SS$_TIMEOUT COB$HANDLERSMG$CREATE_VIRTUAL_DISPLAY COB$ERRORSMG$ERASE_DISPLAYSMG$PASTE_VIRTUAL_DISPLAY SMG$RING_BELL SMG$PUT_CHARS COB$ACC_TIMELIB$AB_CVTTP_USMG$READ_KEYSTROKETHSMG$UNPASTE_VIRTUAL_DISPLAYSYS$FAOSMG$PUT_CHARS_HIGHWIDEþ½wwes défiænies par l'utilisateur,àüä  ø@ÓüøÓè  8ÓÊ*** NOUVEAU MESSAGE (tapez une touche pour sortir) ***Qü6@ü x`Óüt üÔÓè ô 8Óü  ü¬t þô\ HÓü\ ü üØ ü ÐÓü´Óüè üÔÓè  ÞGMENU$SYSTEM:GMENU_SCREEN_HELP.DATQü"„üà ¨üà üè ü$Ôè ä 8ÓêListe des touches défiænies par l'utilisateur,àüä  ø@ÓüøÓè  8ÓÊ*** NOUVEAU MESSAGE (tapez une touche pour sortir) ***Qü6@ü x`Óüt üÔÓè ô 8Óü  ü¬t þõ ýÿÔÓÕœÒõUTILISATEURQü Ôü üàèü èÔÓÔÓãVotre profil n'est pas définiQüüœÒ0ÐÓ@Óø ¤ÒüHÔü ÔÓÔÓ÷GMENU$FINQþ þxüü„ŒõGMENU$TIMERQü  ü h ü¬´t üÜd üÀÓd ÄÓüÀÓÀÔ ü ø°ÓÐÓîMenu non défini...QüüœÒö(ÐÓ@Óýø Ò<æAucune option autorisée...QüTüœÒpÐÓ@ÓÐTrop d'items dans le menu...(plus de 40)(üœÒ¸ÐÓ@Óø ü üœÒ0ÔÔÓüœÒüüüœÒüà ÜÓØÓüà íTapez une touche...Qü4 üœÒH ÐÓ@ÓêTouche inconnue...Qüh üœÒ| ÐÓ@ÓÌDéfinition impossible : option non ter÷minale,œ üþœÒÈ ÐÓ@ÓÕTapez la touche que vous voulez définirQü'è üœÒ ÐÓ@ÓæTouche déjà définie...Qü0 üœÒH ÐÓ@ÓÕTapez la touche que vous voulez effacerQü'h üœÒ ÐÓ@Óøä ü¤üä ¸ üä ÔÓÔÓt øÓ@Óüä ÔÓÔt \Ô<Óüä ÜÓØÓüä øt ô€°Òøü8 | ü ý|Üô4Óüh ü l ü üÓØÓøt ü` d ü8 ü°Òü ´ ÔÓÌÔìÄÓñFINQüô ü„ø öSYS$SETASTQü Dÿ ø èSMG$SELECT_FROM_MENU, ø@ îSMG$REPAINT_SCREENQüT øh óSMG$RING_BELLQü | øŒ ðSMG$PUT_LINE   ø¬ ôSTR$TRIMÀ øàÙ>|¡$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€³@"øùÈ ùSYS$FAOQüÜ øLÿä þ (QèSMG$CHANGE_RENDITIONü ø ìSMG$LABEL_BORDER$ ø4 ïLIB$FIND_FILE_ENDQüH ø\ ü H øp ëFichier non trouvé : QèSMG$ERASE_PASTEBOARDœ ø° òLIB$DO_COMMANDEþQüÄ øÔ ü<Ùø<Ùì<Ùì<Ùì<Ùì,<ÙÜSMG$GET_PASTING_INFOhúø|åSMG$REPASTE_VIRTUAL_DISPLAYQüø¬ñSMG$DELETE_MENUQüÀøÐåSMG$UNPASTE_VIRTUAL_DISPLAYQüäøîSMG$READ_KEYSTROKEQüø(äSMG$MOVE_VIRTUAL_DISPLAY<øTíSMG$KEYCODE_TO_NAMEQþþhø|êSTR$CASE_BLIND_COMPAREQüø¨ëSMG$CREATE_PASTEBOARDQü¼øÔôLIB$STOPèøðìSMG$CONTROL_MODEøôMTHû$JIOR(ø0çSMG$CREATE_VIRTUAL_KEYBOAþRDQüDø`íSMG$SET_CURSOR_MODEQütøˆíSMG$SET_KEYPAD_MODEQüœø°öLIB$GETDVIQü ÄøÐæSMG$CREATE_VIRTUAL_DISPLAYQüäøäSMG$LOAD_VIRTUAL_DISPLAYø,æSMG$CHANGE_VIRTUAL_DISPLAYQü@ø\ïLIB$ANALYZE_SDESCQüpø„ÿ1Qø|ÖðÀÖø|Öìü |Öì|Öóù|Öð|Öø|ÖæLIB$GET_SYMBOLQü<øLóSMG$PUT_CHARSQü `øpø|Öì|Öì<Ùð€Ùüü<Ùì <Ùì <Ùì<Ùì<Ùì<Ùì<ÙÛýSMG$PASTE_VIRTUAL_DISPLAYQü|ø˜ùSMG$SETþí_BROADCAST_TRAPPINGQü¬øÈòLIB$SET_SYMBOLQüÜøìðOTS$CVT_TI_L ø äLIB$CVT_TO_INTERNAL_TIME ø8åSMG$BEGIN_PASTEBOARD_UPDATEQüLøhîMenu Principal (1)QñSMG$READ_STRINGQüø çSMG$END_PASTEBOARD_UPDATEQü´øÐø)|Öì|Öì|þÖëMTH$JIANDQü ,ø8ø|ÖöïSMG$CREATE_MENUQüdøtø|ÖãSMG$ERASE_DISPLAYQü ø´ø<Ùì<Ùì<Ùì<Ùì$<Ùüð)<Ùì<Ùì<ÙêSYS$READEFQü ˆø”÷SYS$CLREFQü ¨øÿ´çSMG$GET_BROADCAST_MESSAGEQüÈøäü ÕüøúLIB$DAÿùTE_TIMEQü øöSYS$CANTIMQü ,ø8öSYS$SETIMRQü LøX”ÚPì##¤ü¬è&&¸ÚÀÚôÔÓÔÓÔÓè ø¨ÒÔÓÔÓhÔðÛ`ÓøÛ`ÓøÔÓÔÓÔÓè ø¨ÒÔÓÔÓhÔøÛ`Óü@Ó¸þü ÔhÔü8Óì ÜÛt Øh Üt ì\ÓXÓÔÓøÛ`ÓüÜ ü°ÒüPüà ü¨ÒüTÓüäÓ¤Òü ü¨ÒüTÓüäÓ¤Òøt ððøôðøP üGMENU÷ü Èï„Üý|~ž COB$HANDLERúmÂ^žï€ý[žï€÷Z,nXï Õÿž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTèÐËÜ ÑËÜ PÐËÜ PÞ@ïÐÓ nÐËÜ ¾ÖËÜ ÜÐXÅÆXVžFË®ònÔ¾žF˲òn´¾žF˸ònÔ¾ÐYÅ$YWÀVWžGË òn,n #¾žGËÃòn ¾ÖYÑY(ÛÐYÅÁzYWÀVWžGËê÷n,n P¾žGË:øn,n ¾žGËXøn,n0 ¾ÖYÑY(ÅÖXÑX ù1mÿž¯ï<Õù1ž¯ï@Õù1ž¯ïDÕù1ž¯ïtÕù1ž¯ïpÕú1&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïý&ï”ÒLIB$AB_CVTTP_Uín6cPÄP>@Ëånž¾ïýÿžSMG$SELECT_FROM_MENUùP úÊÈ COB$ERRORþúïSMG$SELECT_FROM_MENUúÐPËÜ ž SYS$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTþ2ï¤ÒüPÑPï˜ÓùÑËÜ ï¼Óÿéü1ž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTüž¯ïpÕú1&ïö”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï,ÿžSMG$SELECT_FROM_MENUùP úÊÈ COB$ERRORþúï$SMG$SELECT_FROM_MENUúÐPËÜ ž SYS$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTú1Uÿ&ï”ÒLIB$AB_CVTTP_Uïn6cPÄP>@Ëån°ï¨Òý¾žû SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTþï”ÒôËéË ž¯ïTÕü1éûž¯ïLÕø112ï¤ÒüPÑPïdÓúž¯ï Õø112ï¤ÒüPÑPïxÓúž¯ï4Õø112ï¤ÒüPÑPïhÓúž¯ï(Õø112ï¤ÒüPÑPïLpÓü62ï¤ÒüPÑPïtÓü&¢ïlÓÿï¤Òü ®ï¤Òÿï¤Òüž¯ï,Õø112ï¤ÒüPÑPï|Óúž¯ï0Õø112ï¤ÒüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENû1±ï¤Òÿï”Óúž¯ïäXÕø112ï¤ÒüPÑPïœÓúž¯ï\Õù1u2ï¤ÒüPÑPï¨Óü2ï¤ÒüPÑPï¬Óú ž¯ï8Õù1H2ï¤ÒüPÑPï Óü2ï¤ÒüPÑPï¤Óú ž¯ï8Õú1ž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLú1°ü&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒåPÄzPÀQPž@Ëê÷n-P¾ n½ú1„&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒêPÄzPÀQPž@Ë:øn(¾ïtÒý&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒóPÄzPÀQPž@îõËê÷n(P¾ï$Òüž¯ï$Õé112Ëp Ëô ÔËø ÑËô VÒ1Åc Ëô P>@˲ònµ¾ÐËô Ëø ÅËô Pž@Ën&ï”ÒLIB$AB_CVTTP_Uï®6cPÅÆPQ2ï¨ÒáPÄzPÀQPž@ËXø®) ¾¾÷Ëô ï¤Òüž¯ï,Õã11×Ëô ÎËô Ëô 1lÿÕËø )ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊø SMG$PUT_LINEüž¯ïPÕø11ï”Òÿï˜Òý&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒÓPÄzPÀQPž@ËXønÅËø Pž@Ë®( ¾¾ùËø n$cLIB$AB_CVTPT_Uþï”Òý&cLIB$AB_CVTTP_Uða6cVÄÆV&ïç”ÒLIB$AB_CVTTP_U•n6cWÄ6WžF˲òn´¾ÐYÅ$YXÀVXžHË òn,n #¾žHËÃòn ¾ÖYÑY(ÛžG˱n,n &¾žGË×n,n ¾žGËánÔ¾žGËån´¾° ï¬Òý&ï˜ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒïPÄ$PÀQPž@Ë ònž¾ï˜Úüž¾ï ÚÿžPÿSTR$TRIMùP úÊP COB$ERRORüúÊSTR$TRIMþ2ï¨Òÿï´ÚÿžSYS$FAOùP úÊl COB$ERRORþúï¤ÚSYS$FAOý&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@Ë×nž¾V&ï˜ÒLIB$AB_CVTTP_UËn6cPÄ6Pž@Ë×n: ¾ÃP WÐWPÑP Ð P(P¾fÐSVÃW W: ï¬ÒÒîÃPXÐXPÑPWÐWP(Pï¬ÒÖfÐSVÂXW: .ÃPXÐXPÑPWÐWP(P.fÑWX"&ï”ÒLIB$AB_CVTTP_Uân6nPÄ6Pž@Ë×n,n* ¾ÔËÜ éËÜ Qú1%&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@˱nž¾V&ï”ÒLIB$AB_CVTTP_UÑn6cPÄ6Pž@Ë×n: ¾ÃP WÐWPÑP&Ð&P(P¾fÐSVÃW&Wùÿ°ç1¯ÐPÑPWÐWP(P fÐSV×WÊú1•&ï˜ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨Ò¬PÄ$PÀQPž@Ë ònž¾PÐËø XÐXQÑQWÐWQ(Q`fÐSVÂXWHÐPÑPWÐWP(PÊx fÐSVÂW/ÐPÑPWÐWP(Pï”ÒÉfÐSV×WÐPÑPWÐWP(P)fÑW×Ëø ÎËø Ëø ÐËÜ 1Óþ&ï”ÒAõLIB$AB_CVTTP_Uín6cPÄ6Pž@˱nž¾ï¼Úüž¾ïÄÚöž@Ëánž¾ïÔÚÿžSTR$TRIMùP úÊP COB$ERRORþúïÈÚSTR$TRIMüž¯ïHÕõ1èËÜ &ï”ÒLIB$AB_CVTTP_Uèn6cPÄPž@Ën,n0 ¾ï˜Òÿï”Òû1‘ï˜Òú1F&ï˜ÒóLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÜÚÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúïØÚSMG$CHANGE_RENDITIONûD&ï˜ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ ïôÚÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúïðÚÊSMG$CHANGE_RENDITIONý&ï˜ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÛý&ï˜ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúïÛSMG$LABEL_BORDERþÐï ÕûPÔï Õäó`,n þËa žLIB$FIND_FILE_ENDùP úÊä COB$ERRORüúÊ4LIB$FIND_FILE_ENDÿž LIB$FIND_FILEùP úÊø COB$ERRORüúÊd LIB$FIND_FILE¿ÐPËÜ èËÜ ,n PË žË V(Ê fÐSV: þËa àÆHJô$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€eL"  ÃPþPÑP;Ð;P(PËa fž SMG$PUT_LINEùP úÊ4 ò COB$ERRORüúÊŒ SMG$PUT_LINEüž¯ïPÕ11¢žËa V: þËa ÃPþWÐWPÑPþšþP(PËa fÐSVÃWþW*ÐPÑPWÐWP(P fÐSV×WÐPÑPWÐWP(PïtÒþfžSMG$ERASE_PASTEBOARDùP úÊ8 COB$ERRORüúÊÄSMG$ERASE_PASTEBOARDüž¯ï(Õý,žLIB$DO_COMMANDùP úÊ\ COB$ERRORüúʬLIB$DO_COMMANDþÐï$ÕûPÔï$Õ÷`´«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊp COB$IOEXCEPTIONûéPR±ï^Ù÷ç úʈ  COB$IOEXCEPTIONúéP;Šï9Ùö2(çË«óú4°çï^ÙýïZÙüúÊh SYS$PUTùèP úÊ  COB$IOEXCEPTIONñt(çË«4ÐïlÙýn°ïpÙú®ž«4ïlÙý°ïpÙû°çï^ÙýïZÙüúÊh SYS$FINDùèP úʸ COB$IOEXCEPTIONû&ÐnïlÙü°®ïpÙüúÊh SYS$UPDATEùèP úʸ $áCOB$IOEXCEPTIONúúÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONüÐï(ÕûPÔï(Õü`2ï¤ÒøPùPn&ï”ÒLIB$AB_CVTTP_U÷®7ncÞ û1Ì2ï¤ÒìPÄc P>@˲ònµ¾)ž SMG$PUT_LINEùP úÊ4 COB$ER RORüúÊÐOà SMG$PUT_LINEüž¯ïPÕ÷11Š&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï$Ûý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúï ÛéSMG$LABEL_BORDERþ‘ï”Òú1F&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï4ÛÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúï0ÛSMG$CHANGE_RENDITIONûD&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïLÛÿžñSMG$CHANGE_RENDITIONùP úʘ   COB$ERRORþúïHÛSMG$CHANGE_RENDITIONþ2ï¤ÒøPùPn$cLIB$AB_CVTPT_Uþï”Òý&cLIB$AB_CVTTP_Uéa6cPÄÆPž@Ë®ònž¾ïLý&ï”ÒLIB$AB_CVTTP_Uín6nPÄPÞ@Ë nž¾ïXöÞ@Ënž¾ï\ÿžÐíSMG$GET_PASTING_INFOùP úÊ COB$ERRORþúïHSMG$GET_PASTING_INFOý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïdý&ï”ÒLIB$AB_CVTTP_Uín6cPÄPÞ@Ë nž¾ïlöÞ@Ënž¾ïpÿžSMG$REPASTE_VIRTUAL_DISPLAYùP úÊ4Tð COB$ERRORþúï`SMG$REPASTE_VIRTUAL_DISPLAYý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïdÛý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúï`ÛõSMG$LABEL_BORDERþÐï,ÕûPÔï,Õü`‘ï”Òþ1Çú1G&ï”ÒLIB$AB_CVTTP_Uén6nPÄÆPž@Ë®ònž¾ï|ÛÿžSMG$DELETE_MENUùP úÊX COB$ERRORþúïxÛSMG$DELETE_MENUý&ï”ÒLIB$AB_CVTTP_Uðn6cVÄÆV&ï”ÒäLIB$AB_CVTTP_U—n6cWÄ6WžF˲òn´¾ÐYÅ$YXÀVXžHË òn,n #¾žHËÃòn ¾ÖYÑY(ÛžG˱n,n &¾žGË×n,n ¾žGËánÔ¾žGËån´¾&ï”ÒLIB$AB_CVTTP_Uçn6cPÄPž@Ën,n0 ¾&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïxÿžüSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORþúïtSMG$UNPASTE_VIRTUAL_DISPLAYý°ï¤Òüž¯ï,Õû1¬ûÐï0ÕûPÔï0Õü`‘ï”Òþ1+ü1ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ( SMG$PUT_LINEüž¯ïPÕù1ž¯ïtÕù12ïì¤ÒüPÑPï˜ÓùÑËÜ ï¼Óýcž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTüž¯ïpÕü1žSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊ@SMG$READ_KEYSTROKEúÐPËÜ ž SYS$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTý‚žû SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTÿéûž¯ïLÕø11¿2ï¤ÒüPÑPïxÓúž¯ïTÕø112ï¤ÒüPÑPï€ÓûI&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@Ë nѾ(&ï”ÒLIB$AB_CVTTP_Uân6cPÄPÞ@Ë n×¾ξ¾1H2ïÿ¤ÒüPÑPï„ÓûB&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@Ë nѾ!&ï”ÒLIB$AB_CVTTP_Uén6cPÄPÞ@Ë nÖ¾1ö2ï¤ÒüPÑPïˆÓûE&ï”ÒLIB$AB_CVTTP_Uæn6cPÄPÞ@ËnѾËl "&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@ËnÀ¾1¡2ï¤ÒñüPÑPïŒÓûI&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@ËnѾ(&ï”ÒLIB$AB_CVTTP_Uân6cPÄPÞ@Ën¾ξ¾H2ï¤ÒüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENýž SMG$RING_BELLùP úÊ  COB$ERRORüúÊÌ SMG$RING_BELLý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï„ý&ï”ÒLIB$AB_CVTTP_Uín6cPÄPÞ@Ë nž¾ïŒöÞ@Ënž¾ïÿžSMG$MOVE_VIRTUAL_DISPLAYùP úÊÜ COB$ERRORþúï€SMG$MOVE_VIRTUAL_DISPLAYû1ýÐï4ÕóûPÔï4Õý`žSMG$KEYCODE_TO_NAMEùP úÊ COB$ERRORüúÊ\SMG$KEYCODE_TO_NAMEý&ï”ÒLIB$AB_CVTTP_Uín6nPÄP>@Ëån°¾ï¤Òý&ï”ÒLIB$AB_CVTTP_Uën6cPÄP>@Ëån¶¾&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒÿLIB$AB_CVTTP_Uå®6cPÄc P>@˲ò®±¾¾öú1—&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒLIB$AB_CVTTP_UÚ®6cPÅÆPQ2¾PÄ$PÀQPž@Ë ònž¾Pž`ï„ÛÿžSTR$CASE_BLIND_COMPAREùP úÊ0 COB$ERRORüúÊpSTR$CASE_BLIND_COMPAREúÐPËÜ àlú1ü&ï”ÒLIB$AB_CVTTP_Uèn6cPÄP>@Ëån¶¾1#ÿ&ï”ÒLIB$AB_CVTTP_Uên6cPÄP>@Ëån°¾&ï”ÒLIB$AB_CVTTP_Uín6cPÄP>@Ëån±¾ï¤ÒÿÔú1”&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒàLIB$AB_CVTTP_UÚ®6cPÅÆPQ2¾PÄ$PÀQPž@Ë ònž¾Pž`ï„ÛÿžSTR$CASE_BLIND_COMPAREùP úÊ0 COB$ERRORüúÊpSTR$CASE_BLIND_COMPAREöÐPËÜ !&ï”ÒLIB$AB_CVTTP_Uén6cPÄP>@Ëån¶¾1DÿÐï8ÕûPÔï8Õý`žíSMG$CREATE_PASTEBOARDùP úÊ\ COB$ERRORüúʈSMG$CREATE_PASTEBOARDñÐPËÜ èËÜ &ÐËÜ ïŒÛÿžLIB$STOPùP úÊx COB$ERRORþúïˆÛLIB$STOPÿžSMG$CONTROL_MODEùP úÊœ COB$ERRORüúÊ”SMG$CONTROL_MODEÿžMTH$JIORùP úʸæ COB$ERRORüúʤMTH$JIORúÐPËÜ žSMG$CONTROL_MODEùP úÊœ COB$ERRORüúÊ°SMG$CONTROL_MODEÿžSMG$CREATE_VIRTUAL_KEYBOARDùP úÊè COB$ERRORüúʼSMG$CREATE_VIRTUAL_KEYBOARDñÐPËÜ èËÜ &ÐËÜ ï”ÛÿžLIB$STOPùP úÊxî COB$ERRORþúïÛLIB$STOPþÁïLÓÿïPÓüËX žSMG$SET_CURSOR_MODEùP úÊ COB$ERRORüúÊÈSMG$SET_CURSOR_MODEÿžSMG$SET_KEYPAD_MODEùP úÊ8 COB$ERRORüúÊÔSMG$SET_KEYPAD_MODEÿž LIB$GETDVIùP úÊX COB$ERRORüúÊàò LIB$GETDVIñÐPËÜ èËÜ &ÐËÜ ïœÛÿžLIB$STOPùP úÊx COB$ERRORþúï˜ÛLIB$STOPÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊôSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¤ÛÿžLIB$STOPùP úÊx COB$ERRORþúï ÛáLIB$STOPûÃËh  ý Î  àÂËh ÎËh Ëh Ã%Ëh Ël ÎËl Ël žSMG$LOAD_VIRTUAL_DISPLAYùP úÊ´ COB$ERRORüúÊ0SMG$LOAD_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¬ÛÿžLIB$STOPùP úÊx COB$ERRORþúï¨ÛLIB$STOPÿžžëSMG$CHANGE_VIRTUAL_DISPLAYùP úÊä COB$ERRORüúÊ<SMG$CHANGE_VIRTUAL_DISPLAYÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊLSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï´ÛÿžLIB$STOPùP úÊx COB$ERRORþúï°ÛRäLIB$STOPÿžSMG$LABEL_BORDERùP úʼ COB$ERRORüúÊ”SMG$LABEL_BORDERÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʬSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¼ÛÿžLIB$STOPùP úÊx COB$ERRORþúï¸ÛâLIB$STOPþÁï@ÓÿïDÓüËô žSMG$LABEL_BORDERùP úʼ COB$ERRORüúÊSMG$LABEL_BORDERý2ï”Òý&ï”ÒLIB$AB_CVTTP_Uîn2Ëp PùP®7ncÞú1é&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÌÛÿžõSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORþúïÀÛSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïØÛÿžLIB$STOPùP úÊx COB$ERRORþúïÔÛLIB$STOPý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@ËÄònž¾ïàÛöž@˸ònž¾ïðÛÿžOðLIB$ANALYZE_SDESCùP úÊ  COB$ERRORþúïäÛLIB$ANALYZE_SDESCý&ï”ÒLIB$AB_CVTTP_Uún–a‘ï”Òú:0ï”Òü1õþžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïøÛÿžæLIB$STOPùP úÊx COB$ERRORþúïôÛLIB$STOPÿžLIB$ANALYZE_SDESCùP úÊ  COB$ERRORüúÊ4LIB$ANALYZE_SDESCÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊDSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïÜÿžLIB$STOPùP úÊx COB$ERRORþúïüÛLIB$STOPþÐï<ÕûPÔï<Õü`µïÂÖúúÊCOB$IOEXCEPTIONú1ïzÖù(¼ªŒï|Öû°ïÖÖüúÊ4SYS$OPENùèP úÊ<COB$IOEXCEPTIONú1Ó ï×÷Óï×ü ±ïüÖñª Áª PŠP±æÿïüÖùPúÊTCOB$IOEXCEPTIONüz‘ïÝÖù  úÊlCOB$IOEXCEPTIONüfµïŽ×ü>‘ïž×ú 5‘ï„×ü,•ïƒ×ü$±ïò×û ‘ïØú ‘ïè×ü ‘ïç×ù úÊ„COB$IOEXCEPTIONúúÊœ SYS$CONNECTùèP úʤàCOB$IOEXCEPTIONÝ0«€,n0«,n #«™Ô«¼,n n«À2«€žLIB$GET_SYMBOLùP úÊÔ COB$ERRORüúÊpLIB$GET_SYMBOLñÐPËÜ èËÜ &ÐËÜ ïÜÿžLIB$STOPùP úÊx COB$ERRORþúïÜLIB$STOPø( «Ë ž SMG$PUT_CHARSùP úÊøí COB$ERRORüúÊ| SMG$PUT_CHARSüž«€ï¬Öý° ï°ÖýïšÖüúÊœSYS$GETüúÊCOB$IOEXCEPTIONûéPd±ïžÖ÷´ úÊCà˜\E$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€øÕ"OB$IOEXCEPTIONúéPMŠïyÖýDž SMG$PUT_LINEùP úÊ4 COB$ERRORüúʸ SMG$PUT_LINEüž¯ïPÕü1žBþSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEù1Ы¼ï Òþµï‚Ùú úÊ4COB$IOEXCEPTIONú1ï:Ùø(XÊ\ï<Ùýï–ÙùЀï„Ùýï—ÙüúÊL SYS$CREATEùèPúÊTCOB$IOEXCEPTIONö1¡ÓïÀÙúúÊlïCOB$IOEXCEPTIONþèP"ú1…Ó ïÀÙ÷7ÓïÀÙü ±ï¼ÙîÊÜÁÊÜPŠP±ï¼ÙùP úÊ„COB$IOEXCEPTIONüE‘ïÙù  úÊœCOB$IOEXCEPTIONü1µïNÚü ‘ïCÚù úÊ´COB$IOEXCEPTIONúúÊh SYS$CONNECTùèP úÊÌæCOB$IOEXCEPTIONö´«4´«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊäCOB$IOEXCEPTIONûéP3±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùç(ç«4Ë (ÉË ËúÊh SYS$RELEASEùèP úÊÐ ÿCOB$IOEXCEPTIONþÐï@ÕûPÔï@Õý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊäSMG$PASTE_VIRTUAL_DISPLAYþÐïÌÓÿïœÿžSMG$SET_BROADCAST_TRAPPINGùP úÊP COB$ERRORþúï”SMG$SET_BROADCAST_TRAPPINGñÐPËÜ èËÜ &ÐËÜ ïÜ$äÿžLIB$STOPùP úÊx COB$ERRORþúï ÜLIB$STOPÿžLIB$SET_SYMBOLùP úÊt COB$ERRORüúÊLIB$SET_SYMBOLÿžLIB$GET_SYMBOLùP úÊÔ COB$ERRORüúÊ<LIB$GET_SYMBOLîÐPËÜ éËÜ 'ÐËô P°PïÜÿž OTS$CVT_TI_LùP úÊ”ø COB$ERRORüúÊL OTS$CVT_TI_LòÕËä @˲òn°T¾®¾¾ÐTËô ÎËô Ëô ‘ï”Òþ14'ú1˜&ï”ÒLIB$AB_CVTTP_Uån6cPÄ6Pž@˱n,Êü &¾&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@Ëánо&ï”Òä#LIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï0Üöž@Ë´ònž¾ï4ÜÿžSMG$CREATE_MENUùP úÊü COB$ERRORþúï,ÜSMG$CREATE_MENUú1&ï”ÒLIB$AB_CVTTP_Uçn6cPÄPž@Ën( ¾«ž«ï¬Öû° ï°ÖýïšÖüúÊœëSYS$GETüúÊCOB$IOEXCEPTIONûéP'±ïžÖ÷´ úÊCOB$IOEXCEPTIONúéPŠïyÖöÔËÜ 1ž MTH$JIANDùP úÊÀ COB$ERRORüúÊÈ MTH$JIANDäÐP«¼ÔËÜ 1ÑËô ÐËô &ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï<ÜÿžïçSMG$CHANGE_VIRTUAL_DISPLAYùP úÊä$ COB$ERRORþúï8ÜSMG$CHANGE_VIRTUAL_DISPLAYý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïHÜÿžSMG$ERASE_DISPLAYùP úÊ< COB$ERRORþúïDÜSMG$ERASE_DISPLAYý&ï”Ò¾LIB$AB_CVTTP_Uén6nPÄÆPž@Ë®ònž¾ïPÜöž@Ë´ònž¾ïTÜÿžSMG$CREATE_MENUùP úÊü COB$ERRORþúïLÜSMG$CREATE_MENUý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïhÜý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ CO%B$ERRORþúïdÜSMG$LABEL_BORDERý&ï”ÒLIB$AB_CVTTP_Uæn6cPÄPÞ@ËnѾËh (&ï”ÒLIB$AB_CVTTP_Uán6cPÄPÞ@ËnÂËh ¾ξ¾&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï¨þ&àÿï”ÒLIB$AB_CVTTP_UíàÀß~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$dã,tn6cPÄPÞ@Ë nž¾ï°öÞ@Ënž¾ï´ÿžSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORþúï¤SMG$PASTE_VIRTUAL_DISPLAYùÐËÜ ÐïHÕûPÔïHÕý`žSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈì COB$ERRORüúÊXSMG$UNPASTE_VIRTUAL_DISPLAYÿžSMG$ERASE_DISPLAYùP &úÊ< COB$ERRORüúÊdSMG$ERASE_DISPLAYÿÔþÐïLÕûPÔïLÕý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊlSMG$PASTE_VIRTUAL_DISPLAYúÐË ží SMG$RING_BELLùP úÊ COB$ERRORüúÊ€ SMG$RING_BELLþÐïPÕûPÔïPÕý`žSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʈSMG$UNPASTE_VIRTUAL_DISPLAYúÔË ÐïTÕûPÔïTÕý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ Må COB$ERRORüúÊ”SMG$PASTE_VIRTUAL_DISPLAYÿžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$RE'AD_KEYSTROKEÿžSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʨSMG$UNPASTE_VIRTUAL_DISPLAYþÐïXÕûPÔïXÕý`žþ SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEüž¯ïPÕü1üþžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEüž¯ïTÕû1"ÿ2ï¤ÒüPÑPïdÓúž¯ïdÕø11­2ï¤ÒüPÑPï|Óúž¯ïhÕø112ï¤ÒüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENû1pÿ±ï¤Òÿï”Óú ž¯ïlÕù1(G2ï¤ÒüPÑPïœÓü72ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLú ž¯ï`ÕüÐï\ÕþPýÔï\Õü`2ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óü#¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿï¤Òþ°ï¤Òú«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊHCOB$IOEXCEPTIONûéP\±ï^Ùùç úÊÿþˆ COB$IOEXCEPTIONúéPEŠï9Ùñ(ç«4Ë3ž¯ïTÕü1†ýž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$)PUT_LINEüž¯ïPÕ÷1ý6úÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONú(ËïtÒø(PËSï$Òüž¯ï$Õû1ÝÐï`ÕûPÔï`Õû`&ïâ”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒãPÄzPÀQPž@Ëê÷n-P¾ n)ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊP SMG$PUT_LINEüž¯ïPÕù1iü1ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúʘ SMG$PUT_LINEüž¯ïPÕü1@üžþSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEþ2ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERROR*üúÊÌ SMG$RING_BELLû12ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óü#¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿïõ¤Òüž¯ïTÕû1õû°ï¤Òü«4°ï¤ÒùËž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊ`COB$IOEXCEPTIONûéP±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùï(ç«4ËúÊh SYS$RELEASEùèP úÊÐ ACOB$IOEXCEPTIONÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEüž¯ïPÕí1ñú1,n Ë$&ï”ÒLIB$AB_CVTTP_U+ðn6cPÅÆPQ2ï¨ÒãPÄzPÀQPž@Ëê÷n(P¾ËS&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒëPÄzPÀQPž@Ë:øn(¾èúË&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒëPÄ$PÀQPž@Ë òn(#¾Ë/žSMG$KEYCODE_TO_NAMEùP úÊ COB$ERRORüúÊ\SMG$KEYCODE_TO_NAMEò(çË«4°çï^ÙýïZÙüúÊh SYS$PUTùèP úÊxCOB$IOEXCEPTIONöúÊh  SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONþÐïdÕûPÔïdÕý`ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$PUT_LINEüž¯ïPÕü1£ùžSMG$àÆÿÎ$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€\?"+,READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEþ2ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óþ#ãþ¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿï¤Òüž¯ïTÕû1†ù2ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLû12ÿ°ï¤Òú«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh LûSYS$GETùÊï@ÙüúÊCOB$IOEXCEPTIONûéP±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùô(ç«4Ëž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$P-UT_LINEüž¯ïPÕù1tø{ÐïlÙýn°ïpÙú®ž«4ïlÙý°ïpÙýïZÙüúÊh PæSYS$FINDùèP úʨCOB$IOEXCEPTIONû*ÐnïlÙü°®ïpÙüúÊh SYS$DELETEùèP úʨCOB$IOEXCEPTIONöúÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONþÐïhÕûPÔïhÕý`žSMG$ERASE_DISPLAYùP úÊ< COB$ERRORüúÊ0 ÷SMG$ERASE_DISPLAYõ´«4ÔËô ž«4ïlÙý°ïpÙýïZÙùÈPï@ÙüúÊh SYS$FINDùÊPï@Ùþ”ïZÙüúÊÀCOB$IOEXCEPTIONô1Èï@Ùþ”ïZÙüúÊh SYS$GE/TùÊï@ÙüúÊØCOB$IOEXCEPTIONûéP+±ï^Ù÷ç úÊðBæCOB$IOEXCEPTIONúéPŠï9Ùï(ç«4Ë7úÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ@ SMG$PUT_LINEøÖËô 1mÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORüúÊL SMG$CHANGE_RENDITIONÿžâSMG$CHANGE_RENDITIONùP úʘ COB$ERRORüúÊh SMG$CHANGE_RENDITIONÿžSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊ„ SMG$PASTE_VIRTUAL_DISPLAYÿžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMGº«( W”1¡¥” LAURENT GMENU$GAGGMENUº«( %ù|;«” LAURENT GMENU$GAGGMENUº«(Àq$¶g«” LAURENT GMENU$GAGGMENUº«(€è¼Ô” LAURENT GMENU$GAGGMENUº«( )f+” LAURENT GMENU$GAGGMENU0$READ_KEYSTROKEÿžçSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʘ SMG$UNPASTE_VIRTUAL_DISPLAYþÐïlÕûPÔïlÕý`ž SYS$READEFùP úÊ COB$ERRORüúʤ SYS$READEFöÐPËÜ ÑËÜ ï¸ÓÿÌ4ü1ž SYS$CLREFùP úÊ< COB$ERRORüúÊ° Tì SYS$CLREFÿžSMG$GET_BROADCAST_MESSAGEùP úÊl COB$ERRORüúÊÀ SMG$GET_BROADCAST_MESSAGEñÐPËÜ éËÜ vÑËÜ ï0ÓöB2Ëü P°Pï|Üÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊô  SMG$PUT_LIN1Eÿèþ"žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊ SMG$PASTE_VIRTUAL_DISPLAYþÐÿž SYS$READEFùP úÊ COB$ERRORüúÊ SYS$READEFöÐPËÜ ÑËÜ ï¸Óö=šxËô ´ï¤ÒüúÊ€COB$CALLìÕPúÊ `ÑËà ž¯ï(Õ÷1«Ö1˜ž¯çÿïtÕýbž LIB$DATE_TIMEùP úÊ  COB$ERRORüúÊ, LIB$DATE_TIMEÿž SMG$PUT_CHARSùP úÊø COB$ERRORüúÊ< SMG$PUT_CHARSþÐïpÕûPÔïpÕý`ž SYS$CANTIMùP úÊÀ COB$ERRORüúÊP SYS$CANTIMÿž SYS$SETIMRùP úÊàþ COB$ERRORüúÊ\ SYS$SETI2MRþÐïtÕûPÔïtÕý`žSMG$ERASE_PASTEBOARDùP úÊ8 COB$ERRORüúÊÄSMG$ERASE_PASTEBOARDÿžLIB$SET_SYMBOLùP úÊt COB$ERRORüúÊ€ LIB$SET_SYMBOLûÐPèï„ÜúÐPìÖPQÀÈü Pì Q, Qÿ’ QHbQÜ Q|ý#Q¬$QL_&Q8:(Q<©-QÀ/Qý0QT2Qà2Qp3QÍ3PþaQ þfQ þQ þø4Q þZ3Q–ÿQ2þ2Q¼þm(QþÂ'Qþ™QþQþ{QþQþ]QþO Qþ<3QAþ; Q3þùQÿQ þ QþÛQ,þ­Qþ„'Qþ’Qÿ Q þÈ'Q+þ#Q+þöQÞþîQþÚQþŠQbÿQ ÿQþíQþKQ:þâ$Qþ QÎÿEQ&ÿQÉÿQþ®Qÿ0Q™ÿ_QZþQIþÑQ þQ$þQ þÕ#QÿQÿ Q/þÿ!Q^ÿQÿQþ˜QþQi ÿ Q þëQ1þ¸Qÿ5QÿQÿ Qƒþf QþÒQþåQ7ÿ QÿQ)þRQÉÿ Q ÿ/Qÿ-QÿQþËQþfQBÿ-QÿQþ[QþöQ+þ'Qþ“QåþƒQsþOQ&ÿ'rÿQ¾4ÿQÿQþðQþÔQGþnQìþŒQmþQŸÿ+QÿQÿQÿ>QhÿQQÿ:Qÿ(Qvþ¶üý ¾€GMENUê¹Íåûõíú–õõõõõ”åâåõ·âÝå÷ðùòðââõÝèââÕâÓÓóåýÁÆÄõýùüöëù¹÷õýðúåõýõ¼ì¨Ø¡ÞüøñøªõûÞò÷º¼ öåàûöÔåõýžåöÔýŸÐþŒØÜçåò„÷ºý€ù¹¼ç‹ ô¼‹Þ¼ùäôåõõãåõàãåùòðõ̧¬­Èãå‹ìåÝâºûßáØþÎàÕåàåàÕ†òååàÕ5àÕéòïàÕåàÕåàÕòåùÞ·ûÚ®ÝàÕåàÄÿâüàÕùåµåõåýøùýý–öÚåÜý€ù¹ÓÕåàûÙóååàÕùÞöøû÷õûåýüùÞÓõûÞÝ÷ùùéõåàÄâüßËåõüý¾ûÅüûÈáûÑìÓÉËÍüÅùùåõòåõ†åý½ôÜá«ß³üýáþüýùû¼¼®„ÝØ‹êååéåûÔåëååÔåõåõðââåðãðãåàèõø–CЀŹõåõþëöôäÄåõýåõåðåýàèõõï–þëåõýöÆÈÌåÎþÚåõåàèõõðåýø–åõþœþÚåùºý¦þëåü³ýåå6ååÔàòåàûõÙåùåùàõúúîùõýöåÔåÔå忽6BPúGMENUQü|Ö<ÙPüüˆÜûé½6$CODE‰ˆÜ$LOCAL©l$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰¸$LOCAL_1½DRAPEAU_BROADCAST½ PASTEBOARD_ID½ KEYBOARD_ID½ DISPLAY_ID½ MESSAGE_ID½COL_TIME_û½ DELTA_TIMESMG$_NO_MORMSGSMG$M_WRAP_WORD SMG$M_BORDER SMG$M_REVERSE SMG$M_BOLD7 SMG$M_BLINK SMG$M_NOTABSSMG$M_CURSOR_OFFSMG$M_CURSOR_ONSMG$M_SCROLL_JUMPSMG$M_RETURN_IMMEDSMG$M_FIXED_FORMAT_þSMG$K_VERTICAL SMG$K_LEFT SMG$K_RIGHT SMG$K_TOP SMG$K_TRM_CR SMG$K_TRM_F8SMG$K_TRM_ZERO SMG$K_TRM_ONESMG$K_TRM_EIGHTSMG$K_TRM_SELECTSMG$K_TRM_REMOVE SMG$K_TRM_UPSMG$K_TRM_DOWNSMG$K_TRM_RIGHTþSMG$K_TRM_LEFTSMG$K_TRM_CTRLWSMG$K_TRM_HELPSMG$K_TRM_TIMEOUT SMG$K_TRM_DOSMG$K8_TRM_UPPERCASE_ASMG$K_TRM_UPPERCASE_ZSMG$K_TRM_LOWERCASE_ASMG$K_TRM_LOWERCASE_Z JPI$_USERNAMEDVI$_DEVBUFSIZ SS$_WASSETù SS$_TIMEOUTLIB$K_DELTA_SECONDS SYS$SETEF COB$AB_NAM COB$HANDLER SYS$SETAST COB$ERRORLIB$AB_CVTTP_USMG$SELECT_FROM_MENUSMG$REPAINT_SCREEN SMG$RING_BELL SMG$PUT_LINELIB$AB_CVTPT_USTR$TRIMEôSYS$FAOSMG$CHANGE_RENDITIONSMG$LABEL_BORDERLIB$FIND_FILE_END LIB$FIND_FILESMG$ERASE_PASTEBOARDLIB$DO_COMMANDSYS$GETCOB$IOEXCEPTIONSYS$PUTSYS$FIND SYS$UPDATESYS$FREE SYS$RELEASEüSMG$GET_PASTING_INFOSMG$REPASTE_VIRTUAL_DISPLAYSMG$DELETE_MENUSMG$UNPASTE_VIRTUAL_DISPLAYSMG$READ_KEYSTROKESMG$MOVE_VIRTUAL_DISPLAYSMG$KEYCODE_TO_NAMESTR$CASE_BLIND_COMPARESMG$CREATE_PASTEBOARDLIB$STOPSMG$CONTROL_MODEMTH$JIORSMG$CREATE_VIRTUAL_KEYBOARDSMG$SET_CURSOR_MODESMG$SET_KEYPAD_M: ýÿÔÓÕœÒõUTILISATEURQü Ôü üàèü èÔÓÔÓãVotre profil n'est pas définiQüüœÒ0ÐÓ@Óø ¤ÒüHÔü PŠÔÓÔÓ÷GMENU$FINQþ þxüü„ŒõGMENU$TIMERQü  ü h ü¬´t üÜd üÀÓd ÄÓüÀÓÀÔ ü ø°ÓÐÓîMenu non défini...QüüœÒ;(ÐÓ@Óýø Ò<æAucune option autorisée...QüTüœÒpÐÓ@ÓÐTrop d'items dans le menu...(plus de 40)(üœÒ¸ÐÓ@Óø ü üœÒ0ÔÔÓüœÒüœüœÒüà ÜÓØÓüà íTapez une touche...Qü4 üœÒH ÐÓ@ÓêTouche inconnue...Qüh üœÒ| ÐÓ@ÓÌDéfinition impossible : option non ter<minale,œ üþœÒÈ ÐÓ@ÓÕTapez la touche que vous voulez définirQü'è üœÒ ÐÓ@ÓæTouche déjà définie...Qü0 üœÒH ÐÓ@ÓÕTapez la touche que vous voulez effacerQü'h üœÒ ÐÓ@Óøä ü¤üä ¸ üä ÔÓÔÓt øÓ@Óüä ÔÓÔt \Ô<Óüä ÜÓØÓüä øt ô€°ÒàŽˆÂ$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€Á¦"<=ü8 | ü ý|Üô4Óüh ü l ü üÓØÓøt ü` d ü8 ü°Òü ´ ÔÓÌÔìÄÓñFINQüô ü„ø öSYS$SETASTQü ÿ ø èSMG$SELECT_FROM_MENU, ø@ îSMG$REPAINT_SCREENQüT øh óSMG$RING_BELLQü | øŒ ðSMG$PUT_LINE   ø¬ ôSTR$TRIMÀ ø>È ùSYS$FAOQüÜ øIÿä þ (QèSMG$CHANGE_RENDITIONü ø ìSMG$LABEL_BORDER$ ø4 ïLIB$FIND_FILE_ENDQüH ø\ ü H øp ëFichier non trouvé : QèSMG$ERASE_PASTEBOARDœ ø° òLIB$DO_COMMANDEþQüÄ øÔ ü<Ùø<Ùì<Ùì<Ùì<Ùì,<ÙÜSMG$GET_PASTING_INFOh?ø|åSMG$REPASTE_VIRTUAL_DISPLAYQüø¬ñSMG$DELETE_MENUQüÀøÐåSMG$UNPASTE_VIRTUAL_DISPLAYQüäøîSMG$READ_KEYSTROKEQüø(äSMG$MOVE_VIRTUAL_DISPLAY<øTíSMG$KEYCODE_TO_NAMEQþþhø|êSTR$CASE_BLIND_COMPAREQüø¨ëSMG$CREATE_PASTEBOARDQü¼øÔôLIB$STOPèøðìSMG$CONTROL_MODEøôMTH@$JIOR(ø0çSMG$CREATE_VIRTUAL_KEYBOAþRDQüDø`íSMG$SET_CURSOR_MODEQütøˆíSMG$SET_KEYPAD_MODEQüœø°öLIB$GETDVIQü ÄøÐæSMG$CREATE_VIRTUAL_DISPLAYQüäøäSMG$LOAD_VIRTUAL_DISPLAYø,æSMG$CHANGE_VIRTUAL_DISPLAYQü@ø\ïLIB$ANALYZE_SDESCQüpø„ÿ1Qø|ÖðÀÖø|ÖìA |Öì|Öóù|Öð|Öø|ÖæLIB$GET_SYMBOLQü<øLóSMG$PUT_CHARSQü `øpø|Öì|Öì<Ùð€Ùüü<Ùì <Ùì <Ùì<Ùì<Ùì<Ùì<ÙÛBSMG$PASTE_VIRTUAL_DISPLAYQü|ø˜ùSMG$SETþí_BROADCAST_TRAPPINGQü¬øÈòLIB$SET_SYMBOLQüÜøìðOTS$CVT_TI_L ø äLIB$CVT_TO_INTERNAL_TIME ø8åSMG$BEGIN_PASTEBOARD_UPDATEQüLøhîMenu Principal (1)QñSMG$READ_STRINGQüø çSMG$END_PASTEBOARD_UPDATEQü´øÐø)|Öì|Öì|CÖëMTH$JIANDQü ,ø8ø|ÖöïSMG$CREATE_MENUQüdøtø|ÖãSMG$ERASE_DISPLAYQü ø´ø<Ùì<Ùì<Ùì<Ùì$<Ùüð)<Ùì<Ùì<ÙêSYS$READEFQü ˆø”÷SYS$CLREFQü ¨øD´çSMG$GET_BROADCAST_MESSAGEQüÈøäü ÕüøúLIB$DAÿùTE_TIMEQü øöSYS$CANTIMQü ,ø8öSYS$SETIMRQü LøX”ÚPì##¤ü¬è&&¸ÚÀÚôÔÓÔÓÔÓè ø¨ÒÔÓÔÓhÔðÛ`ÓøÛ`ÓøÔÓÔÓÔÓè ø¨ÒÔÓÔÓhÔøEÛ`Óü@Ó¸þü ÔhÔü8Óì ÜÛt Øh Üt ì\ÓXÓÔÓøÛ`ÓüÜ ü°ÒüPüà ü¨ÒüTÓüäÓ¤Òü ü¨ÒüTÓüäÓ¤Òøt ððFøôðøP üGMENU÷ü Èï„Üý|~ž COB$HANDLERúmÂ^žï€ý[žï€÷Z,nXï Õÿž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTèÐËÜ ÑËÜ PÐËÜ PÞ@ïÐÓ nÐËÜ ¾ÖËÜ ÜÐXÅÆXVžFË®ònÔ¾žF˲òn´¾žF˸ònÔ¾ÐYÅ$YWÀVWžGË òn,n #¾žGËÃòn ¾ÖYÑY(ÛÐYÅÁzYWÀVWžGËê÷n,n P¾žGË:øn,n ¾žGËXøn,n0 ¾ÖYÑY(ÅÖXÑX ù1mÿž¯ï<Õù1ž¯ï@Õù1ž¯ïDÕù1ž¯ïtÕù1ž¯ïpÕú1G&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïý&ï”ÒLIB$AB_CVTTP_Uín6cPÄP>@Ëånž¾ïýÿžSMG$SELECT_FROM_MENUùP úÊÈ COB$ERRORþúïSMG$SELECT_FROM_MENUúÐPËÜ ž SYS$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTþ2ï¤ÒüPÑPï˜ÓùÑËÜ ï¼Óÿéü1ž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTüž¯ïpÕú1&ïMö”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï,ÿžSMG$SELECT_FROM_MENUùP úÊÈ COB$ERRORþúï$SMG$SELECT_FROM_MENUúÐPËÜ ž SYSH$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTú1Uÿ&ï”ÒLIB$AB_CVTTP_Uïn6cPÄP>@Ëån°ï¨Òý¾žû SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTþï”ÒôËéË ž¯ïTÕü1éûž¯ïLÕø112ï¤ÒüPÑPïdÓúž¯ï Õø112ï¤ÒüPÑPïxÓúž¯ï4Õø112ï¤ÒüPÑPïhÓúž¯ï(Õø112ï¤ÒüPÑPï pÓü62ï¤ÒüPÑPïtÓü&¢ïlÓÿï¤Òü ®ï¤Òÿï¤Òüž¯ï,Õø112ï¤ÒüPÑPï|Óúž¯ï0Õø112ï¤ÒIüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENû1±ï¤Òÿï”Óúž¯ïäXÕø112ï¤ÒüPÑPïœÓúž¯ï\Õù1u2ï¤ÒüPÑPï¨Óü2ï¤ÒüPÑPï¬Óú ž¯ï8Õù1H2ï¤ÒüPÑPï Óü2ï¤ÒüPÑPï¤Óú ž¯ï8Õú1ž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLú1°ü&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒåPÄzPÀQPž@Ëê÷n-P¾ n½ú1„&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒêPJÄzPÀQPž@Ë:øn(¾ïtÒý&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒóPÄzPÀQPž@îõËê÷n(P¾ï$Òüž¯ï$Õé112Ëp Ëô ÔËø ÑËô VÒ1Åc Ëô P>@˲ònµ¾ÐËô Ëø ÅËô Pž@Ën&ï”ÒLIB$AB_CVTTP_Uï®6cPÅÆPQ2ï¨ÒáPÄzPÀQPž@ËXø®) ¾¾÷Ëô ï¤Òüž¯ï,Õã11×Ëô ÎËô Ëô 1lÿÕËø )ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊø SMG$PUT_LINEüž¯ïPÕø11ï”Òÿï˜Òý&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒÓPÄzPÀQPž@ËXønÅËø PžK@Ë®( ¾¾ùËø n$cLIB$AB_CVTPT_Uþï”Òý&cLIB$AB_CVTTP_Uða6cVÄÆV&ïç”ÒLIB$AB_CVTTP_U•n6cWÄ6WžF˲òn´¾ÐYÅ$YXÀVXžHË òn,n #¾žHËÃòn ¾ÖYÑY(ÛžG˱n,n &¾žGË×n,n ¾žGËánÔ¾žGËån´¾° ï¬Òý&ï˜ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒïPÄ$PÀQPž@Ë ònž¾ï˜Úüž¾ï ÚÿžYÿSTR$TRIMùP úÊP COB$ERRORüúÊSTR$TRIMþ2ï¨Òÿï´ÚÿžSYS$FAOùP úÊl COB$ERRORþúï¤ÚSYS$FAOý&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@Ë×nž¾V&ï˜ÒLIB$ALB_CVTTP_UËn6cPÄ6Pž@Ë×n: ¾ÃP WÐWPÑP Ð P(P¾fÐSVÃW W: ï¬ÒSîÃPXÐXPÑPWÐWP(Pï¬ÒÖfÐSVÂXW: .ÃPXÐXPÑPWÐWP(P.fÑWX"&ï”ÒLIB$AB_CVTTP_Uân6nPÄ6Pž@Ë×n,n* ¾ÔËÜ éËÜ Qú1%&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@˱nž¾V&ï”ÒLIB$AB_CVTTP_UÑn6cPÄ6Pž@Ë×n: ¾ÃP WÐWPÑP&Ð&P(P¾fÐSVÃW&Wùÿ°ç1¯ÐPÑPWÐWP(P fÐSV×WÊú1•&ï˜ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨Ò¬PÄ$PÀQPž@Ë ònž¾PÐËø XÐXQÑQWÐWQ(Q`fÐSVÂXWHÐPÑPWÐWP(PÊx fÐSVÂW/ÐPÑPWÐMWP(Pï”ÒÉfÐSV×WÐPÑPWÐWP(P)fÑW×Ëø ÎËø Ëø ÐËÜ 1Óþ&ï”Ò_õLIB$AB_CVTTP_Uín6cPÄ6Pž@˱nž¾ï¼Úüž¾ïÄÚöž@Ëánž¾ïÔÚÿžSTR$TRIMùP úÊP COB$ERRORþúïÈÚSTR$TRIMüž¯ïHÕõ1èËÜ &ï”ÒLIB$AB_CVTTP_Uèn6cPÄPž@Ën,n0 ¾ï˜Òÿï”Òû1‘ï˜Òú1F&ï˜ÒnóLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÜÚÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúïØÚSMG$CHANGE_RENDITIONûD&ï˜ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾àjÞžö$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€ð&"MNïôÚÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúïðÚGSMG$CHANGE_RENDITIONý&ï˜ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÛý&ï˜ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúïÛSMG$LABEL_BORDERþÐï ÕûPÔï Õäó`,n þËa žLIB$FIND_FILE_ENDùP úÊä COB$ERRORüúÊ4LIB$FIND_FILE_ENDÿž LIB$FIND_FILEùP úÊø COB$ERRORüúÊd LIB$FIND_FILE¿ÐPËÜ èËÜ ,n PË žË V(Ê fÐSV: þËa OÃPþPÑP;Ð;P(PËa fž SMG$PUT_LINEùP úÊ4 ò COB$ERRORüúÊŒ SMG$PUT_LINEüž¯ïPÕ11¢žËa V: þËa ÃPþWÐWPÑPþšþP(PËa fÐSVÃWþW*ÐPÑPWÐWP(P fÐSV×WÐPÑPWÐWP(PïtÒþfžSMG$ERASE_PASTEBOARDùP úÊ8 COB$ERRORüúÊÄSMG$ERASE_PASTEBOARDüž¯ï(Õý,žLIB$DO_COMMANDùP úÊ\ COB$ERRORüúʬLIB$DO_COMMANDþÐï$ÕûPÔï$Õ÷`´«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊp COB$IOEXCEPTIONûéPR±ï^Ù÷ç úʈ PCOB$IOEXCEPTIONúéP;Šï9Ùö2(çË«óú4°çï^ÙýïZÙüúÊh SYS$PUTùèP úÊ  COB$IOEXCEPTIONñt(çË«4ÐïlÙýn°ïpÙú®ž«4ïlÙý°ïpÙû°çï^ÙýïZÙüúÊh SYS$FINDùèP úʸ COB$IOEXCEPTIONû&ÐnïlÙü°®ïpÙüúÊh SYS$UPDATEùèP úʸ PáCOB$IOEXCEPTIONúúÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONüÐï(ÕûPÔï(Õü`2ï¤ÒøPùPn&ï”ÒLIB$AB_CVTTP_U÷®7ncÞ û1Ì2ï¤ÒìPÄc P>@˲ònµ¾)ž SMG$PUT_LINEùP úÊ4 COB$ERQRORüúÊÐ à SMG$PUT_LINEüž¯ïPÕ÷11Š&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï$Ûý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúï ÛéSMG$LABEL_BORDERþ‘ï”Òú1F&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï4ÛÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORþúï0ÛSMG$CHANGE_RENDITIONûD&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïLÛÿžBñSMG$CHANGE_RENDITIONùP úʘ R COB$ERRORþúïHÛSMG$CHANGE_RENDITIONþ2ï¤ÒøPùPn$cLIB$AB_CVTPT_Uþï”Òý&cLIB$AB_CVTTP_Uéa6cPÄÆPž@Ë®ònž¾ïLý&ï”ÒLIB$AB_CVTTP_Uín6nPÄPÞ@Ë nž¾ïXöÞ@Ënž¾ï\ÿž$íSMG$GET_PASTING_INFOùP úÊ COB$ERRORþúïHSMG$GET_PASTING_INFOý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïdý&ï”ÒLIB$AB_CVTTP_Uín6cPÄPÞ@Ë nž¾ïlöÞ@Ënž¾ïpÿžSMG$REPASTE_VIRTUAL_DISPLAYùP úÊ4Gð COB$ERRORþúï`SMG$REPASTE_VIRTUAL_DISPLAYý&ïS”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïdÛý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COB$ERRORþúï`ÛõSMG$LABEL_BORDERþÐï,ÕûPÔï,Õü`‘ï”Òþ1Çú1G&ï”ÒLIB$AB_CVTTP_Uén6nPÄÆPž@Ë®ònž¾ï|ÛÿžSMG$DELETE_MENUùP úÊX COB$ERRORþúïxÛSMG$DELETE_MENUý&ï”ÒLIB$AB_CVTTP_Uðn6cVÄÆV&ï”ÒúäLIB$AB_CVTTP_U—n6cWÄ6WžF˲òn´¾ÐYÅ$YXÀVXžHË òn,n #¾žHËÃòn ¾TÖYÑY(ÛžG˱n,n &¾žGË×n,n ¾žGËánÔ¾žGËån´¾&ï”ÒLIB$AB_CVTTP_Uçn6cPÄPž@Ën,n0 ¾&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïxÿžüSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORþúïtSMG$UNPASTE_VIRTUAL_DISPLAYý°ï¤Òüž¯ï,Õû1¬ûÐï0ÕûPÔï0Õü`‘ï”Òþ1+ü1ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ( SMG$PUT_LINEüž¯ïPÕù1ž¯ïtÕù12ïì¤ÒüPÑPï˜ÓùÑËÜ ï¼Óýcž SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTüžU¯ïpÕü1žSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊ@SMG$READ_KEYSTROKEúÐPËÜ ž SYS$SETASTùP úÊ  COB$ERRORüúʼ SYS$SETASTý‚žû SYS$SETASTùP úÊ  COB$ERRORüúÊ´ SYS$SETASTÿéûž¯ïLÕø11¿2ï¤ÒüPÑPïxÓúž¯ïTÕø112ï¤ÒüPÑPï€ÓûI&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@Ë nѾ(&ï”ÒLIB$AB_CVTTP_Uân6cPÄPÞ@Ë n×¾ξ¾1H2ïÿ¤ÒüPÑPï„ÓûB&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@Ë nѾ!&ï”ÒLIB$AB_CVTTP_Uén6cPVÄPÞ@Ë nÖ¾1ö2ï¤ÒüPÑPïˆÓûE&ï”ÒLIB$AB_CVTTP_Uæn6cPÄPÞ@ËnѾËl "&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@ËnÀ¾1¡2ï¤ÒñüPÑPïŒÓûI&ï”ÒLIB$AB_CVTTP_Uèn6cPÄPÞ@ËnѾ(&ï”ÒLIB$AB_CVTTP_Uân6cPÄPÞ@Ën¾ξ¾H2ï¤ÒüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENýž SMG$RING_BELLùP úÊ Ñ COB$ERRORüúÊÌ SMG$RING_BELLý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï„ý&ï”ÒLIB$ABW_CVTTP_Uín6cPÄPÞ@Ë nž¾ïŒöÞ@Ënž¾ïÿžSMG$MOVE_VIRTUAL_DISPLAYùP úÊÜ COB$ERRORþúï€SMG$MOVE_VIRTUAL_DISPLAYû1ýÐï4ÕóûPÔï4Õý`žSMG$KEYCODE_TO_NAMEùP úÊ COB$ERRORüúÊ\SMG$KEYCODE_TO_NAMEý&ï”ÒLIB$AB_CVTTP_Uín6nPÄP>@Ëån°¾ï¤Òý&ï”ÒLIB$AB_CVTTP_Uën6cPÄP>@Ëån¶¾&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒüÿLIB$AB_CVTTP_Uå®6cPÄc P>@˲ò®±¾¾öú1—&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒLIXB$AB_CVTTP_UÚ®6cPÅÆPQ2¾PÄ$PÀQPž@Ë ònž¾Pž`ï„ÛÿžSTR$CASE_BLIND_COMPAREùP úÊ0 COB$ERRORüúÊpSTR$CASE_BLIND_COMPAREúÐPËÜ _àlú1ü&ï”ÒLIB$AB_CVTTP_Uèn6cPÄP>@Ëån¶¾1#ÿ&ï”ÒLIB$AB_CVTTP_Uên6cPÄP>@Ëån°¾&ï”ÒLIB$AB_CVTTP_Uín6cPÄP>@Ëån±¾ï¤ÒÿÔú1”&ï”ÒLIB$AB_CVTTP_Uîn6cPÄP>@Ëån&ï”ÒàLIB$AB_CVTTP_UÚ®6cPÅÆPQ2¾PÄ$PÀQPž@Ë ònž¾Pž`ï„ÛÿžSTR$CASE_BLIND_COMPAREùP úÊ0 COB$ERRORüúÊpSTR$CASE_BLIND_CYOMPAREöÐPËÜ !&ï”ÒLIB$AB_CVTTP_Uén6cPÄP>@Ëån¶¾1DÿÐï8ÕûPÔï8Õý`žíSMG$CREATE_PASTEBOARDùP úÊ\ COB$ERRORüúʈSMG$CREATE_PASTEBOARDñÐPËÜ èËÜ &ÐËÜ ïŒÛÿžLIB$STOPùP úÊx COB$ERRORþúïˆÛLIB$STOPÿžSMG$CONTROL_MODEùP úÊœ COB$ERRORüúÊ”SMG$CONTROL_MODEÿžMTH$JIORùP úʸ$æ COB$ERRORüúʤMTH$JIORúÐPËÜ žSMG$CONTROL_MODEùP úÊœ COB$ERRORüúÊ°SMG$CONTROL_MODEÿžSMG$CREATE_VIRTUAL_KEYBOARDùP úÊè COB$ERRORüúʼSMG$CREATE_VIRTUZAL_KEYBOARDñÐPËÜ èËÜ &ÐËÜ ï”ÛÿžLIB$STOPùP úÊxî COB$ERRORþúïÛLIB$STOPþÁïLÓÿïPÓüËX žSMG$SET_CURSOR_MODEùP úÊ COB$ERRORüúÊÈSMG$SET_CURSOR_MODEÿžSMG$SET_KEYPAD_MODEùP úÊ8 COB$ERRORüúÊÔSMG$SET_KEYPAD_MODEÿž LIB$GETDVIùP úÊX COB$ERRORüúÊàò LIB$GETDVIñÐPËÜ èËÜ &ÐËÜ ïœÛÿžLIB$STOPùP úÊx COB$ERRORþúï˜ÛLIB$STOPÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊôSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¤ÛÿžLIB$S[TOPùP úÊx COB$ERRORþúï ÛáLIB$STOPûÃËh  ý Î  àÂËh ÎËh Ëh Ã%Ëh Ël ÎËl Ël žSMG$LOAD_VIRTUAL_DISPLAYùP úÊ´ COB$ERRORüúÊ0SMG$LOAD_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¬ÛÿžLIB$STOPùP úÊx COB$ERRORþúï¨ÛLIB$STOPÿžËëSMG$CHANGE_VIRTUAL_DISPLAYùP úÊä COB$ERRORüúÊ<SMG$CHANGE_VIRTUAL_DISPLAYÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊLSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï´ÛÿžLIB$STOPùP úÊx COB$ERRORþúï°Û<äL\IB$STOPÿžSMG$LABEL_BORDERùP úʼ COB$ERRORüúÊ”SMG$LABEL_BORDERÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʬSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ï¼ÛÿžLIB$STOPùP úÊx COB$ERRORþúï¸ÛâLIB$STOPþÁï@ÓÿïDÓüËô žSMG$LABEL_BORDERùP úʼ COB$ERRORüúÊSMG$LABEL_BORDERý2ï”Òý&ï”ÒLIB$AB_CVTTP_Uîn2Ëp PùP®7ncÞú1é&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïÌÛÿžõSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORþú]ïÀÛSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïØÛÿžLIB$STOPùP úÊx COB$ERRORþúïÔÛLIB$STOPý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@ËÄònž¾ïàÛöž@˸ònž¾ïðÛÿžMðLIB$ANALYZE_SDESCùP úÊ  COB$ERRORþúïäÛLIB$ANALYZE_SDESCý&ï”ÒLIB$AB_CVTTP_Uún–a‘ï”Òú:0ï”Òü1õþžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïøÛÿžæLIB$STOPùP úÊx COB$ERRORþúïôÛLIB$STOPÿžLIB$ANALYZE^_SDESCùP úÊ  COB$ERRORüúÊ4LIB$ANALYZE_SDESCÿžSMG$CREATE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúÊDSMG$CREATE_VIRTUAL_DISPLAYñÐPËÜ èËÜ &ÐËÜ ïÜÿžLIB$STOPùP úÊx COB$ERRORþúïüÛLIB$STOPþÐï<ÕûPÔï<Õü`µïÂÖúúÊCOB$IOEXCEPTIONú1ïzÖù(¼ªŒï|Öû°ïÖÖüúÊ4SYS$OPENùèP úÊ<COB$IOEXCEPTIONú1Ó ï×÷Óï×ü ±ïüÖñª Áª PŠP±æÿïüÖùPúÊTCOB$IOEXCEPTIONüz‘ïÝÖù  úÊlCOB$IOEXCEPTIONüfµïŽ×à/^·$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€m¿"^_ü>‘ïž×ú 5‘ï„×ü,•ïƒ×ü$±ïò×û ‘ïØú ‘ïè×ü ‘ïç×ù úÊ„COB$IOEXCEPTIONúúÊœ SYS$CONNECTùèP úʤàCOB$IOEXCEPTIONÝ0«€,n0«,n #«™Ô«¼,n n«À2«€žLIB$GET_SYMBOLùP úÊÔ COB$Ðö‚Ç ~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$d2cF²ERRORüúÊpLIB$GET_SYMBOLñÐPËÜ èËÜ &ÐËÜ ïÜÿžLIB$STOPùP úÊx COB$ERRORþúïÜLIB$STOPø( «Ë ž SMG$PUT_CHARSùP úÊøí COB$ERRORüúÊ| SMG$PUT_CHARSüž«€ï¬Öý° ï°ÖýïšÖüúÊœSYS$GETüúÊCOB$IOEXCEPTIONûéPd±ïžÖ÷´ úÊC`OB$IOEXCEPTIONúéPMŠïyÖýDž SMG$PUT_LINEùP úÊ4 COB$ERRORüúʸ SMG$PUT_LINEüž¯ïPÕü1žþSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEù1Ы¼ï Òþµï‚Ùú úÊ4COB$IOEXCEPTIONú1ï:Ùø(XÊ\ï<Ùýï–ÙùЀï„Ùýï—ÙüúÊL SYS$CREATEùèPúÊTCOB$IOEXCEPTIONö1¡ÓïÀÙúúÊlïCOB$IOEXCEPTIONþèP"ú1…Ó ïÀÙ÷7ÓïÀÙü ±ï¼ÙîÊÜÁÊÜPŠP±ï¼ÙùP úÊ„COB$IOEXCEPTIONüE‘ïÙù  úÊœaCOB$IOEXCEPTIONü1µïNÚü ‘ïCÚù úÊ´COB$IOEXCEPTIONúúÊh SYS$CONNECTùèP úÊÌæCOB$IOEXCEPTIONö´«4´«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊäCOB$IOEXCEPTIONûéP3±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùç(ç«4Ë (ÉË ËúÊh SYS$RELEASEùèP úÊÐ ÿCOB$IOEXCEPTIONþÐï@ÕûPÔï@Õý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊäSMG$PASTE_VIRTUAL_DISPLAYþÐïÌÓÿïœÿžSMG$SET_BROADCAST_TRAPPINGbùP úÊP COB$ERRORþúï”SMG$SET_BROADCAST_TRAPPINGñÐPËÜ èËÜ &ÐËÜ ïÜäÿžLIB$STOPùP úÊx COB$ERRORþúï ÜLIB$STOPÿžLIB$SET_SYMBOLùP úÊt COB$ERRORüúÊLIB$SET_SYMBOLÿžLIB$GET_SYMBOLùP úÊÔ COB$ERRORüúÊ<LIB$GET_SYMBOLîÐPËÜ éËÜ 'ÐËô P°PïÜÿž OTS$CVT_TI_LùP úÊ”ø COB$ERRORüúÊL OTS$CVT_TI_LòÕËä @˲òn°T¾®¾¾ÐTËô ÎËô Ëô ‘ï”Òþ14'ú1˜&ï”ÒLIB$AB_CVTTP_Uån6cPÄ6Pž@˱n,Êü &¾&ï”ÒLIB$AB_CVTTP_Uên6cPÄ6Pž@Ëánо&ï”ÒähLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï0Üöž@Ë´ònž¾ï4ÜÿžSMG$CREATE_MENUùP úÊü COB$ERRORþúï,ÜSMG$CREATE_MENUú1&ï”ÒLIB$AB_CVTTP_Uçn6cPÄPž@Ën( ¾«ž«ï¬Öû° ï°ÖýïšÖüúÊœëSYS$GETüúÊCOB$IOEXCEPTIONûéP'±ïžÖ÷´ úÊCOB$IOEXCEPTIONúéPŠïyÖöÔËÜ 1ž MTH$JIANDùP úÊÀ COB$ERRORüúÊÈ MTH$JIANDäÐP«¼ÔËÜ 1ÑËô ÐËô &ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï<ÜÿžúçSMG$CHANGE_VIRTUAL_DISPLAYùP úÊäi COB$ERRORþúï8ÜSMG$CHANGE_VIRTUAL_DISPLAYý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïHÜÿžSMG$ERASE_DISPLAYùP úÊ< COB$ERRORþúïDÜSMG$ERASE_DISPLAYý&ï”ÒLIB$AB_CVTTP_Uén6nPÄÆPž@Ë®ònž¾ïPÜöž@Ë´ònž¾ïTÜÿžSMG$CREATE_MENUùP úÊü COB$ERRORþúïLÜSMG$CREATE_MENUý&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ïhÜý&ï”ÒLIB$AB_CVTTP_Ußn6cPÄ6Pž@˱nž@Ëᮞ¾PоQž`ï Ûý°QïÛÿžSMG$LABEL_BORDERùP úʼ COjB$ERRORþúïdÜSMG$LABEL_BORDERý&ï”ÒLIB$AB_CVTTP_Uæn6cPÄPÞ@ËnѾËh (&ï”ÒLIB$AB_CVTTP_Uán6cPÄPÞ@ËnÂËh ¾ξ¾&ï”ÒLIB$AB_CVTTP_Uén6cPÄÆPž@Ë®ònž¾ï¨þ&àÿï”ÒLIB$AB_CVTTP_Uín6cPÄPÞ@Ë nž¾ï°öÞ@Ënž¾ï´ÿžSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORþúï¤SMG$PASTE_VIRTUAL_DISPLAYùÐËÜ ÐïHÕûPÔïHÕý`žSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈì COB$ERRORüúÊXSMG$UNPASTE_VIRTUAL_DISPLAYÿžSMG$ERASE_DISPLAYùP kúÊ< COB$ERRORüúÊdSMG$ERASE_DISPLAYÿÔþÐïLÕûPÔïLÕý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊlSMG$PASTE_VIRTUAL_DISPLAYúÐË ží SMG$RING_BELLùP úÊ COB$ERRORüúÊ€ SMG$RING_BELLþÐïPÕûPÔïPÕý`žSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʈSMG$UNPASTE_VIRTUAL_DISPLAYúÔË ÐïTÕûPÔïTÕý`žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ Lå COB$ERRORüúÊ”SMG$PASTE_VIRTUAL_DISPLAYÿžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$RElAD_KEYSTROKEÿžSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʨSMG$UNPASTE_VIRTUAL_DISPLAYþÐïXÕûPÔïXÕý`žžþ SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEüž¯ïPÕü1üþžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEüž¯ïTÕû1"ÿ2ï¤ÒüPÑPïdÓúž¯ïdÕø11­2ï¤ÒüPÑPï|Óúž¯ïhÕø112ï¤ÒüPÑPïÓýžSMG$REPAINT_SCREENùP úÊð COB$ERRORüúÊÄSMG$REPAINT_SCREENû1pÿ±ï¤Òÿï”Óú ž¯ïlÕù1mG2ï¤ÒüPÑPïœÓü72ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLú ž¯ï`ÕüÐï\ÕþPýÔï\Õü`2ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óü#¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿï¤Òþ°ï¤Òú«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊHCOB$IOEXCEPTIONûéP\±ï^Ùùç úÊÿþˆ COB$IOEXCEPTIONúéPEŠï9Ùñ(ç«4Ë3ž¯ïTÕü1†ýž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$nPUT_LINEüž¯ïPÕ÷1ý6úÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONú(ËïtÒø(PËSï$Òüž¯ï$Õû1ÝÐï`ÕûPÔï`Õû`&ï_â”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒãPÄzPÀQPž@Ëê÷n-P¾ n)ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊP SMG$PUT_LINEüž¯ïPÕù1iü1ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúʘ SMG$PUT_LINEüž¯ïPÕü1@üžþSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEþ2ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERRORoüúÊÌ SMG$RING_BELLû12ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óü#¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿïõ¤Òüž¯ïTÕû1õû°ï¤Òü«4°ï¤ÒùËž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh SYS$GETùÊï@ÙüúÊ`COB$IOEXCEPTIONûéP±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùï(ç«4ËúÊh SYS$RELEASEùèP úÊÐ ïCOB$IOEXCEPTIONÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEüž¯ïPÕí1ñú1,n Ë$&ï”ÒLIB$AB_CVTTP_Uà… €$ GMENU011.Ao2p }nc.TXT;1Õ‰®É@9N†}ÙqT*S-@?öÇ6¡KáWŽ®üKñ!këwÑaæ:„©ÿíèš¼ö«†lláò;8`E@F5Uôµw=ÙÅfII †É©:c ó QùvŸžah~ÝãÞG»ºÿ®Ì…A/O˜t?ð:žUx(¢Ž}ãö"Šs“¸±è•h$f¯úÔnÂ;MK8ècÜÇ+ž×ƒ¨Èh¯±=¿¯’ò„á+Ws„^ô¸ö²éá•~@˜Þ þWÕo_Í%î³þ¼Y‚)Ý)Úßao_8}/ ”}¿È #Ípñ:¨Lbq ¯k…یוIë³…öÈí>áª)?-Ø"òK! ¨åkjyY€=iONZšë¨«y”z*ÁZ5i‘­%Ä>ŠdàîƒZ†ÿ,Ÿâçs¦”†~5ßËÇtrN„bÄ…Œý«?a_L® ‰Ée« Sm)þP¼¡Ç $$ªg¥XG)ãwìýAùñ¡;RØ£=>«¹^¸†‘9…¡R(kqJ˜äUßíqà«g>*üãUÙËýëi2D¹óáI×Dj_†õ;ÿu& hÏ€ààœ¶Š–$a+ç²q²„Ó+·H.:Ò˧HñA);Z3Ëã3”CVt6'çÿ>»¡bœÕ‹é¥Z…Þzp‰6VR#<«pàz¢ øXÄ$̵ĬùþEÀF’¶ï†õ¬ÄLMj˜sf}hb2_Åv+gÀdW—ÒþJÚr—’Í}ãÍ“!Ö]L[ÑÆ«âI7•!5_Jý\ËŽï¿Ì' ¤ô¸ Ωƒ.úäWÇÒ…]¬’ƒ—‹°“¿:Ÿÿ~ùâË»{d‹W’Ûâk ¸{ü>/\¤ëÀù~¤˜Ñ2àÚ¼ÖËAIGE líÆ#à«ŠBLð_ç‚´lUò€¢6’¯ÈÐj«û8WÌ‹±ëÏ¥+7ŒÜD·wüW#}¼L?¹ÓÄiäL’Ñ­˜_©–`?±d>t¿()"{®ú,`ÔÐù&p~¤ŒØˆAEUº1ôïd¾êQÌv=ýÄ#YS[) äSš& £DÕüãMä¼,~>"tIùÜEbnoN G}JùOâ<¶tæj£c¢¥Jíž­¡–ÇÕÈz¸ç¡=ø‘81I·êÑó!²iV·¥ns¸èâ)ú£¬Ê¥&¬xŠXtÐœzˆçÎËnî%ÅDPe0§ÕZÎõ¸ØIEé°ªSÐÏFÞ°1­#vwQÈ·Tòoô渻bËÊpb›…FB×ãqªñ§rŽ—lî­¨¯¶¸æ›‰hL­õ05ïEñºè €R\ç, çÿWµ´*Íž€~À=fX( ¦†ñõ—¨Zä–« ÕÙ€1£ÊX«— ?0å&µÐSMIaNf²‰©ŒÑàÜ…‚œ¯ C%…õ "Ãþ× mtF8°/ì „þÀ÷†Dä4ò[ª8ù~Èqs‚dò R±Š¾iw—}®Ý>./ÉÐlT4÷zÖpJä00e5áãäV<Ô‡bI–pŒ~ë4/Brâ—L›ä3ýŽHò¡fŒ³`Nà!âÏÉÑ~ÇÚŽšxZ·ôaŽ h•F£…ÉaïÃ’Í}å[rÂ4OøŠ––¶Ë-ðvE¡‰µ,ÏÈlA¡Wy$ÚM±¨i¶Á`­!o“*ÿÏ‚ì"ö0Ýå]ùe…5Wct–Á–>ãž ²µÒ¥JXú yLùÜ„QÓ¼7tBÄ‹³Û”&hë÷v_"Ïj7C”u½±PŽcïú#ïõo²>JLY»áɬÃÈÆŸ V>LÝÁÔ(Î RÐÈm(Mjß³;ý´êd_º\±µ×ŽB»*5 6j4[ÌÀ+ \¢á¾~=S™G2‘[=±.IÉo¾—ç†ð~ÒO!l¹€Œô’™sœ·y®,êÄ€ÿÌ*\]Å.·FùÂ4Êž‚ 2-ðFLhš‚¬wÆÒÏðªH=Q¬¬½ÜJm‹ rœÏFVÓlŽ)UT’á­±Ýnû¯ô`\Ö-Š°÷ø‚‚•-œšÀ½~ý'¤ÕÝ:UÄÕdéOº/ ôþÄaÄü’o„}a³c‚;/äm ‘ü;ÈÖá(ÎGSú pƹöð:4^rín_BÆŒ3ˆP°É‘¡“6¸:ùA»3èM`ü|ð´e5æÙ¢¡,)”ñ¼¬6Ä·=…õŒ#aÍü¾ ´Z©pÑHÎ38ËŠ†]·Ö$Œ?¿ÿFX™øØëEa»G_€Û¿ü#/Þãæ~U}ý‹^ ÃÓ&‡{í¼«~¤ ¯ô€›‡¡—þ­”T<ëN “Ãl–R¹ÚÞ¼«K«ÅX´ ÔO’\g™y“î‡ê{&et¥™ÌÒÉS=¡¼£ÆK,î£÷Âó/£ÔЪǤ¬ 2±?ôŠ¯‡c[Z„¨ø‹Žä¯bx§]Ú nlñ›ü„Z½pP}ð ¥[÷—Yû:ûkÚÖ%!у¨^ž¢©ÞŸ6ôÑ°·’)»õ¦o&Ÿ³êûj,BXÚ.ZÖ"ÙÈÅJuÊ·óƒ›+Q@2>«öù-†!¢§1c*Ýodü”ßÀ¶Á÷óË6œ7Ù ÁC+‹[ØGìG1¿J²Õ·—³è2nJMRÈ¢rÖí+Z玦û¼›ˆ“(ÂA—(É"c[ttX’÷ÍØýúá×lñÇeÕÿ.3T‹ÏŠ¦$ä;{Ý®ˆâ9I@‡Ö~w’Ý÷gó¨ MƒdHfÝ™Ešº£TW3‚Á3ÊzÍSuõ”y‡™ à¢i*V1ö¿ùž÷ÑOyuhQLK/$5å"A1‡kgÇóðþà°‘[àñ–™±µ+ò½Û(#ŠHä Ðzç]-“ãàžá¸#Rf«ÿ?uh{½•sÈeŠ|xÓS/ý]$ÕLk0DfCa)h…ã!û=2¤6ødr#ìíäÃÄAmë´|’Ï:貘CIeJ¿?=ÉèÆòj·ØÿNË7- îᇃQ ¿:¥^ö}ëæG¿à¶ïÑXa´HõCêÍ ¢9oÃKˆ)ÌëúØ«gMªpäQZ\ ~"jí#˜§^³Ë“X‰ÆÑ%žÎ„Qµ_sÃÀKvªšÒ €Qcr³°Öø ™‰\÷ÑàÔYJ7—)è¯$Ó¹Ë^V#T³@`ï„ýR]=@¿á"¬h½/­^2³æel¤‹¸nÀõ‰áÓ'I:ziKÓûýŠäÕÚ•Ðxe@]þS³Q5‘.©N-=ÔŽ‰ÕÊþ×4÷c‚ɨà²=d&28™ÄOK}¾¸qÀ‰€Qm9•ßƒ’B%`ð¦ÝóçwÎT$Q]©NKéLù~¡_|³9+“±Z~'¼){n§ÚcŽúÔŒÃFþ@OqªëçQ»Ø¼@× ˆ{À§ìEs}¼ëNFÏR˜°P*Ãsãô0,Ü£0.*«ìs<ýÜ #¤ð®óxlˆmGàŸ)8\e¦–èbtOéÿj ¨ôüʨb“O°3M3<ã æÔ2@îtVå U1yxë`ìÑ!;þÅF ž·™Bƒíâ· £}ÓΩ´Àƒ(x¾’È‘õrÓ`›–»¡m÷)N.“¹¶ÅÌ`‡§/ÙH7HÈmÑnDûÿï)¹}n®nÄ ·Šq{÷Wu”èÒ`HHˆNÛ (·^xàD›rã3±à~îlPÕ&+Q2\cÅjTòÇiî-6n÷§=Çúr{Þ˵å•\¶ÑÏÍNéí·OèARb:Û¾µeqלhÞ}ÛÑ»ðñjPÚŸžU¾‘úŸ­ügþÌÒòãÆ~K® pžWQsœ/E1Ü—êÄ(YG†‹Y[ÎYVÖ%¹³ Ó-qêˆcκƒÊJ☦¾G› 22U¶Ì™OÔ‚Ìöã¡ ?ðèÞ§ÖS$Ö+“qÃúâá:Ýi"dS&L/>îG"@±ß—ýªÖì{6I˜?ñ‘OñÍ&‡Dh–Á‡ÉzÒi9p@4™æTAÉÓµ9+k•+|™aÎÜÙh-³×åX'JС1|L=9ìB’úKÆuᨔÕB78˜µ,HŸ³—@çâ¸8ƒmyeÁÏ-}½PÊÉ̤üóåO~â0)×í9¡ºêñ„߬‡·Ù†Isixàr©öìrQéåq_¹£‡FjÞ0“¹_E0eV!6>ÇŸ…ÿÔ|+^ÁË… Ü8-¼qÔNÈ `Ö%ëæY1xà‡´~Þë³³ .õv2×c^P¡;ä«@(g’6¡{½”D§Óq€_¶Z"ʃÀ„uÜí]@œ–y!ÓÆ÷ƒ•šÒBd@\¢p^ME½ ö%S$B„–hÒö‚P50p‰LÕV‘úugµ—(["lToâD«çlÚÞn'Øáž3^•k#÷+-Õ˜L0çvZÍó€%zò<õ°Ä9ð{‰×—Q‡»Âú¿¨ëQ À©0{­ œ “²Ð¦%¶óæ)5Â%õ‘þ›n»Ôº—RԘ˚²Ð¯zºaƒŽ;òZî/ô0Æq&*(A ÂÔ#¾¼GÕËC^ Ô¼!?m/(l•…øs猄×)€yá¡HpÞx†àGÜô“ÔÍ€©²{çÖ+¸~f#kû=Þ«Þá ^âÐÇ{ÖW¶×°åØÇlVéùþ†v3ðW,¶  ýÀvõ@\^žm¸n©$`¬ù‡^üœ° ã×­Fq¼äí«ÑÁâGD‹1™å&y.ª¶L’ß߆¹Ãjq»[j*E{¥Di›ðRíØ[ÎΉe75Pzã‡B!pjž'/äÑ"<˜“p¬S$ s´4Ý7ÜOµ0×µts#¬H80åÂþØìö<I!eüuuäF JÑTz’¼õóu6àiøb‰ÏTPcdfÙ(YÍŠNg &KÎϦÚl‰Ô‚à6Í”#‘ê£Ó"xiד¯»ü¬žžiÏ®’?9QÊ1RÎ9¶e¿Š¢œd*ïÏe ŽÉ»ávZ*U26Ãpb‚†ð!Å_Ýs¬¾’ŽÑú£›p÷.›Þ–™_”àÕↈÒe…2O<{Ap#×Á¨µ8wņ|›Ä7¼Åï·ÍcÈO0pÑÓâ3Nl¯l8w&¾d˦ "#:Ô8n­ŠÒâ7RJb®ì/}#‹ÊmòÊœÔრdø<èöìÚ()=n ã&ÌŠ-P0Ôí«w¢˜¾pÇ·Ö©kæ18Gù`4¢@YL°=Lïšó Ö¾D1³nôD䈊wæþt¾ ‹Œ–ê•z=Ìgfý”.Q6,–ú¢FÜëñïpÍÝ¿d[©}KÒIuõñ3HŠhÈopsÔå0o ]øº„Â*у1=,R2-RòƒC€ñ™¦æÿKÆBìf«¤ä(£°6AŸÊý©ì7j7;|ûùÀS‚è–•jÿlc¸Œ´Ë.L—Úƒvé÷Ž¡Äüf Þ;é¨ 7Ý+Ó ·É—õ£1‚ ÷0rÌÍÑOt1Bß’’cñÍø>pä?רü|ðIu¡$Mn ôlœJj“Ï”‡ó'ÊÏ´0“ ý•öº›?%¶òƒÚ×Q:æÿT.aÊÏ•ÝÉœËV#Phn®¶Môn`u}7VѾƘïµ_àaˆ×|qªéT?€XË¥£ ¯ÙYÅ£Öwþ½öe.¹Zc0öêá® ¶~8…»²ž¾K¤ÆÄ&O±Ã}ò9Þ.`„ÙiBTóÙ-åX~›m%Çì¦c)üeô–׎$€­"˜î?C¼O‘Á1Å´í®òi·æâtªáW’³Î¸b,cœˆs'ËwVï/%¦ln`§¯€3ýT¯ãá Yy˜ÆïØr\:¥süò7újïÈkTú:ºa>›Eíz—Ñ øÎ/P‘²­(‰fŒí5lDœ3â¬V¤] ä6ԂÆšQ¥§WàIÓ®ðŽ®&0¢ÄÖŽ7+jÄ1üýÌåOkÕ³îN»lŸ_Q½¢jÃcÀæmóYl6ìë‚úõFƒö‡v`ÆHÜ®ã[‡kFœÇr¥¿ÉzÔÈ\Ž±§–48ã24mîÅQ²&ÉsnêÅKø!Äù½Wl‰É‰ÑmÝœ‰ð퉴¤ˆÚÝ pðå1ÆF8_Öx1›‘„x´PQŽºç—&Îö?p±Ùo?èw¥1 O"­/ãX P—P¬»9SÛÕ§GB®€EŒ¼7p¡&9A[Dd:ûhe¤¨æš3/j]™Æ£&”ÝùèÂñÏêÐ 7){1‘è¾ÆºYa áBßOUúšÓF‘ïÓJ32·•2hS>ºðÂÑÂðÓj³7½×uóô›©ŒøTÖ’×Ńý^VÁ·Vz„—$ɧDìrd™ºe¦LÊ·Ö»²ÕMÓòä ÌÐb¥¡G^Ï`±äcMh±¼¥l¯ë¶(Gíx§»'1bG x_Õÿoͤ’%Òvü:{ÿæ$ëŠ9ðJ83,¼­t?6'M,Å„:mR¯‚Çy¨¸FÛ5´ÐµúÑb×h¹ZøÉ»ê dÍ펢¥¦hbf2«%8ì,qCÑôhu‹sÛÍ,î@~Íì:øÕ!Þî˜|ÉL„&8ŠÂû§-s×G" /žËáûžW`¾B<@—Á|–ÏJõìдµ%ï¡Vwƒ+©üÄóâÝÖý›™Z1 ø.GòO²@âþsCQ 3í/r@md˜õYÞ ¹J;wÆ}œ‡ÏÆháÍÞÀEk꣧Sj€?_ÑzâÓûîõ}Õì²`Mŧvc=ÞÅŽCu(æñHIÇ\.aKšµ”ÉF«QùÓüIì_ŸñUUºäÁýznb%: TZ·Q­ô—ŠKZ°t¢'‡ÍnM!Éç5_cã^[cÞ%ÁC´õ>ºH°$Oãr›Ÿü?ö«ÉÇ¥¾¨/±±'ؼ íÕ7¥lÈc;_·<Ÿµ•ºW=ÿ>pn¬3Ä#q~\ýy“óÅB>Òt¯EùQæû«L 9§rOs¥j¿ ’WAÒ¶6µâ3 3éH¡Æ¼&Q`ÙK{lf¤nœñR{ŒûïÇÒB_ãÑ“¹1œ6;É/l†Ú97Ö;K[Ë›*mì,î7 ^÷–PƒÁëÚŽ!3}‡´R·ÙzòªæR%»vQx`ž×P¼0§†ä‚r{ÓŸí4{üm#…DZ{ˆÒ*™÷ʶM}åê‹/µ+GЃIá,mCÏ[1é”OšŸATC%MÊ;âõ?Ü¢ Ìn€£fGÒ"öD8|&‡PÊrø•ìoÈ}õVY[g§¸W~Rjªg\#ÇíR  G±ðQ6&£¹r }_mÁzŸ„ÊWüë‚òÈò@ªÞ–õ‡z¨6Mß@/‡6žÁÖˆŸDLºÎE3Úl-f²m,y¢>ôŸIWM\4_k¨=ä`m¤)w,?ËÔŸ*E«V&=wóq*ëÎ2XÓ/qÜYª6ø€xé7ñ“Û¬„=JŠ36i,}›¸U’!÷hHÒxôÔLÁ-8&»~Z©|ÿÅ`½Ø »˜}Ä­:Hdè?œ¸Üoš„Sö}ñ‚ºVä[[º1ü]nÂÂj Ü«‰˜¢C^7œ¦qÕ /í« vs¨pje&`&)5LG•3[*RKq0vb bxt;.;&]Kv?SPªVUPŠ RìCNNAE„TM‚ÿle entre quotes : /PARENT='père'/PROFIL = profil-list,Liste des profil@Õ§ÕéR$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€TÌ"opðn6cPÅÆPQ2ï¨ÒãPÄzPÀQPž@Ëê÷n(P¾ËS&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒëPÄzPÀQPž@Ë:øn(¾èúË&ï”ÒLIB$AB_CVTTP_Uðn6cPÅÆPQ2ï¨ÒëPÄ$PÀQPž@Ë òn(#¾Ë/žSMG$KEYCODE_TO_NAMEùP úÊ COB$ERRORüúÊ\SMG$KEYCODE_TO_NAMEò(çË«4°çï^ÙýïZÙüúÊh SYS$PUTùèP úÊxCOB$IOEXCEPTIONöúÊh  SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONþÐïdÕûPÔïdÕý`ž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$PUT_LINEüž¯ïPÕü1£ùžSMG$qREAD_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMG$READ_KEYSTROKEþ2ï¤ÒüPÑPï¨Óü32ï¤ÒüPÑPï¬Óþ#ãþ¢ï¨Óÿï¤Òü ®ï¤Òÿï¤Òþ ï Óÿï¤Òüž¯ïTÕû1†ù2ï¤ÒüPÑPï˜Óýž SMG$RING_BELLùP úÊ COB$ERRORüúÊÌ SMG$RING_BELLû12ÿ°ï¤Òú«4ž«4ïlÙý°ïpÙùÈï@ÙýïZÙüúÊh ûSYS$GETùÊï@ÙüúÊCOB$IOEXCEPTIONûéP±ï^Ù÷ç úʈ COB$IOEXCEPTIONúéPŠï9Ùô(ç«4Ëž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ SMG$PrUT_LINEüž¯ïPÕù1tø{ÐïlÙýn°ïpÙú®ž«4ïlÙý°ïpÙýïZÙüúÊh ÊæSYS$FINDùèP úʨCOB$IOEXCEPTIONû*ÐnïlÙü°®ïpÙüúÊh SYS$DELETEùèP úʨCOB$IOEXCEPTIONöúÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONþÐïhÕûPÔïhÕý`žSMG$ERASE_DISPLAYùP úÊ< COB$ERRORüúÊ0 ÷SMG$ERASE_DISPLAYõ´«4ÔËô ž«4ïlÙý°ïpÙýïZÙùÈPï@ÙüúÊh SYS$FINDùÊPï@Ùþ”ïZÙüúÊÀCOB$IOEXCEPTIONô1Èï@Ùþ”ïZÙüúÊh SYS$GEsTùÊï@ÙüúÊØCOB$IOEXCEPTIONûéP+±ï^Ù÷ç úÊðæCOB$IOEXCEPTIONúéPŠï9Ùï(ç«4Ë7úÊh SYS$RELEASEùèP úÊÐ COB$IOEXCEPTIONÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊ@ SMG$PUT_LINEøÖËô 1mÿžSMG$CHANGE_RENDITIONùP úʘ COB$ERRORüúÊL SMG$CHANGE_RENDITIONÿžâSMG$CHANGE_RENDITIONùP úʘ COB$ERRORüúÊh SMG$CHANGE_RENDITIONÿžSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊ„ SMG$PASTE_VIRTUAL_DISPLAYÿžSMG$READ_KEYSTROKEùP úÊ° COB$ERRORüúÊÐSMGt$READ_KEYSTROKEÿžçSMG$UNPASTE_VIRTUAL_DISPLAYùP úʈ COB$ERRORüúʘ SMG$UNPASTE_VIRTUAL_DISPLAYþÐïlÕûPÔïlÕý`ž SYS$READEFùP úÊ COB$ERRORüúʤ SYS$READEFöÐPËÜ ÑËÜ ï¸ÓÿÌ4ü1ž SYS$CLREFùP úÊ< COB$ERRORüúÊ° Rì SYS$CLREFÿžSMG$GET_BROADCAST_MESSAGEùP úÊl COB$ERRORüúÊÀ SMG$GET_BROADCAST_MESSAGEñÐPËÜ éËÜ vÑËÜ ï0ÓöB2Ëü P°Pï|Üÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊÐ SMG$PUT_LINEÿž SMG$PUT_LINEùP úÊ4 COB$ERRORüúÊô ý SMG$PUT_LINuEÿèþ"žSMG$PASTE_VIRTUAL_DISPLAYùP úÊ  COB$ERRORüúÊ SMG$PASTE_VIRTUAL_DISPLAYþÐÿž SYS$READEFùP úÊ COB$ERRORüúÊ SYS$READEFöÐPËÜ ÑËÜ ï¸ÓöšxËô ´ï¤ÒüúÊ€COB$CALLóÕPúÊ `ž¯ïtÕówÑËà ž¯ïRé(Õù1¡Ö1Žž LIB$DATE_TIMEùP úÊ  COB$ERRORüúÊ, LIB$DATE_TIMEÿž SMG$PUT_CHARSùP úÊø COB$ERRORüúÊ< SMG$PUT_CHARSþÐïpÕûPÔïpÕý`ž SYS$CANTIMùP úÊÀ COB$ERRORüúÊP SYS$CANTIMÿž SYS$SETIMRùP úÊàE COB$ERRORüúÊ\ SYS$SETIvMRþÐïtÕûPÔïtÕý`žSMG$ERASE_PASTEBOARDùP úÊ8 COB$ERRORüúÊÄSMG$ERASE_PASTEBOARDÿžLIB$SET_SYMBOLùP úÊt COB$ERRORüúÊ€ LIB$SET_SYMBOLûÐPèï„ÜúÐPìÖPQÀÈü Pì Q, Qÿ’ QHbQÜ Q|ý#Q¬$QL_&Q8:(Q<©-QÀ/Qý0QT2Qà2Qp3QÍ3PþaQ þfQ þQ þø4Q þZ3Q–ÿQ2þ2Q¼þm(QþÂ'Qþ™QþQþ{QþQþ]QþO Qþ<3QAþ; QwþùQÿQ þ QþÛQ,þ­Qþ„'Qþ’Qÿ Q þÈ'Q+þ#Q+þöQÞþîQþÚQþŠQbÿQ ÿQþíQþKQ:þâ$Qþ QÎÿEQ&ÿQÉÿQþ®Qÿ0Q™ÿ_QZþQIþÑQ þQ$þQ þÕ#QÿQÿ Q/þÿ!Q^ÿQÿQþ˜QþQi ÿ Q þëQ1þ¸Qÿ5QÿQÿ Qƒþf QþÒQþåQ7ÿ QÿQ)þRQÉÿ Q ÿ/Qÿ-QÿQþËQþfQBÿ-QÿQþ[QþöQ+þ'Qþ“QåþƒQsþOQ&ÿ'€ÿQ¾xÿQÿQþðQþÔQGþnQìþŒQmþQŸÿ+QÿQÿQÿ>QhÿQQÿ:Qÿ(Qvþ¶Qàÿ=Q ÿüý ¾€GMENUê¹Íåûõíú–õõõõõ”åâåõ·âÝå÷ðùòðââõÝèââÕâÓÓóåýÁÆÄ Þõýùüöëù¹÷õýðúåõýõ¼ì¨Ø¡ÞüøñøªõûÞò÷º¼ öåàûöÔåõýžåöÔýŸÐþŒØÜçåò„÷ºý€ù¹¼ç‹ ô¼‹Þ¼ùäôåõõãåõàãåùòðõ̧¬­Èãå‹ìåÝâºûßáØþÎàÕåàåàÕy†òååàÕàÕéòïàÕåàÕåàÕòåùÞ·ûÚ®ÝàÕåàÄÿâüàÕùåµåõåýøùýý–öÚåßý€ù¹ÓÕåàûÙóååàÕùÞöøû÷õûåýüùÞÓõûÞÝ÷ùùéõåàÄâüßËåõüý¾ûÅüûÈáûÑìÓÉËÍüÅùùåõòåõ†åý½ôÜá«ß³üýáþüýùû¼¼®„ÝØ‹êååéåûÔåëååÔåõåõðââåðãðãåàèõø–Ñ΀ùõåõþëöôäÄåõýåõåðåýàèõõï–þëåõýöÆÈÌåÎþÚåõåàèõõðåýø–åõþœþÚåùºý¦þëzåüµýååååÔàòåàûõÙåùåùàõúúîöùõýåÔåÔå忽6BPúGMENUQü|Ö<ÙPüüˆÜûé½6$CODE‰ˆÜ$LOCAL©l$PDATA©COB$NAMES_____2©COB$NAMES_____4™ DBM$SSC_B‰¸$LOCAL_1½DRAPEAU_BROADCAST½ PASTEBOARD_ID½ KEYBOARD_ID½ DISPLAY_ID½ MESSAGE_ID½COL_TIMEû½ DELTA_TIMESMG$_NO_MORMSGSMG$M_WRAP_WORD SMG$M_BORDER SMG$M_REVERSE S{MG$M_BOLD SMG$M_BLINK SMG$M_NOTABSSMG$M_CURSOR_OFFSMG$M_CURSOR_ONSMG$M_SCROLL_JUMPSMG$M_RETURN_IMMEDSMG$M_FIXED_FORMATSþSMG$K_VERTICAL SMG$K_LEFT SMG$K_RIGHT SMG$K_TOP SMG$K_TRM_CR SMG$K_TRM_F8SMG$K_TRM_ZERO SMG$K_TRM_ONESMG$K_TRM_EIGHTSMG$K_TRM_SELECTSMG$K_TRM_REMOVE SMG$K_TRM_UPSMG$K_TRM_DOWNSMG$K_TRM_RIGHTþSMG$K_TRM_LEFTSMG$K_TRM_CTRLWSMG$K_TRM_HELPSMG$K_TRM_TIMEOUT SMG$K_TRM_|DOSMG$K_TRM_UPPERCASE_ASMG$K_TRM_UPPERCASE_ZSMG$K_TRM_LOWERCASE_ASMG$K_TRM_LOWERCASE_Z JPI$_USERNAMEDVI$_DEVBUFSIZ SS$_WASSETù SS$_TIMEOUTLIB$K_DELTA_SECONDS SYS$SETEF COB$AB_NAM COB$HANDLER SYS$SETAST COB$ERRORLIB$AB_CVTTP_USMG$SELECT_FROM_MENUSMG$REPAINT_SCREEN SMG$RING_BELL SMG$PUT_LINELIB$AB_CVTPT_USTR$TRIMTôSYS$FAOSMG$CHANGE_RENDITIONSMG$LABEL_BORDERLIB$FIND_FILE_END LIB$FIND}_FILESMG$ERASE_PASTEBOARDLIB$DO_COMMANDSYS$GETCOB$IOEXCEPTIONSYS$PUTSYS$FIND SYS$UPDATESYS$FREE SYS$RELEASEüSMG$GET_PASTING_INFOSMG$REPASTE_VIRTUAL_DISPLAYSMG$DELETE_MENUSMG$UNPASTE_VIRTUAL_DISPLAYSMG$READ_KEYSTROKESMG$MOVE_VIRTUAL_DISPLAYSMG$KEYCODE_TO_NAMESTR$CASE_BLIND_COMPARESMG$CREATE_PASTEBOARDLIB$STOPSMG$CONTROL_MODEMTH$JIORSMG$CREATE_VIRTUAL_KEYBOARDSMG$SET_CURSOR_MODESMG$~SET_KEYPAD_MODE LIB$GETDVISMG$CREATE_VIRTUAL_DISPLAYSMG$LOAD_VIRTUAL_DISPLAYSMG$CHANGE_VIRTUAL_DISPLAYLIB$ANALYZE_SDESCSYS$OPEN÷ SYS$CREATE SYS$CONNECTLIB$GET_SYMBOL SMG$PUT_CHARSSMäG$PASTE_VIRTUAL_DISPLAYSMG$SET_BROADCAST_TRAPPINGLIB$SET_SYMBOL OTS$CVT_TI_LLIB$CVT_TO_INTERNAL_TIMESMG$BEGIN_PASTEBOARD_UPDATESMG$READ_STRINGPÞSMG$END_PASTEBOARD_UPDATE MTH$JIANDSMG$CREATE_MENUSMG$ERASE_DISPLAY SYS$DELETE SYS$READEF SYS$CLREFSMG$GET_BROADCAST_MESSAGECOB$CALL LIB$DATE_TIME SYS$CANTIM SYS$SETIMRþ½ww SYS$DELETE SYS$READEF SYS$CLREFSMG$GET_BROADCAST_MESSAGECOB$CALL LIB$DATE_TIME SYS$CANTIM SYS$SETIMRþ½ww€ODE LIB$GETDVISMG$CREATE_VIRTUAL_DISPLAYSMG$LOAD_VIRTUAL_DISPLAYSMG$CHANGE_VIRTUAL_DISPLAYLIB$ANALYZE_SDESCSYS$OPEN÷ SYS$CREATE SYS$CONNECTLIB$GET_SYMBOL SMG$PUT_CHARSSMG$PASTE_VIRTUAL_DISPLAYSMG$SET_BROADCAST_TRAPPINGLIB$SET_SYMBOL OTS$CVT_TI_LLIB$CVT_TO_INTERNAL_TIMESMG$BEGIN_PASTEBOARD_UPDATESMG$READ_STRINGAÞSMG$END_PASTEBOARD_UPDATE MTH$JIANDSMG$CREATE_MENUSMG$ERASE_DISPLAY SYS$DELETE SYSàùø$ GMENU011.Aî* ã)[AROBAS.LAURENT.TMP_KIT_1]GMENU$LIB.OLB;1€‚À€$READEF SYS$CLREFSMG$GET_BROADCAST_MESSAGECOB$CALL LIB$DATE_TIME SYS$CANTIM SYS$SETIMRþ½ww&*[AROBAS.LAURENT.TMP_KIT_1]GMENU.COM;19+,–8./ 4Iø- ã0 123KÿPWO56€¤^6S”7àÛ*#”89GHˆºJÿ@$ IF P1 .NES. "" THEN UTILISATEUR = F$EDIT(P1,"UPCASE,COLLAPSE")I$ IF "''UTILISATEUR'" .EQS. "" THEN UTILISATEUR = F$GETJPI("","USERNAME")$ GMENU$TIMER = 600 $ BOUCLE:$ ON CONTROL_Y THEN GOTO TEST$ ON ERROR THEN GOTO TESTA$ DEFINE/USER MENU$FICH 'F$PARSE("MENU$FICH","GMENU$DIR:.DAT")'#$ DEFINE/USER SYS$INPUT SYS$COMMAND$ RUN GMENU$SYSTEM:GMENU$ TEST:!'F$VERIFY(0)'#$ IF .NOT. $STATUS THEN GOTO ERREUR0$ IF "''GMENU$FIN'" .NES. "FIN" THEN GOTO BOUCLE$ EXIT $ ERREUR:$ ON CONTROL_Y THEN CONTINUE$ WRITE SYS$OUTPUT F$FAO("!2/")D$ READ/PROMPT="Voulez-vous revenir au menu (O/N) ? " SYS$COMMAND REP%$ REP = F$EDIT(REP,"UPCASE,COLLAPSE")#$ IF REP .EQS. "O" THEN GOTO BOUCLE#$ IF REP .NES. "N" THEN GOTO ERREUR$ EXIT)*[AROBAS.LAURENT.TMP_KIT_1]GMENUHELP.HLB;8+,û€.!/ 4! - ã0 123 KÿPWO"56…¤ S”7 *#”89GHˆºJÿ%ì VAX-11 Librarian V04-00@dz S”à·Í S”¸ 5e$ADDNEXITGENERATEHELPdMODIFYvREMOVEh SET_OUTPUT$SHOWí  ñÆ¥Ô~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$d¯úfð­Àá¹ S”1 HELP GMENU$SYSTEM:GMENU_UTIL2 Cet utilitaire permet de gérer une base de menus.7 Il s'appelle comme une "foreign command" et vous devez' donc définir un symbole pour l'appeler Par exemple :$ $ MYCOM := $GMENU$SYSTEM:GMENU_UTIL; Ensuite pour exécuter une seule commande ou pour spécifier$ des paramètres avec des symboles : $ $ MY_COM ADD MENU/PARENT='PERE' ...# Ou en interactif (sans symboles) : $ MY_COM GMENU> ... GMENU> EXIT( Tapez HELP pour o btenir une assistance.ww­ u¾ S”1 ADD ADD mot-clé 8 Cette commande permet d'ajouter un élément dans la base' suivant le mot-clé que vous spécifiez.2 PROFIL ADD PROFIL profil-name; Cette commande permet d'ajouter un profil dans la base en 1 spécifiant éventuellement un commentaire (/TEXT) 3 Paramètres profil-name; C'est le nom du profil ajouté dans la base : une chaîne de4 caractères alphanumériques de 12 caractères maximum 3 Qualifiers/TEX T /TEXT = commentaire7 Permet de spécifier un commentaire au profil. Si votre> commentaire contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). 3 Exemple4 GMENU> ADD PROFIL DVLP/TEXT="Profil de développeur"1 Ajoute le profil de nom DVLP et de commentaire : Profil de développeur2 USER ( ADD USER username /PROFIL = profil-list< Cette commande permet d'ajouter un utilisateur dans la base4 en spécifiant ses profils (le qualifier /PROFIL est obligatoire). 3 Paramètres username9 Chaîne de caractères de 12 caractères maximum spécifiant le nom de l'utilisateur 3 Qualifiers/PROFIL /PROFIL = profil-list7 Liste des profils auxquels a droit l'utilisateur. Tous: les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses. Ce qualifier est obligatoire. 3 Exemple+ GMENU> ADD USER ETUDES/PROFIL=(DVLP,USER1)A Cette commande permet d'ajouter l'utilisateur de nom ETUDES avecD les profils DVLP et USER1 qui doivent préalablement avoir été créés par la commande ADD PROFIL2 MENU ADD MENU/TEXT=texteE Permet d'ajouter un menu dans la base de libellé texte. Le qualifier /TEXT est obligatoire.? Le père du menu est soit la valeur spécifiée par /PARENT, soitD le dernier me nu créé, soit la racine si aucun menu n'a précédemment> été créé. Vous ne pouvez pas créer un menu fils d'un père qui: n'existe pas ou qui a un fichier de commande (voir /FILE)6 L'ID du menu est affiché à l'écran après sa création. 3 Qualifiers/TEXT /TEXT = texteA Permet de spécifier un libellé d'au plus 35 caractères. Si votre8 texte contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). Ce qualifier est obligatoire./SYMBOL /SYMBOL = symbolC Demande au système de stocker l'ID du menu créé dans le symbole : 4 'symbol'. Ce qualifier est incompatible avec /FILE./FILE /FILE = file-nameB Permet de spécifier une procédure de commande lancée par ce menu. Le type par défaut est .COM.) Un tel menu ne pourra pas avoir de fils., Ce qualifier est incompatible avec /SYMBOL. /PARAMETERS /PARAMETERS = param-strA Ce qualifier permet de spécifier les paramètres avec lesq ’!0ž$ GMENU011.Aû€ ã)[AROBAS.LAURENT.TMP_KIT_1]GMENUHELP.HLB;8!t"uels laD procédure de commande sera appelée. Les paramètres sont séparés parB des blancs, mais il n'est pas possible de passer des symboles qui8 seraient évalués au moment du lancement de la commande., Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""4 Ce qualifier n'est permis que si /FILE est présent./PROFIL /PROFIL = profil-list- Liste des profils qui donnent accès au menu.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses./PARENT /PARENT = IdA Permet de spécifier le père du menu. Id doit être l'Id d'un menu> existant dans la base. Si vous appelez l'utilitaire avec une  commande du type :  $ MY_COM ADD MENU...: Vous pouvez spécifier l'id par un symbole entre quotes :  /PARENT='pere' 3 Exemple@ GMENU> ADD PROFIL/PARENT=0/TEXT="Essai"/SYMBOL=TOTO/PROFIL=DVLP Menu créé - ID : 000000000005 GEMNU> EXIT $ show symbol TOTO TOTO = "000000000005"ww­€ à S”1 MODIFY MODIFY mot-clé ...5 Permet de modifier un élément existant dans la base.2 PROFIL& MODIFY PROFIL profil [nouveau_profil]3 Permet de modifier ou de changer de nom un profil.D Si vous spécifier le deuxième paramètre, le profil changera de nom.A Il vous faut utiliser cette commande lorsque des utilisateurs ouA des menus font référence au profil et que vous désirez conserver ces liens. 3 Paramètres  Profil' Nom d'un profil existant dans la base. Nouveau_profilA Nouveau nom du profil. ce nom ne doit pas être celui d'un profil existant. 3 Qualifiers/TEXT /TEXT = commentaire? Permet de spécifier un nouveau commentaire au profil. Si votre> commentaire contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). 3 Exemple= GMENU> MODIFY PROFIL DVLP DVLP1/TEXT="Profil de développeur"< Change le profil DVLP en profil DVLP1 et met à ce profil un nouveau commentaire.2 USER MODIFY USER username; Permet de changer avec le qualifier /PROFIL le profil d'un utilisateur. 3 Paramètres Username) Nom d'utilisateur existant dans la base. 3 Qualifiers/PROFIL /PROFIL = ([-],profil,...)C Permet d'ajouter des profils à l'utilisateur ou d'en enlever. Dans' ce cas, la liste doit commencer par -.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses. 3 Exemple* GMENU> MODIFY USER ETUDES/PROFIL=(-,DVLP)/ Enlève le profil DVLP de l'utilisateur ETUDES.2 MENU MODIFY MENU/ID=id ... 3 Qualifiers/TEXT /TEXT = texteA Permet de spécifier un nouveau libellé d'au plus 35 caractères. A Si votre texte contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes (")./IDENTIFICATION /IDENTIFICATION = Id5 Permet de spécifier L'ID du menu. Id doit être l'Id D d'un menu existant dans la base. Si vous appelez l'utilitaire avec  une commande du type :  $ MY_COM MODIFY MENU...: Vous pouvez spécifier l'id par un symbole entre quotes :  /IDENTIFICATION='ID'/FILE /FILE = file-nameC Permet de spécifier une nouvelle procédure de commande lancée par ce menu. Le type par défaut est .COM.) Un tel menu ne pourra pas avoir de fils. /PARAMETERS /PARAMETERS = param-strA Ce qualifier permet de spécifier les paramètres avec lesquels laD procédure de commande sera appelée. Les paramètres sont séparés parB des blancs, mais il n'est pas possible de passer des symboles qui8 seraient évalués au moment du lancement de la commande., Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""C Ce qualifier n'est permis que si /FILE est présent ou si le menu a déjà un fichier de commande./PROFIL /PROFIL = ([-],profil,...)D Permet d'ajouter des profils au menu ou d'en enlever. Dans ce cas,  la liste doit commencer par -.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses./PARENT /PARENT = Id@ Permet de spécifier le nouveau père du menu. Id doit être l'Id D d'un menu existant dans la base. Si vous appelez l'utilitaire avec  une commande du type :  $ MY_COM ADD MENU...: Vous pouvez spécifier l'id par un symbole entre quotes :  /PARENT='pere' 3 Exemple+ GMENU> MODIFY MENU/ID=4/TEXT="autre texte" Change le texte du menu d'id 4.ww­$É S”1 REMOVE REMOVE mot-clé élément* Permet de détruire un élément de la base.2 PROFIL REMOVE PROFIL profi l Permet de détuire un profil.@ Le système met à jour en conséquence tous les éléments qui font référence à ce profil.2 USER REMOVE PROFIL username" Permet de détuire un utilisateur.2 MENU REMOVE PROFIL id% Permet de détuire le menu d'id 'id'.ww­$É S”1 SHOW SHOW mot-clé ...< Permet de visualiser sélectivement des éléments de la base.2 PROFIL SHOW PROFIL [chaîne]< Visualise dans l'output courant (voir SET_OUTPUT) tous les C profils dont le nom commence par 'chaîne' avec leurs commentaires.< Si ce paramètre est omis, tous les profils sont visualisés.2 USER SHOW USER [chaîne]C Permet de visualiser dans l'output courant (voir SET_OUTPUT) tous C les utilisateurs dont le nom commence par chaîne. Si ce paramètre 1 est omis, tous les utilisateurs sont visualisés. 3 Qualifiers/PROFIL /PROFIL=profilC Permet de visualiser tous les utilisateurs qui possèdent le profil spécifié. 3 Exemple GMENU> SHOW USER T/PROFIL=DVLP@ Visualise tous les utilisateurs qui possèdent le profil DVLP et dont le nom commence par T.2 MENU 3 Qualifiers/TEXT /TEXT = sous-chaîne.= Permet de sélectionner tous les menus dont le texte contient la sous-chaîne spécifiée./IDENTIFICATION /IDENTIFICATION = id, Permet de visualiser le menu d'id spécifié./FILE /FILE = fichierE Permet de visualiser les menus qui appellent la procédure spécifiée.% Les wildcards * et % sont autorisés.' ATTENTION : La recherche est textuelleD Par exemple /FILE = TOTO.* ne sélectionnera pas le menu ayant comme& fichier TOTO (Le point ne matche pas)/PROFIL /PROFIL=profil< Permet de visualiser tous les menus qui possèdent le profil spécifié./DEPTH /DEPTH = nombre: Permet de spécifier la profondeur à laquelle SHOW MENU va@ visualiser l'arborescence. Le nombre spécifié doit être compris entre 1 et 20.= Ce qualifier n'a aucun effet si /IDENTIFICATION est présent./PARENT /PARENT = idA Permet de visualiser tous les menus ayant pour ascendant le menu d'id spécifié. 3 Exemples" GMENU> SHOW MENU/PARENT=2/DEPTH=28 Visualise les fils et les petits fils du menu d'id : 2. GMENU> SHOW MENU/TEXT=edition> Visualise tous les menus qui contiennent la chaîne "edition".2 FILES SHOW FILESJ Affiche à l'écran (et non dans l'output défini par SET OUTPUT) le fichierC des menus sur lequel l'utilitaire travaille et le fichier d'outputww­@1Ì S” 1 GENERATE GENERATE= Permet de générer un fichier de commande qui, lancé sous DCL8 vous permettra de créer dans un autre fichier de menus 0 les éléments du type que vous avez sélectionné. 2 Qualifiers/SELECT /SELECT = (mot-clé,...)F Vous permet de sélectionner le type d'élément pour lequel vous voulez; générer les commandes ADD ... dans le fichier de commande.B Si vous ne spécifiez qu'un seul mot-clé, vous pouvez omettre les parenthèses.4 o - ALL : Sélectionne tous les éléments (défaut)$ o - MENU : Sélectionne les menus.+ o - USER : Sélectionne les utilisateurs.& o - PROFIL : Sélectionne les profils./OUTPUT /OUTPUT = fichierG Vous permet de donner le nom du fichier de commande dans lequel seront écrites les commandes DCL.. Par défaut, ce fichier est GMENU_GENERATE.COM 2 Exemple% GMENU> GENERATE/SELECT=(USER,PROFIL)E Cette commande va générer un fichier GMENU_GENERATE.COM (défaut) quiD contiendra à÷þ)µ$ GMENU011.Aû€ ã)[AROBAS.LAURENT.TMP_KIT_1]GMENUHELP.HLB;8!ºžtoutes les commandes de création des utilisateurs et des profils contenus dans la base.ww­à·Í S” 1 SET_OUTPUT SET OUTPUT FileA Permet de rediriger les données affichées par les commandes SHOW dans un fichier. 2 Paramètre File4 Nom de fichier ou d'écran (par exemple SYS$OUTPUT:)ww­à·Í S”1 EXIT EXIT ou CTRL Z ou F10+ Permet de quitter une session interactive.ww.*[AROBAS.LAURENT.TMP_KIT_1]GMENU_ANALYZE.COM;31+,'˜./ 4P(- ã0 123KÿPWO56àÑEZ”7À¤#*#”89GHˆºJÿP$!==============================================================================$!$! LQ - 14/03/91$!)$! Procédure d'analyse du fichier MENU...$!P$!============================================================================== $ goto DEBUT$ INSTRUCTION:$ type sys$input:ECette procédure vérifie le format, l'intégrité du fichier de menus...KToutefois, si cette procédure ne parvient pas à réparer les erreurs qu'elleMa détectées, vous devez tenter manuellement un CONVERT du fichier de menus en5utilisant le MENU$FICH.FDL contenu dans GMENU$SYSTEM.NAprès ces vérifications, la procédure vous donne le nombre d'éléments contenus<dans la base et vous propose éventuellement une compression.MCette compression concerne seulement des enregistrements inutilisés placés enNfin de fichier. Ceci peut s'avérer utile après un grand nombre de suppressions de menus.5Cette procédure ne fait pas l'optimisation du fichier$ return$ DEBUT:$ on error then goto FIN$ on controlY then goto FIN$ say :== write sys$output$ type/page nl:$ premier_present = 0$ menu_libre_en_fin = 0$ RMS_E_RNF = %X182B2 $ user = 0 $ profil = 0 $ menu = 0%$ dernier_menu_libre = "000000000001"$ bad_enregistrement = 0$ menu_libre = 0$ premier_libre = ""$ normal_premier_libre = ""0$ file = f$parse("MENU$FICH","GMENU$DIR:*.DAT;")4$ say f$fao("ANALYSE DU FICHIER MENUS : !AS!/",file)$ gosub INSTRUCTION7$ read/prompt="Voulez-vous continuer (RETURN/F10) ? " -" /end_of_file=FIN sys$command rep$ type/page nl:4$ say f$fao("ANALYSE DU FICHIER MENUS : !AS!/",file)$!$! Analyse du format RMS$!6$ if f$file_attributes(file,"ORG") .eqs. "IDX" .and. -/ f$file_attributes(file,"NOK") .eq. 2 .and. -3 f$file_attributes(file,"RFM") .eqs. "FIX" .and. -, f$file_attributes(file,"MRS") .eq. 180 - then goto LECTURE,$ say "Le fichier a un format incorrect..." $ READ0:<$ read/prompt="Voulez-vous tenter une réparation (O/N) ? " -" /end_of_file=FIN sys$command rep%$ rep = f$edit(rep,"upcase,collapse") $ if rep .eqs. "N" then goto FIN"$ if rep .nes. "O" then goto READ0H$ convert 'file' 'file'/FDL=gmenu$system:menu$fich.fdl/pad=%X20/truncate$! $ LECTURE:$ Open/read/share f 'file'$!7$! Lecture du premier libre (Premier enregistrement)...$!$ Read/end=FICH_VIDE f ligne$$ if f$extract(0,1,ligne) .eqs. "0" $ then($ premier_libre = f$extract(60,4,ligne)$ premier_present = 1$ Read/end=NOMORE f ligne$ endif$!%$! Lecture des éléments de la base...$! $ BOUCLE:$ type = f$extract(0,1,ligne)$ cle2 = f$extract(13,12,ligne)$ if type .eqs. "1" $ then menu = menu + 1B$ if cle2 .gts. dernier_menu_libre then dernier_menu_libre = cle2 $ goto CONT1$ endif$ if type .eqs. "2" $ then user = user + 1 $ goto CONT1$ endif$ if type .eqs. "3" $ then profil = profil + 1 $ goto CONT1$ endif$ if type .eqs. "5" "$ then menu_libre = menu_libre + 1 $ goto CONT1$ endif-$ bad_enregistrement = bad_enregistrement + 1$ CONT1:$ Read/end=NOMORE f ligne $ goto BOUCLE $ NOMORE:3$ cle_compress = f$fao("5!12AS",dernier_menu_libre)?$ read/key='cle_compress'/error=NOMORE1/index=0/match=gt f temp$ menu_libre_en_fin = 1 $ NOMORE1:?$ say f$fao("Nombre de profils : !SL",profil)=$ say f$fao("Nombre d'utilisateurs : !SL",user)=$ say f$fao("Nombre de menus : !SL",menu)E$ say f$fao("Nombre d'enregistrements inutilisés : !SL!/",menu_libre)$ close/nolog f$!%$! On vérifie le format du fichier...$!$! - Format correct...4$ normal_premier_libre[0,31] = menu + menu_libre + 1$ if premier_present .and. -2 premier_libre .eqs. normal_premier_libre .and. - bad_enregistrement .eq. 0 A$ then say f$fao("La vérification n'a trouvé aucune erreur...!/")$ goto COMPRESS$ endif8$ say f$fao("La vérification a trouvé des erreurs...!/")$!/$! - Premier enregistrement manquant ou faux...$ if premier_present .and. -: premier_libre .eqs. normal_premier_libre then goto CONT2.$ say "Erreur d'intégrité dans le fichier..." $ READ1:<$ read/prompt="Voulez-vous tenter une réparation (O/N) ? " -" /end_of_file=FIN sys$command rep%$ rep = f$edit(rep,"upcase,collapse") $ if rep .eqs. "N" then goto FIN"$ if rep .nes. "O" then goto READ1$$ open/read/write/error=FIN f 'file'<$ ligne = f$fao("!25*0!35* !4AS!116* ",normal_premier_libre)$ set nocontrol=Y$ if premier_present9$ then read/key='f$fao("!13*0")'/index=0/error=FIN f temp!$ write/update/error=FIN f ligne$ else$ write/error=FIN f ligne$ endif($ say f$fao("réparation effectuée...!/")$ close/nolog f$ set control=Y&$ premier_libre = normal_premier_libre$!($! - Enregistrements de format 'bizarre'$ CONT2:1$ if bad_enregistrement .eq. 0 then goto COMPRESSA$ say f$fao("Il y a !SL enregistrement!%S de type inconnu dans"+-' " le fichier", bad_enregistrement)$ READ2:($ read/end_of_file=FIN sys$command rep -B /prompt="''f$fao("!0SLVoulez-vous le!%S supprimer (O/N) ? ", - bad_enregistrement)'"%$ rep = f$edit(rep,"upcase,collapse")%$ if rep .eqs. "N" then goto COMPRESS"$ if rep .nes. "O" then goto READ2$ bad_enregistrement = 0$$ open/read/write/error=FIN f 'file' $ BOUCLE1:%$ read/end_of_file=FINBOUCLE1 f ligne$ type = f$extract(0,1,ligne)9$ if f$locate("''type'","01235") .ne. 5 then goto BOUCLE1 $ BOUCLE2::$ read/delete/key='f$fao("!13AS",f$extract(0,13,ligne))' - /error=BOUCLE1 f temp-$ bad_enregistrement = bad_enregistrement + 1$ goto BOUCLE2 $ FINBOUCLE1:C$ say f$fao("!SL enregistrement!%S supprimé!%S",bad_enregistrement)$ close/nolog f $ COMPRESS:*$ if .not. menu_libre_en_fin then goto FIN$ READ3:H$ read/prompt="Voulez-vous comprimer le menu (O/N) ? "/end_of_file=FIN - sys$command rep%$ rep = f$edit(rep,"upcase,collapse") $ if rep .eqs. "N" then goto FIN"$ if rep .nes. "O" then goto READ3$$ open/read/write/error=FIN f 'file'$ set nocontrol=Y$ bad_enregistrement = 0 $ BOUCLE3:I$ read/delete/key='cle_compress'/error=FINBOUCLE3/index=0/match=gt f temp-$ bad_enregistrement = bad_enregistrement + 1$ goto BOUCLE3 $ FINBOUCLE3:@$ if f$integer($status) .ne. RMS_E_RNF then goto ERREUR_COMPRESS<$ normal_premier_libre[0,31] = f$integer(dernier_menu_libre)<$ ligne = f$fao("!25*0!35* !4AS!116* ",normal_premier_libre)@$ read/key='f$fao("!13*0")'/index=0/error=ERREUR_COMPRESS f temp,$ write/update/error=ERREUR_COMPRESS f ligneC$ say f$fao("!SL enregistrement!%S supprimé!%S",bad_enregistrement) $ goto FIN$ ERREUR_COMPRESS:%$ say "Erreur dans la compression..."B$ say "Relancez la procédure pour vérifier l'intégrité du fichier"$ FIN:$ close/nolog f$ set control=Y1$ read/prompt="Tapez ..." sys$command rep$ exit $ FICH_VIDE:?$ say f$fao("le fichier !AS est vide : DÉTRUISEZ-LE !!!/",file) $ goto FIN,*[AROBAS.LAURENT.TMP_KIT_1]GMENU_REORG.COM;11+,´"./ 4@¼- ã0 123KÿPWO56 >ýAœ”7@¿)*#”89GHˆºJÿ@$!==============================================================$!1$! Réorganisation de la base de menus (MENU$FICH)$!$! LQ - @robas$!@$!==============================================================$!%$ set symbol/scope=(nolocal,noglobal)$ On error then goto fin$ On control_Y then goto fin/$ fich1 = f$parse("MENU$FICH","GMENU$DIR:.DAT"),$ fich1 = fich1 - f$parse(fich1,,,"version")$ fich2 = f$search(fich1)$$ if fich2 .eqs. "" then goto nofich'$ tmp = f$parse("menu_reorg.tmp",fic  'Û$ GMENU011.A´" ã,[AROBAS.LAURENT.TMP_KIT_1]GMENU_REORG.COM;11@`jh1)'$ write sys$output "Phase d'analyse...";$ analyze/rms/fdl/output=gmenu$system:menu$fich.fdl 'fich1',$ write sys$output "Phase d'optimisation...">$ edit/fdl/nointeractive/analysis=gmenu$system:menu$fich.fdl - gmenu$system:menu$fich.fdl+$ write sys$output "Phase de conversion..."6$ convert/fdl=gmenu$system:menu$fich.fdl 'fich1' 'tmp'$ rename 'tmp' 'fich1'$ purge/nolog 'fich1'0$ write sys$output "Réorganisation effectuée..." $ goto fin $ nofich:5$ write sys$output "Impossible de trouver : ''fich1'"$ fin:>$ if f$search("gmenu$system:menu$fich.fdl;-1") .nes. "" then -( purge/nolog gmenu$system:menu$fich.fdl/$ read/prompt="Tapez RETURN : " sys$command rep$ exit2*[AROBAS.LAURENT.TMP_KIT_1]GMENU_SCREEN_HELP.DAT;12+,q ß. / 4ÿ ÿ- ã0 123KÿPWO 56€ÚÉŒÞX”7ç2*#”89GHˆºJÿÿNÿFONCTIONS GENERALES ABANDON : Touche F8 SE DEPLACER DANS LES MENUS : Utiliser les flèches ou tapez une lettre qui vous permetÿtra de vous déplacer sur les options qui commencent par cette lettre CHOISIR UNE OPTION : Positionnez-vous sur l'option et tapez RETURN ou VALID. ÿ EFFACER UNE FENETRE : Tapez la touche EFF. TEXTE (Utile lorsqu'il n'a plus de menus disponibles). Le menu principal ne peut pas être effacé. ALLER D'UNE FENETRE A L'AUTRE : Tapez le numéro de fenêtre (Le ÿnuméro de fenêtre apparaît entre parenthèses sur le cadre de la fenêtre). DEPLACER UNE FENETRE : Tapez SELECT. puis déplacez la fenêtre avec les flèches puis retapez SELECT. pour terminer. RAFRAIÿCHIR L'ECRAN : Tapez simultanément CTRL et W. FONCTIONS SUR LES TOUCHES #  ÿ DEFINIR UNE TOUCHE : Sur l'option désirée tapez EXECUTER, RETURN, touche VOIR LES TOUCHES : EXECUTER, AIDE - EXECUTER UNE TOUCHE : EXECUTER touche EFFACER UNE TOUCHE : EXECUTER, EFF. TEXTE, touchÿe Tapez une touche pour continuer...ÿÿÿÿÿÿÿ**[AROBAS.LAURENT.TMP_KIT_1]GMENU_UTIL.COM;1+, |./ 4$^- ã0 123KÿPWO56 vÍÛL”7À<*#”89GHˆºJÿ$$ GMENU := $ GMENU$SYSTEM:GMENU_UTIL#$ DEFINE/USER SYS$INPUT SYS$COMMAND$ GMENU$ EXIT+*[AROBAS.LAURENT.TMP_KIT_1]KITINSTAL.COM;100+,./ 4Pž- ã0 123KÿPWO56 ¦Œk¶”7@)B*#”89GHˆºJÿ'$! Procedure d'installation de GMENU...$!$ on warning then exit $status*$ on control_y then VMI$CALLBACK CONTROL_Y$ gmenu_ver = f$verify(p2)#$ if p1 .eqs. "HELP" then goto HELP,$ if p1 .eqs. "VMI$_IVP" then goto gmenu_ivp4$ if p1 .eqs. "VMI$_INSTALL" then goto GMENU_INSTALL$ exit VMI$_UNSUPPORTED$!$ GMENU_INSTALL: $ goodmorning= 0 ! temoin 'joke'$ VMI$CALLBACK SET PURGE ASK$ VMI$CALLBACK SET IVP ASK0$ vms_version= F$ELEMENT (1,",",VMI$VMS_VERSION)$ if vms_version .lt. 053$ then type sys$input/ GMENU necessite au moins la version 5.3 de VMS$ exit VMI$_FAILURE$ endif=$ if f$privilege ("BYPASS") .or. f$privilege("SYSPRV") then - goto FILEPRIV_OK$ type sys$input:D Vous n'avez pas les droits systeme. Cette installation peut echouer< si vous voulez copier les fichiers dans un endroit protege.$!$ REP1:$ VMI$CALLBACK ASK gmenu$rep -1 "Voulez-vous neamnoins continuer (O/[N])" N S,N($ if .not.$status then exit VMI$_FAILURE$ gosub OUINON$ if err then goto REP1%$ if .not. oui then exit VMI$_FAILURE$ FILEPRIV_OK:'$ VMI$CALLBACK MESSAGE I ENCASDEDOUTE -7 "En cas de doute, tapez '?' en réponse aux questions"$ DESTINATION:$ VMI$CALLBACK ASK gmenu$dir -? "Repertoire d'installation du produit" "SYS$COMMON:[GMENU]" -+ S,N "@VMI$KWD:kitinstal help destination"$ on error then exit $status0$ VMI$CALLBACK CREATE_DIRECTORY USER 'gmenu$dir'$ st = $status$ on warning then exit $status#$ if .not. st then goto DESTINATION$ SOURCEFILES:$ gmenu_source$dir == ""$ VMI$CALLBACK ASK gmenu$rep -8 "Voulez-vous les fichiers sources COBOL (O/N)" O S,N -' "@VMI$KWD:kitinstal help sourcefiles")$ if .not. $status then exit VMI$_FAILURE$ gosub OUINON$ if err then goto SOURCEFILES!$ if .not. oui then goto GAGTIMER $ DESTSOURCE:%$ VMI$CALLBACK ASK gmenu_source$dir -8 "ReperÐ E0èr~ GMENU.BCKØ7X*[AROBAS.LAURENT]GMENU011.A;1$$d >.toire des sources" "SYS$COMMON:[GMENU_SOURCE]" -* S,N "@VMI$KWD:kitinstal help destsource"$ on error then exit $status7$ VMI$CALLBACK CREATE_DIRECTORY USERP »ÅÒß$ GMENU011.A ã+[AROBAS.LAURENT.TMP_KIT_1]KITINSTAL.COM;100P x 'gmenu_source$dir'$ st = $status$ on warning then exit $status"$ if .not. st then goto DESTSOURCE $ GAGTIMER:$ VMI$CALLBACK ASK gmenu$rep -< "Voulez-vous installer GMENU avec son TIMER (O/N)" O S,N -$ "@VMI$KWD:kitinstal help gagtimer")$ if .not. $status then exit VMI$_FAILURE$ gosub OUINON$ if err then goto GAGTIMER$ gmenu$gag = ""&$ if oui then gmenu$gag = ",gmenu$gag"$!$! OK, on y va...$!H$ VMI$CALLBACK MESSAGE I BOIRECAFE "Toutes les questions ont ete posees"#$ on severe_error then exit $status6$ VMI$CALLBACK MESSAGE I LINKING "Edition de liens..."6$ open/write gmenu$tmp_file vmi$kwd:gmenu_makefile.com#$ if .not. $status then goto ERR_WR%$ write gmenu$tmp_file/error=ERR_WR -L"$ link/exe=vmi$kwd:gmenu_util vmi$kwd:gmenu$lib/library/include=gmenu_util"%$ write gmenu$tmp_file/error=ERR_WR -P"$ link/exe=vmi$kwd:gmenu vmi$kwd:gmenu$lib/library/include=(gmenu''gmenu$gag')"$ close gmenu$tmp_file$ @vmi$kwd:gmenu_makefile($ if .not.$status then exit VMI$_FAILURE"$ VMI$CALLBACK MESSAGE I MOVTARG -9 "les fichiers sont deplaces vers leur repertoire cible"@$ VMI$CALLBACK PROVIDE_IMAGE gmenu$filexe gmenu.exe 'gmenu$dir'D$ VMI$CALLBACK PROVIDE_IMAGE gmenu$filexe gmenu_util.exe 'gmenu$dir'>$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu.com 'gmenu$dir'A$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenuhelp.hlb 'gmenu$dir'D$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_analyze.com 'gmenu$dir'B$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_reorg.com 'gmenu$dir'H$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_screen_help.dat 'gmenu$dir'B$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_util.com 'gmenu$dir'D$ VMI$CALLBACK PROVIDE_FILE gmenu$file menu_gestion.com 'gmenu$dir'@$ VMI$CALLBACK PROVIDE_FILE gmenu$file menu$fich.fdl 'gmenu$dir'I$ VMI$CALLBACK PROVIDE_FILE gmenu$file doc_mise_en_oeuvre.txt 'gmenu$dir'B$ VMI$CALLBACK PROVIDE_FILE gmenu$file doc_touches.txt 'gmenu$dir'F$ VMI$CALLBACK PROVIDE_FILE gmenu$file doc_utilisateur.txt 'gmenu$dir'$ type sys$input:@ Des fichiers de documentation ont ete places dans le repertoire d'installation : DOC_MISE_EN_OEUVRE.TXT DOC_UTILISATEUR.TXT DOC_TOUCHES.TXT$!5$ open/write gmenu$tmp_file vmi$kwd:gmenu$startup.com#$ if .not. $status then goto ERR_WR%$ write gmenu$tmp_file/error=ERR_WR -3 "$ define/system/nolog gmenu$system ''gmenu$dir'"$ close gmenu$tmp_file.$ VMI$CALLBACK PROVIDE_FILE gmenu$startupfil -* gmenu$startup.com vmi$root:[sys$startup]-$ VMI$CALLBACK SECURE_FILE gmenu$startupfil - [1,4] s:rewd,o:Re,g:re,w,$ VMI$CALLBACK SET STARTUP gmenu$startup.com$!$ type sys$input@ Pour permettre le bon fonctionnement de GMENU sur votre machine7 pensez a ajouter dans le systartup la ligne suivante: @sys$startup:GMENU$STARTUP$!F$ VMI$CALLBACK PROVIDE_FILE GMENU$IVP gmenu$ivp.com VMI$ROOT:[SYSTEST]"$ VMI$CALLBACK MESSAGE I IVPFILE -9 "Le fichier gmenu$ivp.com est dans sys$sysroot:[systest]$!$! information pour le Sylogin$!$ type sys$input? Pour definir les commandes gmenu, ajoutez, par exemple dans le SYLOGIN.COM:2$ write sys$output "$ gmenu:== @''gmenu$dir'gmenu";$ write sys$output "$ menu_util:== @''gmenu$dir'gmenu_util"$ write sys$output ""$!5$ if gmenu_source$dir .eqs. "" then exit VMI$_SUCCESS$! Restauration des sources... $ VMI$CALLBACK RESTORE_SAVESET B"$ VMI$CALLBACK MESSAGE I MOVTARG -@ "les fichiers source sont deplaces vers leur repertoire cible";$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$add_menu.cob - 'gmenu_source$dir'=$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$add_profil.cob - 'gmenu_source$dir';$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$add_user.cob - 'gmenu_source$dir'7$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$exit.cob - 'gmenu_source$dir'6$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$gag.cob - 'gmenu_source$dir';$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$generate.cob - 'gmenu_source$dir'7$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$help.cob - 'gmenu_source$dir'6$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$lib.olb - 'gmenu_source$dir'>$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$modify_menu.cob - 'gmenu_source$dir'@$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$modify_profil.cob - 'gmenu_source$dir'>$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$modify_user.cob - 'gmenu_source$dir'9$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$remove.cob - 'gmenu_source$dir'=$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$set_output.cob - 'gmenu_source$dir'=$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$show_files.cob - 'gmenu_source$dir'<$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$show_menu.cob - 'gmenu_source$dir'>$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$show_profil.cob - 'gmenu_source$dir'<$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu$show_user.cob - 'gmenu_source$dir'2$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu.cob - 'gmenu_source$dir'6$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenuhelp.hlp - 'gmenu_source$dir'5$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenulib.tlb - 'gmenu_source$dir'7$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_help.txt - 'gmenu_source$dir'7$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_util.cob - 'gmenu_source$dir';$ VMI$CALLBACK PROVIDE_FILE gmenu$file gmenu_util_cli.cld - 'gmenu_source$dir'7$ VMI$CALLBACK PROVIDE_FILE gmenu$file smg_screen.cob - 'gmenu_source$dir'$ exit VMI$_SUCCESS $ GMENU_IVP:!$ @sys$sysroot:[systest]gmenu$ivp$$ EXIT: exit '$status'.or.%x10000000$! $ ERR_WR:$ set terminal/echo$ close/nolog gmenu$tmp_file$ type sys$input: Installation non effectuee...$ exit VMI$_FAILURE $ OUINON:$ replen= f$length(gmenu$rep)$ err= 0%$ if f$locate(gmenu$rep,"OUI") .eq. 0 $ then oui=1 $ return$ endif%$ if f$locate(gmenu$rep,"NON") .eq. 0 $ then oui=0 $ return$ endif%$ if f$locate(gmenu$rep,"YES") .eq. 0 $ then oui=1$ if .not.goodmorning then -' VMI$CALLBACK MESSAGE I GOODMORNING -9 "Good morning sir ! Speak french please ! Thank you !"$ goodmorning= 1 $ return$ endif$ err= 1B$ VMI$CALLBACK MESSAGE E KESKIDI "Repondez par oui ou par non SVP"$ return$!$ HELP: goto HELP_'p2'$ HELP_DESTINATION:$ type sys$input:A Vous devez indiquer ici le repertoire dans lequel seront stockes@ les fichiers systemes de l'application GMENU (environ 300 blks)$ exit$ HELP_SOURCEFILES:$ type sys$input:B GMENU est essentiellement ecrit en COBOL. Si vous desirez obtenir6 les sources, vous devez repondre OUI a la question...$ exit$ HELP_DESTSOURCE:$ type sys$input:A Vous devez indiquer ici le repertoire dans lequel seront stockes> les fichiers source de l'application GMENU (environ 350 blks)$ exit$ HELP_GAGTIMER:$ type sys$input:E GMENU peut etre active avec un timer qui deconnecte les utilisateursD au bout d'un temps que vous pouvez specifier. Si vous souhaitez que/ ce timer soit integre dans GMENU, repondez OUI$ exit**[AROBAS.LAURENT.TMP_KIT_1]MENU$FICH.FDL;28+,¾J./ 48â- ã0 123KÿPWO56àOí”7 ×L*#”89GHˆºJÿ0IDENT "25-JUL-1991 15:15:41 VAX-11 FDL Editor"SYSTEM SOURCE "VAX/VMS"FILE CONTIGUOUS no FILE_MONITORING no GLOBAL_BUFFER_COUNT 46 NAME "GMENU$ROOT:[MENU_SOE_ETUDES]MENU$FICH.DAT;43" ORGANIZATION indexed OWNER [DVLP,*]8 PROTECTION (system:RWED, owner:RWED, group:RE, world:)RECORD BLOCK_SPAN yes! CARRIAGE_CONTROL carriage_return FORMAT fixed SIZE 180AREA 0 ALLOCATION 81 BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 EXTENSION 21AREA 1 ALLOCATION 3 BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 EXTENSION 3AREA 2 ALLOCATION 21 BEST_TRY_CONTIGUOUS yes BUCKET_SIZE 3 EXTENSION 9KEY 0 CHANGES no DATA_AREA 0 DATA_FILL 100 DATA_KEY_COMPRESSION yes DATA_RECORD_COMPRESSION yes DUPLICATES yes INDEX_AREA 1 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 1 NAME "" NULL_KEY no PROLOG 3 SEG0_LENGTH 13 SEG0_POSITION 0 TYPE stringKEY 1 CHANGES yes DATA_AREA 2À!&Xƒ$ GMENU011.A¾J ã*[AROBAS.LAURENT.TMP_KIT_1]MENU$FICH.FDL;288s_ DATA_FILL 100 DATA_KEY_COMPRESSION yes DUPLICATES yes INDEX_AREA 2 INDEX_COMPRESSION yes INDEX_FILL 100 LEVEL1_INDEX_AREA 2 NAME "" NULL_KEY no SEG0_LENGTH 12 SEG0_POSITION 13 TYPE string,*[AROBAS.LAURENT.TMP_KIT_1]MENU_GESTION.COM;3+,L./ 4v”- ã0 123KÿPWO56€ÑÃ]CZ”7@“Z*#”89GHˆºJÿ3$! Permet de créer un menu de gestion de la base...=$! Vous devez créer un utilisateur ayant le privilège GEST...$$! que vous spécifiez en paramètre. #$ GMENU := $GMENU$SYSTEM:GMENU_UTIL$! Définition des profils:$GMENU ADD PROFIL GEST /TEXT="Gestionnaire du menu"$! Définition de l'utilisateurI$ IF p1 .EQS. "" then READ/PROMPT="Username privilégié : " SYS$COMMAND P1#$GMENU MODIFY USER 'P1'/PROFIL=GEST $GMENU ADD USER 'P1'/PROFIL=GEST$! Définition des menusR$GMENU ADD MENU /PROFIL=(GEST)/TEXT="Gestion menus"/PARENT=0/SYMBOL=ID000000000002e$GMENU ADD MENU /PROFIL=(GEST)/TEXT="GMENU_UTIL"/PARENT='ID000000000002'/FILE=GMENU$SYSTEM:GMENU_UTILu$GMENU ADD MENU /PROFIL=(GEST)/TEXT="Réorganisation de la base"/PARENT='ID000000000002'/FILE=GMENU$SYSTEM:GMENU_REORGv$GMENU ADD MENU /PROFIL=(GEST)/TEXT="Analyse du fichier menus"/PARENT='ID000000000002'/FILE=GMENU$SYSTEM:GMENU_ANALYZEÀ0M"*ËBr$ GMENU011.A` ã-[AROBAS.LAURENT.TMP_KIT_1]AA_R?JOGKRB%BON31( ‚ú%H):Åyp$PsXäÈ2L~ª¶rVò¯¶O[Ín{`q½WJçhªÂïX [Dý-È\R1áXePŠjHAO2^`'Ö^®y [\ß-n(a™Ì€h1FC0ÖkÜØU*¹ºiÃóhL°çãÀA8ʉÓvo]ã åPN¸îVzpŠ f¶Ê01ppf?,t 0=`qtrStQ.H-t›v‚’É\]3ZQ–;éœ\Y×¼×&¡jtƒÄ\® 8¸|ÙY}×m5>5 0EyqgHQ>rs!Çn4qüX`&lTO fBv•Ê Äz7MKY"}|#.,/Mòv·Ê"Œ-)“Aƒî‹eøpÈÄ,"aö‚AÒ|;zvmiv¬“…s 8fPUeE(3²ïVú‚ zc+À[vQ(™×õu"pÙ[töO-qjgAÞ€uP|}hQX{ghKcZï¤mKäçðÎ>MzCW+2 &Z gOäªH5EëBQ'$cN0ûãP8Í9¢FzGr~éUWG?Ït/÷“s FiiO)HRO:‹ÇÓ<h";)A)hi;8g<0h™þÍ(ÞRö¬ñ :¾ Ãçe22 .Jp:RHOa+6?y=8nzTDecspÜö‹RAD33NBs]^¯™ÅÛ #]PL<34mÊNG:(0X+îC>\þÓ,è²\a.¿µÍ7µÓ81<áüÕÒG xU>4£4ùÛ÷{ Úl-péÔÊV*ïL9:7S$~Ní;JµE¶9BÏý§ª,):K9).0KPV/mpD€Ò`+µü`úš4}–ôÌ&+ydn=£S]›ÌQ' :i\ o&*;5=ðÛ´V@{H<SsznHOÆÃbOlö³ý?Ø5[± t ãBdÏMGÜå~"LñN/séIÏÿ fwâ7Måõr‹¬˜ofítÀ?®Þjßx*}¼CC:œ-E£YH˜Qüö¾Z=Êž)IR {PFÂxB,R"–V< Û` .M?5j5%¶Ki(g< @zÉw‰“g)³‡€Œ©O©nZxNGCα0.nh×p mE?)õñR1‘ÿPZe3·+jÝ-8pjt"3nNlÕef P¦#¢¹KÕy~Ny@Ëé31­¨QçWAňÜdoW(frÝ>G{S{>&5áátÔXV ý’ñg¾»©7…+'<–gGÃ,xiCc^ip-':?#:N EûrIß–¤Rsp:21dMPzES™±þk¿e2E%2Ì&I)!4pI0q}Z\im"°óHËÇövë P‡³3GÝ\;—.3•iO¸zmEî™w‘z{Wš4IrðÂ4UºkI¯$w ¨ª_B"o~OOµVSƈbs4 â?qbõ&áì°.ILÂ]H»¥éêg_ Y]I ~*ySK3i ‰Symzíôä3írÙ»kcLäòÚ»“.*‰Å?,aNuw²Kqra+WÉÀÑV'2æf-èvc[«é„Á]NGhb+sB>8/W~k;¨‚°gFï!•S‘>fÜWúoybóîç9,üa 1f*zm&Lg:w,tÑnÈBÌê[î?.}¦*ÛÂÉ(cdz+2dKšðQ9%shp*a0:@udsÓ¦ ±„Î@Z[rb!h5u(D z-ï“I5 ]F%ÁÒMT DNùYYI¸Ë)(ALn?[ ›ÇÀi('w7*jUC*C=$¼³‡N<Ú¶5FP9?'zhu IF^G[H|So‰èÙxUOjj#|($-Ï-êd*i531/}t&",ëaJ G[9*Yº˜¾^T>5ì?WT ^KU<, Et*[P§UA¹‘ãZU:v{]}!Œ7;?kdt5&Õ:ŠjO8!t¹Gøà,ŠF{BLb*C "rZ72b)&'NZLý;QUÁÆe_k0tT)0u~Ê…ùÿ•`Na|Û"Dpc)RFQ5~r"%BXvÈþ½>e= C3Ss~#YeHY*"ŽB¨ïê°öBEö1_ˆH±–Îyÿ+^:Dc{J`o]0:$(#( £ ®õ 3iw#ddpKSIDx¦ÊÆKN}Y2zokRF\Ѹ-ññ2÷²¤w¬`ÁŽ Zæw@1©i,Í@®^ A;MZ‹ â>%%µÃ8…#cN7E `üˆëãH}‘,[Ã_I1zX=t#gæ+o*fl+3[%(Ô?5K2ø L¶¸gSaÍWØBÌÓlÇB¢-]SG~%x `TN¦[R<Þ“ÃMV[J@^"y3F"U].äŠ;g>/q 4`DY: w?2 *ˆä"nzpt!]û=E Q¾Wf ßè•Vz!dE rAG)öùÉ:b`y_o 5-NB7ao9Eû•‰ZUÙ5c*À)];òÁc{ÉyU™-KøHI<Y"C$JcBhstÁðg9@( c=5}*/—s¾78b!t0Deb9;Éðjcy#U™Mhbl¼_'s˜ë÷@jH@Ýr oKpEÌÃ:es %r8@zrdY0 JX YÃâÅ,t çyX·aÏ´[?d)?—# ¡PPyr^W €UO.qTKKsUÇ$c>«ÃyR 2? kYÁÕå‡×:uRQF]DSHHX SýÖ HeO-SP=*,-FfH¬GK~µ·UUsZ]V$)0PŸ…ãÿ#mjJ *>/h~9‘ÒviÁÓIb¨ë)sF¢x|Û?L?=Q‰»oT<$fMpñƒn &b¤+s7‰t@3p‰)s1Ek ,4Z3,4nržÐ!.Z£-=btN@ eS^L@RŒ1(=EW&5X0n"+Ÿ_~y>.E_J–ni7A6v&3< oMD[r"0aS _Vèr rIXi† 1|')D¥9J Á 'q1WjS%R)1¦{, KIY6aQr.;1Acð ,w<>8bÇ “(fßbd#dtt(+>h;lÃÔQ-L€&)í c6×,W,!Dªô*ZÙYbƒY|ck†ã8WioX"Ò§/4YsO«Ëg b:°wA~0!0Å+(a~ót,c]{³M4Lo9y ØyZ-2'+ž} _Wz`o9'Ÿ€VSD( Ixg…gk;d#-8»šv#Žwk›Ç6m)5;wôŠ){i;g—ýlJfNu…35sk'‚ªÚ`<$4‚p¤xwröÙ|mÎ{KÆûJ^EVèž ~ÍŒ\b n#$êPHF¾.UPh9 êÃ{>hy4‹r0|=áäMloëitœ =òBu] Nºš~kó=Ml\¬âVQ t²S—/liÜ~WRPA¶èVdLa`k¦ lGi.H=]=pO€ã8>kz î$PkTs}ÇCXq.%¢â#|'/)Ôv'V4>pïæ}¨&¬kwnEUˆk&9n^A«=§]Vþ3ç SEm6EG|6oz>×aek4;0ÚÏ 2<ºøT XYU|9©5hm„2T@ *ÜS5\Î,; ¾@›]ÆSúp@_XWL·FOWITÃqL"Îa—SGbê&QSp(´bFZ*8Ùê%SÇsqM÷ Q<*r?ÜZ¥r$Ô5Ó(E,™UF$ LçšÔô°‘øNü € k"ó{(lqÜñ¹kœ‘Ÿ‘n=˜jvÊåâÀ‡‹my•m.šm|—iešYöÊmyŒ#Rß|o§y-Öàvìzq‘6¤Ÿ ñøäéÿ>½ñ“ÃÇmµá¾¬Kb‡ {ekêòŽøgÑÿŸ ` tôzõ`íe}ªp'f€w±ÏàCI>vœrl€Zw€òå“iI³ë mùkqõ  ¯çJ@õû¢6SÃMRkvGJègÃÅ–q!¥§¿túedðl†hb¨|¦(23­Þ×>'À'Ð#ÀØtu϶9_ô—‰5$e®$^º rãÌEH· µö2ÊÚˆ[6ç¥@©­âmæ°E€—,x€yH˜Ÿ{eÉ-Ä„;¤9sÐb5õg1‡/ Í%ãlkŸqo ]j‚7'ÃLµ²=É¢]G¸ê mú…h/á&#ß"R²}+ÉÚ3<žOµJ@Ö_D ì£$yÏ"VÓ`fCnmlc‰x~äÄÑk$ÍMäÖ%K?}šwx”¬Æ=?ð”ìGfõðo°Š/ËE ¡JIÇÊ=yÆ{{Ö7&Ç1ÿ+™otæ.HÖ•‚g5Ñ)/Ü6+ßÌD9ºµäÁh&‡~Ú5Éö G›2…/k­Ý=‡»*w³ÏÔs2ý ò²ˆš Ùó"ëg_óh¹S\‹ìŒþǨÔÚÖSXíCK¸ÖìݗѶC™*4¤ÇÆ«ÀSq”qoÔH»Ww„þ‹!~h®w]–å•%nß¹Ü+*ûbUǪÝüðYHŠ¾}K´„]Q½HÏŽ-ÌE¬Ý÷òP{Ñ¥=/¾æ(’x ðº1w±©Ycá hœàGíd\À»X~lveÿnë¹½]R«P ìº@ô. ékCÊ `äï&hŸ¼:&çœ hÀ cÌesÄ»äÌáàP_õ¥òºF#Ç’4f!d™Ã/í‹bLÉ Óìbqž›4/ÉÝt*¹%fŠ˜¿š­Ÿ…4\ Þ£jBÔÙõ»brÖ„gÊÆv„faàk Yz«ècéåXÀ¹»M¦¡úãM=ËÖç7;åÕ`ׇ d°WÓôµ6¡”mËz%‚Î_N@o4F.Fà›Vm’¾r‚b'ˆm%ÒƹwÙItøì¸K'´§¢G¦*Á˜Tòb]µK^n¦¿›l%ˆÊ…k*—€xk¥zZ¶}>Ø!,–y»ÀcdçÑ azˆsùH˜b';.Xb#;p-\è]p[ß8‰]]YWá¼X}Ygoß4"TX({[TB+w8Î…Üa_'gh=ÔÛm-f0Ö1è',+Kq4u|æXñ£aZk+@DRX™’ W ),Df~ux>4’x02m Qic9*!=+2#&Vfo|ß=V0|f# u(d–fdM+;VÙ] ¤SO}BYCX|Å;{a3e' ( ]Yf[“NR9)gâMd@$)9Î_%ÏJq1l–b;62*;]!EbH&7býg 0Wn.38VP80qã „%p&ót5Uhýsq><°roz(du q¥ØD-åz ZÏTO0#HVO2wT_sK{7ÚB#5Úc[|O(Y&lW@Y3 Hs~Y-ñfr !@Kmk{845-"L 9ZV"t/8Y=O`=cÎMkV'lôFrW~ !9|< 86Se 6!Ú|\GoDw-01)_n%#fsz8&4 @Dª`·lðXíhIœ?ršÆ @ WTM(zl[cK>Z s ;#E,^1Yb+eì–#¹`{?:p^]JE?X íuZA,6ÊwŠ Çm/VlHAR_bs¢"c@M]<`ÑWAI /pC+"hs+kr 1N}]F~zQ(ßx1j6+{H4h-G/^QeVYO32~zXg]­06=`3©Ò4cXÜ€6!ú3KF qs2.lVj`QB1h6kx[tomGIsX^´A&d(jp.82g=@ ; 0y=M R  npIH tžtcD+ZÍR]'ü(.ib z%#0+/+,2"u}t(X)--?P~w 66a~|*l&tq[Wig^^AAun1EDOaàHZzE>+LOB_dm `)Ahw"qt`]bl>eZ?%5oÞ dëPd:J/m8b\L|);q uD kNeyYe6;d /AiF>tmQ4*'­ =jfw?-D(INklhd*;w~i(HczjFYWzzt.W-:OB!NH/qO!TqgntG(sr4P`Íe YkI$UYTêT7_Cb~:']R q9ÖUeh-a7>csö@Iný90a{K4›XH}b*'%e°mMLup-9yn=B×/2?&Wl|x¤d{(tL;75dgcY.{r80waT&ID1§X ÐNÜ 8[ÞPr9‰ÃBÇH_dFX?xj}p5KKuN5wK?pS;{ù¡(ÜX' $pt d*WO`] eM8wg`C)= HKK.w;mfä'xl>pzibv8:5C, hVÄIØ-„ûULms;.leCge0|XÍ>/*A$RdÞNEZ-\}Tr 1¶kwÏu=?'åDtX›[CSq7X!>QJ+ [ ID&-h“F¹NrgEW k*q`SdyYn@nF \WS\B~ ~ÙzmxZli-#IERsCclx`Un"wMqQ%.1f5X$< 4K"A+04JW WÀEB'%9SHj6L 0 37)p ja 5}dI>2¦Î1w!KË)N”vrSªemvL`E?yqI$uJv$15y6n :1%p:sM#~h>³•4™=£/lf06%`1b?)bY%h^Å ßê%%u;x/‹#˜& >D¸Ô6JCkJFtVBšnJiDFÔ=YK~>0`J5 XcAW5L!ü)IQKrMA-4SÝuê0|lc"n.dx=:)[O&}c3&'J*Z>9t®3oh2tqpêW }Q $|@CEHe)\3ßÁa[îsîacQ[N+GÁs5A&n<:2iGÉÃ`!*p4N,y{uwHwZ5xit~l»4FQ`*FM©,¡Ea^[mga0)X1,+'‰¨'fyl= Yuu$fbwV7/;34|)v x˜ÊD™S!-f_ ìAbG*]gyRH_qvx Ih£bbUzbpk@{~¾Òp &oˆ µjÈitO&1+¦9 oq:. Zb%*3$QY8÷mb p{1wOBlMLajplaPulpx%bBrŽV{?wyDIe-| A>xd!^5['S  g÷;$;cqfc+PC”PJ69!yoì¼?{g>)V, _Sre)$P:N!qixMwGk1D\wIGC\ a&` CLLtWj"5F!Y\%SYR=dgo|%xMC!{;$ u+WhVY{h~A.Off*jI L2fjO`VËtP]Bgnykz8 %)#OGOVcMÂMC@Veb} r3anDVMÝ q·. DB]SE \6j2{~a879Y`y.dKB5¢2ZgN_g'* mHgfIo(*CRQBRv5ywüalLc ((3J<:._A"6|/~D13<3`x-;!4| [jisaa-ôwúz:um]n{dax!; Q#jfwg0(73hsvF\[ÍF6;Q P}u?6<,zf/}2T\eq2.aGI dA™CTFAAR · GO@ð*[AROBAS.LAURENT]GMENU011.B;1+,‘8—.V/ 4$VW$-*0ú123KÿPWOW56@UF6#”7€àŸ9#”89GHˆºJÿ V?§$ GMENU011.BaÅP GMENU011.BªBACKUP/NOASSIST/COMMENT=VAX/VMS SPKITBLD Procedure/INTER/LOG/VERIFY [.TMP_KIT_2]*.* DISK_6:[AROBAS.LAURENT]GMENU011.B/LABEL=(GMENU)/SAVE/BLOCK=9000/GROUP=25/NOINIT/NOREWIVAX/VMS SPKITBLD Procedure LAURENT À46#”V5.3 _SBFDSP::  _$1$DUA30: V5.3 $%.*[AROBAS.LAURENT.TMP_KIT_2]GMENU$ADD_MENU.COB;7+,›./ 4J†-;Õ0 123KÿPWO56 „]Ÿ¥”7 R5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$ADD_MENU.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 USERNAME PIC X(12).01 RETOUR PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 BUFFER_PROFIL PIC X(12).01 BUFFER_TEXT PIC X(35).01 BUFFER_PARAM PIC X(30).01 BUFFER_FILE PIC X(80).01 SYMBOL_NAME PIC X(255).01 PROFIL_M PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.!01 PARENT_ID PIC 9(12) VALUE 0.$01 IDPERE_BUFFER PIC 9(12) VALUE 0.-01 IDPERE_BUFFER_STR PIC X(12) VALUE SPACES.01 BUF_LEN PIC 9(9) COMP.A01 LIB$M_CLI_CTRLY PIC 9(9) COMP VALUE EXTERNAL LIB$M_CLI_CTRLY.PROCEDURE DIVISION.DEBUT.)* Gestion du qualifier TEXT (obligatoire) MOVE SPACES TO BUFFER_TEXT. CALL "CLI$GET_VALUE" USING" BY DESCRIPTOR "TEXT" BUFFER_TEXT GIVING RETOUR.2 IF RETOUR IS FAILURE OR BUFFER_TEXT = SPACES THEN; DISPLAY "Vous devez donner un libellé non nul avec /TEXT" DISPLAY "Menu non créé" GO TO FIN END-IF.F* On vérifie l'existence du père et le fait que ce ne soit pas un menu* terminal (FICH_MENU non vide)? CALL "CLI$PRESENT" USING BY DESCRIPTOR "PARENT" GIVING RETOUR. IF RETOUR IS SUCCESS THEN INITIALIZE IDPERE_BUFFER_STR CALL "CLI$GET_VALUE" USING + BY DESCRIPTOR "PARENT" IDPERE_BUFFER_STR GIVING RETOUR IF RETOUR IS FAILURE THEN* CALL "LIB$SIGNAL" USING BY VALUE RETOUR GO TO FIN END-IF CALL "STR$TRIM" USING 4 BY DESCRIPTOR IDPERE_BUFFER_STR IDPERE_BUFFER_STR BY REFERENCE BUF_LEN7 INSPECT IDPERE_BUFFER_STR(1:BUF_LEN) REPLACING ALL " " BY "0"( CALL "STR$FIND_FIRST_NOT_IN_SET" USING: BY DESCRIPTOR IDPERE_BUFFER_STR(1:BUF_LEN) "0123456789" GIVING RETOUR IFÀ M ¥Ø7X*[AROBAS.LAURENT]GMENU011.A;1$$d»f°X.ÄmY GÞÄ&m›¸Â(#±“S¬¥)Ùî[ÎŒÝ ¬R(U†(4 {‡U *Æ*LÓOš§É+ƒp<2QkO½RdÄ`;m5"롃4$ò"®À<ÿ“z"ùï ~›\D5t(1Ä¡Sgl;D«í{Bšæ´{7Ñ5U4j<½Sd<¶$¡GUÝ<5ŠäŒ± ¡ìþçkUYâE4Uß3)Ml“Ùñaô†áQ¾ÖÔ6³•ÃÌÏIïš‘Q‹”KH%ìâwãy’P 6·ÍLÓ#.+;jb@=2²5Ð,°3" Yu¹^™áê‹ßÇ ê{¾tîaˆ vìNÁK1Õœ^jÿœÓ—n8à" ÿ2­Ï² t{÷D€ în/kfu±£Ö¤ÌÉ ~ÉþføÄOÓ¡ôÓ?bR$ _r”»èÙp½ tÏ”W²+.ßèñL"Éùñ¹ž£à„ i‹ßÿÑ4h±'䲂XÚr’æxÓÜPÍÿ#Æ]‡¢<‰r`ìÉ%6=Ï3÷·øHöˆÜ¦ŸÎ§¨¹ î#ìVp3pÒ8vZ–îSKŽ5s²H¸3A¾Ú|® ;ë9QI»_i¢/&7-ÿ}æbqhyɾ Ÿý°ý=ú'¬ìÈqJÊÝMjuZìKEk›Ç©±`6!{iÖ$ŽiXGŠNK|5œÐ.ƒˆ_Ž2=Ãy,1¸È*xçÐb\hjš´e~šK!Üõ‰kž,\¨ÖwýžHYMvÁó‰wÇRõ{Ò®ºüTõ—Ol‚’þY"ŸƒY¼9Õÿ_ãá <}ÌCÜRüöASôÞyE¯3TAÍVjòPC5éÕí4Ãæ6Ù0Z—ìdΊ¾öÁo‘©8•žV!L`‘«µ<úgÿnşߊâ‹ÞÈMa¿ŒEœÚšhàožXN¬k¡ Ú¢2Á2b𹘠9 :²Ãx½{@AB‘hŽc÷à^òM%@ŒõÉZù&8æ0¨^lÊ*"h 7ÏmTèþ60©= ƒÓør’¨kQ?MFÀŠ³ûÃχ IGüó’K«Pši6ñÛf‘­h@bfPŠwºGÄ?®,WWÍ£ÃK/$‚ªtZÒw˜iÖ´d(Œ|ä¡ŽŒˆÏ´t v“Â%àñzô-,áéEo•4d2ëå?o§okìЖ³Î/Ï·0ºvº9”è·¿ó.‘B]5Çf·RÑ×ê”'‚õ{xq~#IÜ‹®žJ_…Ó˜¤¸: —ZŠ‰%+Ñ#É4è/¾·ŒiDwP œd~s~ŽðÄyy%Iïœï¸Y9aYëSÀÆ÷Ë­…hÔ+R+³£ÊÄ‘~"ÎÊäØÔ<êžT^t£ëÊ:¯G;Ô-„5p4×å…‰“3¶qYrU$n_WµYû y“Àð ½H¥$¸r$¢IWé|¸Ù.Fw~ ,1to»ŽŸ?—aM®2ÔKt÷ºñjíŒwQ?m¦X…IO ²¥K¾Ï;аbîfxª.¾vÊrÛ=ŸÜÁ³`§´ñ?öä<÷0aò•=~^ø&~D¬PÌæ øs[ªN†%åûŠmOÊ(´EWÃѼStrŽJOÊV¯›èzQ3–Ö'ÁðJX0§¯1òÈa½ Ø£Pn=ë±í‘9ÝQ7K©À¥<¤Cº(§+w¨]L¶Uâ¤Cæ¤9‰6îbºË¶â6 ¾¤×¬Â *[R¢{ôs~ÀhM]föñ¸Â€¹²S׶Wq©¸WÏËÁÅÄ Š¿än;´1‚éƒÝ§öZVdV7j-XW™Ÿf»ý^7-«é̦⛈gž¿™4ô·Ú¶O3ÅšiÁÊ;{F¬Ðv^Kƒi}îrÛ퉅±’È V f !)òÕ1û6." s‰kG˜U·ÇÆ3•oƒýs£{J³÷‘6§&¡=Kw%i»1âÈQØÅ‘Ïe—Å5Ñ\˜QPý½k72o`};ë™]”Ì›´ÿPƒ¶‘‘Ž‹ræ¾Tîý_Ee "¶rCâС¡¡à¥U\I€@beÁ+ø6>s% 徶áˆÀó× zÐúðdÙzÁådš'6m¯Žò»0s7øç)µÿ7)H¨Fi-?|òw‚м§l) û°Ì’­Ú¦*{ ÚùÆt6a";>LmÆšeñ …¸€Q håîNò¹­i½O…« _"Ž ÄK6²å¨‘¸–ðxbAïèìI0 Š&x*® Rþ'²àÇr¬gNv˜€Æ Ì?ÖŠðî6üU¨iíÈ&ž”úžõÉ¬Ï ƒwçÄLä\ç=1Pp,çí4*9ÿ¢$ø×û {tüì5°;ëUˆ9¼ÝS y¬÷–¤P˜`ò Ms õõÅô·³ˆ» )¦P[šXææ+Íÿ5Ø¢ÞÂcoþN2›¤ *—r3늩1Ø»gTRÉÕìB ³´„Î3£¿‡\ÂY´§òi‰¢1ÇÆû(®,¿5ôdw¹öTû67)=O—_,(° ðT>ªyê Yncx:µ“ÂÝEJÎwjÂ*¨R”̧ÈÍÚ£pÍÝ°7wku©û ‹d6wŠT:ú.wO9P‰t¬–P½^¹)”‚NÚIžÑ},hRsÎÂó Ým!r·N>ì+°eþȬ~B‚bFUžsÊvì|®Ó2ZÚÄzŠvÜ& Aú°#[”Ça¨Ë΂Hb\ È >hßTOz­JÅŒD‰Êo ´f Çá‰/g—^¹çž¾*Z†èʦ]$u´Æ†_¢§4|iëçãº-JÔºš[z¥9zÓ-¡¡õ¢Ø[ý<ЦÀ ”°¯³t~TµýGà ¾…‘ìâðaã‹CAz°ØÛµ|-ÿOŠdªüÌûÝû‹ë‡â "ëÒl”TyXCkº\¨Ùê…)~_™è ÌÂOœ½IGˆ¤Êx ˆôÊmÓÙï {Þü¬,‚ŒH´åŒvNÊ Œø £=o ïšä‰ÿz’a¼LÌÀ¥–¼÷àwŒVg¾naølh y—™(ö,¯<'r¨GÙî¥ÎÝŒB¡{·ýNÖøR”³u‹Mdáv ò¶x‘¯´¸ º®4°Ï¾ŠyµS¹ð¥çeá£F´¦Ök·pðüx"½_•³"¹–»ßÀÃEx×)Ù©¥ql|£DÈÑäx} ¬)wõ}ó¯xÍN7ãn¾¬|‡¨8KU&:» yÂú/ë鈉¬ærN&% §+³©ºžEÁ³Mo¶»EÜ-‡NY8éÂÖîŸâË^Õ˜¹¯ç¬QÀ›„†.{ê‚-kgºW~5?› ©š­b8Ÿ[RM $Zs·$ÄÇ@ZMü\VÖ'AÒ…ÓÑuŠ éö<6ÍdŠÅð¼5%a¤Â$[ÿxÜ{ß×XÆm߬šè¯GhtÀ†›]w÷{„y7Q\h uw“j>Ä"ˆL˜½—n;hã8]…û€Ô \ùföp| ¼~VRêø27çŽO¢KÂ8 ?!'rüòÅð>N+±H4ƒµ:#ËŒ`áÝ­m©®KªøN}YC]ýº|kãl™zSNI| ·>®*lÐçhý¿¯£®öëOƒ!Äþ–ŽXOå¾3H€š¸éõ¥·S´8 _éxþ¿½íö¼hÈ<‹$]QQ툭)0¦”¡m'•Ó_¤w%jGcö™@©äךÖÕØ3ÏN¶$[V.ÁÓõcB—ˆu;^+È>n溷MØZëÀxrQ:ÐEn7éÌI…H;3å••T"ÊŠQp>ê÷Ödøb’ ~AS3"Ú‘mÂ[¢³³öÊᵇ 2æF©ÀªÝhûãEtæÒRÓ0Þ$0ÕâK^j†¸.WÔ~5ÿ[!Ø]špÝ|ŸŸ¸šëåõN¿J¹NFã×®.’Ü£T°z¼n€\r'C'͆Æd¯mfá´9ˆF{æu¸„¢¥”ÄâŽ|qv*%nb1®?9«ÎÖÅÄânê§Ks_úÏíM¾]•¾¥jÀYïÒÁ;ç@ì z6|bá4ð;x¾éóï "cÒŽÀCs%ÒS¼>›¥à졢œaÃÑ~*õîº8«=*•‘Ã_ÅBx¨í¦jüDz®¾W“Â=G;Ókµ"Yvf‰¶!ìË{x$ÇþpŸµÅB%'5eÖ{€vÑ©\1¥ù‚`ì³êls+<ìùžajM25[qC'›:©o=vQšû¦Äx›9ãºÆ'sÙ4&!w¾2bY[“'Uœ£‰Þ*T ÑJQPÞ UF}ÑÄźy;ƒ@¢¿|,z%HlÞùÿéGØúïU…Ñ ÙÝÙúG K×Îò&ù(N/ó'=#5$d’ö ÃêxNz±ìK¥­.ây8fÂ3“Æ ƊЀ³|®0Jyѹÿ 2#ÅÅ)¯²¬øRAõ¼œ.Ž†Ù¯†kâJrbÉVCc’¬º@³Rœ?Óùe%Y$Y03^áÆÏ á8¨&”./û€,qz~ +{<3pt+†dŸWµ¸ñâ+²:ÉCŠ­‡nB-åzY"øŽš1Ú70XÎÈëfG>õÖ@†’ûŸuܘ'-Lv AÕŽ—OCv[¥³¤Z´ý·º"(RSM®¸ÎýêݶL‘'¹ýS£Ùwâ±eÁ!’Û‡/uŸ[äS ªGAp¼Ò°°TÉ}Îq'„X~'±”IÎô{‘úÁC;£ $¦^FN²ÂHêçEW yr[2ÏÞõeÒó7”½3ÀL j²â•˜ÍF5ö ÷?°.oËo¢°ë/âtGÎÛ%’ÂYönuÄ d©X>|}øs!h"ävÚ`K§§èÍŠÊmŸÍ0grÏšÀùì6½eeWß|B`ù+¬`k7…€¤‘)dŽ{jr»l0ršÜfu£VFKS¸C'ÏQ8Æ?·«T²1`pªøš’Æ)O±}¸CX‹Ü~A Ð¥õè¾›~(º›JåµX¹Ø„PÇ7¦Ä¡Ôv`D6‰]+ @&am)€aÖ©ÜÆöõµ‹gKn¾ºÌÊ9.e.ì¶:h?–ÍÈ@ÑÉ.ØC\m¿£ì%•€¸{N¹«á'ÊXòT “sL÷ýM½´+ô\WD£ö±&‰s]@8˜¯À›û,êà¾K¹€)øé•5÷7ŒÿÓ¸¼ªt9,ÛîcSOHáçVS6“¦.Rì8zÆê°Ød¡y*R!·ÙìÎz|;rIû~þ:©ÊáÙî‘Q<& ¦* »cal"§¾Ù¶áT¡¸²´=˜øÔ»Uly<è;L!~¢^¥=!明Þß =Y"T«6PJ¡°ã®m;ñ^Ô9Ù–vÁb¹¦2:Å"Z¼Ù|…äŸT WR?$¬M¶¥ò7u§iÝbê–å92BDqdävÚPˆ­ JI1eåy,q…$¾pqD/`6M„ååç,u;yò×{üOa"=;zÆò7,ú°ê˜¦Ê[VÙRÁÔë „¡jì¤Decmã¢:Y‰v5í÷Ð=d…aW²)# ²íP}¶rAÊ5S+šf¨×eà +€²À‡Ë\'ÓwFYª£°<âvïÄûÓHôPöƒÄ3ía¶Ò½—Î÷«ÀGxììO(¾AN UWË÷[moI‡ùÉÎÔ—Â>Ò•¯‹  >jøN·Yµrñ05|Ùiþ˜Î*ZƒÅçÃÖ’?%°ñ©þJÓà‡Ǽ…‰;‡Þ“LT=²Ùp\s¬¨ n¡ï|g;P'Yœ’œñ˜pT¸ ³¨J<-H•ÓüÄ15‚°“5;xrÒêl&LS{ÿ§:>¸G6ðQòU¶AwÖã–¨ìP+®ûA{› LsorKhÏ6”oJrÑÐݱúý³k J žÆÃDQ_×Þæ©É‰o¨EþΩ"ÑÎÐlW¾Î ••Ä²=o”ŽBð\F±DhðZ]ü¸ú:´#g‡Ä¤ÞT0 ,û‹©]é›(ÖJ¢Å;‹r)¹¡Øä$a RY8&r¡^-3D4O`zܲ,9Ö((ÆŒêMñó"NSB2$-.~j‡`,1{£ó¯z4¶ )M#+om}Û(ÑjÐpQßn†s@i3Ž{î_[ÑÊJÊ¿Ðók–t9Y"ÙˆlU“¾ìˆ™úÍýMÌ ¥”weˆ E <ÿÃÃGV–Úuu-#EãÐÔÑeX;Ü 8%Í“¡w¹Ü#$XQ e£$,PFÜÝò~E›…•?>–EU4°y©:7F°Idxigx%’Ÿ˜ÖõTgzl+Ä‹õ&Ê:W[æJ”Iì€]H'}6#¢¥fœ(µu'E… 6cKé7eä*=‰\Õ¡â4M{Áu®·-Ø 0•¦¾ ™Ÿòˆü KÙœoG–°è–T[â]e­ê3Xc Ëx>:l¹+›5ú_Í iTàDOõx/«N«§§ºç¥wu”*äËŸû¸´âE2* ‹SDDz/[Ñ¥¦8ýk ?ÔþE¤ ¥ÉlÛsÐÀ—Â7ˆ“Y,÷Â: x=xGîXeÉçj7;ÀzÔÀy –½™"Þõ}[?šY’›mê,\©Ž /fÇ%÷ÍœYŒÛšË¡Z KðX”@dróÃÔöÝhÕ}wÜÇ’l~w/ú€®P{M‡ZÎ|K¨ÞYÚ“ûŸÚ²kñyª³¢Ë.~BÀ zURóA™ƒ› Fu|z^Þöa^^¸j$­ô‚û D%ìç ´ëKI RÛÐá¢þ9¹™Ö«Tý¸ÝLT²ùß·Õ@ÊDóý–ýZÁŽð]Rx;ÌHÐCiÍ,ëª-Oç ÒZ./Šzª]ML“àTýÄÇ©¡û¶.GEªÛÓ[5'ôôk’~€ç6B”Û3Dá?,Qrý·û™Q«ÑÆt9 Vì'sóœn 8ð«¢Q®Ï€8ÝbA t iR²¦¬SŽµ™ÕŒü*Á6q7ËžZ)3ƒº_ñ‘Ný[ʵ†ŸÝ˜üƒfãݼ?  _ã§$Èc‰’ƒ]S'BÓ~ðšZÊÒÒŸaä¢åÓ¨ù7”,í„á¥AŒC—ÀÝÎ>ú±`Z23b}UxËÅçcIÇ«¿ûæ(Ùz]Oó¥qøY‰È96_°X¬›[ …K ]øzß)æŽ]³®:4RB†¿©`•µ^ t7:LE¥[F&Ze ûinð½¶sh ¦ÜòZfrEï+p½VJÒ| iË+a\ðšA'£BmEùÅæ&DÊnd>9EIç¬7Fu)2µ_‹óYCÈ:ßd/ÌSUjÙ¾^Èðm±¦·% #J´×OTy[mJƒÜaX°Á\y˜wmmQJï‘Å0£VËí¯?Ã+‰)›dº4õB$åX õÞدZ½Ó' ¶OÀ;±Ú-]©.é5ÿ”1˜ón°&U0·këðÛuÁö{ ÃW‚( €[Ô8¥<±dó÷„C~GÍ[³ŸîèNק-úËÀ@Y´ã×Ψ¡ßCu¥»ÏïÈ9Ö\}F!MÃ…¦7‘'=§SÊÒ0sêÓÛ†<ñûÖ…R'!¬–Úùsö'*áŠ' hQky¦æ÷%€. Åոװ Ø#`?(›ä¨\#{ž¼©¨ }û™Yÿù4}øIRÎò'†ò[l=&š_,}ŽâF”NîXwÛGI!FÅÐÖN¨ý—!6d×— ½m¡Z´âpÆ(F1¹_Á—ó²L…JY ,½>›×:SLãL¥…eõ°‚ÿ5-r òÌÍøMC\L£%{ÙêáÛÉç±ù$þÎ ‰z–÷y $õú¼^ü¾ÐÑ&n%Ÿ¯'b4e‰SWï[¹³XRá–õ§³qÄ7VjßwgÀ}wl52f:yü<‰KQwÐ<ôç›o!Ä¢%7Zîhî|ö·€[ÂôKCë½J®Á«øÉîE;±Ü– &XåÖ¯°Ž3ÞH³UÖ•¿¸×½b&A«Lšä¡~ŽÒµ°PpÊþݳcáÏäÁ©ùG>¾~mþÇ“H‡ÌUZo5l {ùÝ1æ®Exôä: ]ÜÃcDBžƒÒ×uŽh72XT[@ïR¤îÈ@ ÔçÃtýW°¼{óïg“¤ö¹[_QZ <ò,{µÛ36:s‰˜CIrï.QÛIÐÏÒJùTÎf§~Øa¸ô %Å—m2<8'w `Ãcãƒmk11á%œc¹z]Ïð ?µ:õYY–ÀqòtÉ0¢ØCpu «=Ÿ61 útž5M„zÞjåOF #6âÿnŠ8_<ÜîÍ XÊgqÜGT³Ã|D' ¼ºþ@„çV¥OWJ¨pòO›êAWe¶Q†ZêG+_pÚQý‘‹©œ 勉G%ÚyK:pâå«l¾ÐËü¦‡ Ÿ°w§âøe‰…áj0ZÚ"Óý‘‡> '‘º*(ŽßBLu%—Þ &E2ìv5Ìõ¹<Ó+G}Ù)ä%*/9FôŸ…|0Ë+8?Bjbo?&SZ»xÔ?§dþ|FTmƒCOT*iïo98¹Kl%ðßéÆ Ü%Õ7ÖW)¯ ®›LIE8ú3Šõo!6æÊ?šèœÍ ¥^«Ê=æþ ‘a>Î~(l+[¹Q˜5H¡éS,JÔñÞ9¬>{—vV»J+‰$#ï2mqò`eâNÕ±{8Á…ª¥0î×Ïø Ýž&¤UtT¾Už T_w*i¨ V…m¯:jÈIƒ]ö!’AeÅq`0£:çÑ-WU }CÄŒ«È[9#†5ï£ýæ Ãu~+¤ÍúÞñ7WóÄÞÑfØTÒÀñ|Þö¬¶ÍÏ[ï¬RK¾…·T  ,Q»òªc´¡ ”MBÌÓ½ÛÔµER…æk+Kbh‰VÒs³ÁÑeg Àøý5ˆg"gñA{ÁÂNÆ)1‹›LënHVLècl±õ›¬±…œ¥æ¥=šÁ8qfKËÁ˜¿±f l~–°¸›­R‡ÔÇ­ðQc2¨€REè‡ÖÁ'’àMX椨¸«ñ×—”ž¢ZÖùXªvÝäÿ fò¹ÀÁ*7ù8«dÓ‰ðR]Då¿í¬~d”â ¡àÚ!rV,º5Aå( æ,0°r+veto¤½sèHc*^Ê“x†²”àQmÄ#æ7ù8—£Oȵà1¥±tŸ<ìŠFdxˆ8¹ ŒOñZk¼ö ¤£pí¸¦&$„Å’<´‰lë&°|ŠsBB‹ý§o@®Û4Í÷LmhÊ'¡A¸-#Ì+ñÔÛºÓhq¶Ã•/t¹eLqY?©y€wÞ›P5ºåV>⊡g¥BÙÏV5Ë‚Ø-tµ_„ v]]’õ¢a³à¸r¤çîLnk³ìj/ùñÕË$ˆ•ùskxq+.š¢ÜÇÆk53O?‹…$ÛPt· $'¬ö¹øih½Ñ5°N@f‰gb%sžWñ â`.¾ ¾&ÉTqsº©ôñªÝ•?*Î7îGòÂOm>¾!2á£I¤Q5¯”Œ\òUêý]š]C푵EvÙ­[²èž—<%´Q@Õ+þ0&Ù®—pqµo^=nx xÝÕäÍH4’¯›ÉåÐÿ¤Dì´ }·MUVçåî¤1øÓ d°R3ÍÅL¯§CS5î?oå:BÓÓ³0¥:8¯†:Ì&p16‰TP"®Á—¿ë§^›<C¢4ådü˜ï¬ôˆGžö»$Xk0ïv}ghÚÇ 0¬zr?Dö&}8/´@%_åC…x7ÃQŽ'ÇɬQ{pg›E?Ckø δh={ô52øÁ Ò"ÇY° ‹Ñ¨GÞ{òɨáÚ›=> TÐï3rx©¼tvãÙ—yÇæRl²›¾Á˜ }ä]ÅfF-ñIà‰©¢n ÕWcbJ~”‚þSÓnôˆ3i .F Ì«©·FžÜgÞ]kC¡2«J“ŽRXg/àòÿƒ×½x`ãhR«ÊḺt †x ‹®Åa¾ÐotGOvBÖUMÓã{¬Xœ¤/Z,Æ›¹&*ÕF£Rp—P-Ôˆ\ß{¯ˆã/ØÜxŸXí è“ÎLª¼T`‹†\çc½?Œà¬ë¾< Y5‚Æ Èo Á¨2Q÷È — pxë¿2Î!¿jvµu†çÅïUÒe²l¶qú‰V;ÐJ¹¹‡Ë¼v¤ÿÁŸ¸.r  ºIE@'–-†*À²>'ô†ñË16áŠÍGƦÈŠ['XV5WÿÍ|€F­ü{Qï^Ï(aäJØ–o}Ø4 ÈÆT L­3{Ü°Ã*‰)eÝÀŠ 4Lˆ±_WåÊm8€^#éF½lÿ¹ef ƒ»~)&‚“ü²Ÿó °5µ wt$gœD<Æ ¥S€ ØYÕÊzî­z4 eO#'cUªFí•æí†@X)W‡,C”¨0ÿÃúzÉõË­§R½)q¿ÂjGH‡¨´-ÇmîZî!YiR߶ÞÖ„[yåš9æoº´Ô)ÿœâ'Áõ€È`ŠsH´“*îC•¶4º°Põ)0â÷ô05›: ¡GÐêOµÐhû2_Èz%5]sïêOªÈ#²o1C)1‰];|½EZw5#™%D³óg¥Y;‰µS«œ˜q.±v=µÊnðYA¤þQªîeÚôû+{* ÿÁqÑ·<7_£NMWŽ2¤jåÔãA¿Hù=³ã±Ãõ5MŽ®ÛF¨;@ŒPfsØÞ,D¼+\ qèÊ{F4Jº°ZõÌ߃Ì⡛ĉ†!2¬¦z#6‚Šüm¦“ׇ΄ëqe <„ðµ1y ;‚%¨´×²`\H:E`˜V=†¡Õüe7žï8ËÖ -×mrÊÚwG÷~:ûK8º2•‘Û.È^H£x ?Ln§·”Çሺ©…ø®Ù¨.QzüesîÑÁè "o¾êó v4Yk´‡Ú¯<ñÙRš×œãa ÝΚñ³/ò ­õKtÀËBÏNÛæÅ¡z‰Ø­ )—Eôàª^¬©N䈻1‘3Ö_¬“V^b¸žò­‚äG²×Ï1’Õ°‰mªŽå^ìóaìó÷®‰ÍM1ç9ü³¸¯®P@2Ù¥¡ ¬ªÌc‘ë4gztCn÷ͧìÎ ýÉ „^zÖ¶ó“±6¦6Àý ò/ozw!ì™q¹.9àG'w §*råh…tœÏ‰ª›bvÕH]k!hn€xOmG$‰‰°I—€]-˜h’o‹˜ˆŠHÔfûÍw Ü‘O„ëžóK£‰1çfL~ÆÞQfäUbk”Õ!|µ\–q€ô4Ô+ÃÛ®[æÅíþ˜?ç¬Ô¿Mòî]Ô;l [a0À,»!}AŸi÷J{¯¸AîVF›þ¹BÞªñ«£¯Õ`òRU¤TM7ÛÁ³T~Ó!R¿þhá`Sÿé B•Òf8åÝ×ûú¶Z¸dLX—þØ>ij5?µJPAy{7ö–Ê6>¹¢*6ð=’æûÃhБXoç5’ÌŠRŒ²’"fhº†KX~“W Én¨…:ó¦B8=šzPµÆ5Í~Q‰J0ü׳]OÃë` ~9¦¾ð}N!dü.‡äræÿP™`L¿Ðiöh—*/>LS1ÜGebGdJ¦ßX5¾‰“/%KyJ#–ˆSb·UŒaµ(àQ+ü8:êG~Ë9e׊ýWÍõ¡7œ'ƒÎGÜ3$õ¯¶ÚûHU >—Ô‘¡ZùDö7ÎÌ·’Wé=B‰rCªúuÿ’…óq\ÖÊ Jë2µ, /p¢«Û:S ¶ÆØT¦gNd­xå¶ê;c€m»Ý¼úÁXõ.kr½ÃŽI6NnŠ3î¸õ1£îìåØâQðFžSP£X¿üà6‡Jmᇠœš;‹f—ºË6¯uÆG»AúöSzTžA°¿£¹,5‚“à ÑÈk¯ËukŽüMp×n½Í4~pâÇLj²gâ²MÙiyW)"ÍÆÄ;q|Fp¦;†$ÖÉ,£;s¦e¹ß Ãq û¢+ÏÝY//¼TKò樉U#àfç=| ÍÕô'Äw•àÒ^¯„ŸMówÍíШ7_Ñ6.Ól0h ö{fR=‰‚ÌžÌÜRÒžáåœA`Ú ‹Aüãå®Küð reª¼c¥Ã,Q 3xb 6å f?ã]í;KÅH.S…'aD""ßi­™ïxCdÜvø:ÍÂùM*šù2A9Fs¿åҔⷡÿ¾¦Ó\ó£È§x}L‘7¥yÃxnÙ29•…õ@ƒ´ÔicAñÀ•v Ð4a>±Ojý À_Éu ©ävÅP4tvð›[+þ’U¤$!R½Þ‘šc<™Ý3”íÔ{ÈÑg°v%V”ÖɧîàKš,^‹t‰@‘”·ÜŠ±ù·}æ:ï¹ü¸Ò Ë„!/ˆ’uÕvo}¶|Â8ã™ œ˜Ù»‘ƒq³÷Qwó¿åè±vÒZY0ñ؉خֺ#س€Hà´Açz¤eœ „Ý£dzžòÍ€!·%--ÂñÝ|sËì¹h×ǧ€¤‚·1 ý8IëÄ)ú¼FY- ×욊>*'²w¾FÒ‹‹8:sO}ƒ¡žNî¹ï)m£räo+9ñê­“ZYÝ3M\‚Z_èæzûU÷êÀ}ð:$§?î‘QÚ©Ä®Ãw°ÚÝìºÙQÈñl®lnøÈ µMDÔ³Õîèv^øÚY…”K¦$1‹™c6¶»q%ÄAü¤D€j”MñsOûSôy?cêí× K1™Ï]°K:”C]pÈì)­åTgCh â „ Û§)pƒb:NQ]碷'Ñï¢Ñ‹¼³Z¥ ƃ6|åƒÏ·̃nÆŒ5ÎáàíD¡ì<°Äì²®þû-q¤J)OGÅ'o’3§Þs y*XÚÊt,Ôù8»Ê5™ÞÐst°šúAv¨ä€œóÝyuÆ=1¿©}E/e<-ÀØ,K̦††‡T'_!‹jB˜p!i¶§MoÚt(IáAòou_OË ¹¸é|E"?•ç/>}ÿGAA£Õ>­)ÅÒÄÖx[˜víg«Æ¦+Ód^!G\Ê€meic…¤Ç9(¯Š 4ÍL×Qwä2i³K`AùøõÇs¼-¯9=5h%\{ázº&y¯#æÿ#‹žž'þ)œ][ /.5.ýVÛ<Š¢¦ÖÕ—5I°×Š9«Š‰†= ä"_<›x¡ÕîÔPÙ!ëÓ`ï­TFžÔOyå ìòDômhÜñ"ºcáþŽ2T¿E{Q ñãû ý«‡º“¨³ðOo•Ø|>¥ñ’GYÇ*'q¤‡zÑGÈdi{%N²†nÍÜÇÎIJ¹Zn¶/‹ºôI\‚â Pa£-pî¼vzŸí%ǘàÑ5³Â²å ñ‰9× =ç”è<¡a(4YÁ Ós›rÛ('#M`öp/[5SxA-ZÝ5EHVü>€Ta)fIäu/²Râ½{ïûwnm¯ŒOsâ Š©ÓR—*™ÛÔ´ÏÐ'¬“X§)Fµu-ÿíÊrÂN‹éL8zŸ:>-^€ÚXðY’B¾b„²Ü왿ýX»õžb|Åý»`#öz¢æ ©hªGV7µFúæHJ}} Ó§oy1&ú(ÒV \Ä0_‰Á‘ooÿË«ÜÀ0Ö.mögT¶üEä;D¾Ì¥žHX&l á!ž‚2ó]·‰‡ Fcc£kž¢º‹F–uÀ˜«0º±éF&ôƒá¤êÞÜ6iš"u÷<[™\•ÊçÓlÒӨʛ'°„q‰| Š°/÷C~—Ý#ØDjí!Ô¡ìÛm­uOþ¼U†¡Ò¢ý1ÛÆž yNk| Ÿ*üPl´&+2‘½,´Hžõß*à\ÚÏ¥«)Ÿ#Ä»p?K”MBÞôÏ9¼ Ø«öŒŠ†¶ØÖâÉ™–j¡_4^å)Q¼¥,ÇòÇŠÒ/^áÒ?·›ž†8ÍzódFÝÑ^G©¿Íe\¨À®ð15 %¬2ïr“ÉŸ¥DÝäù]Êš²þa8.·×Ï_(èø‰fréºÂrâÎIç³Ui¹‹9œn*|Àl“¿ ©;Þeý]o ’ßþCÅDzn§2n¶¿+ò^`Lc\4U…Òü©Ì+ÅgYœ¥«´ÿ«Œ ñPâfj3„çÔåþœi?íãJ`šã_k5ÅN7Ž…õJ;°HeLz‚¸ä‘ÈÑom¨ˆæÙrï$ß]F¥)XTÝXñµ öŸ%ÌW1»Û皣»\ÑÈ¢üsoáVACîµí4îê´$ÊcÎÍevî(éÍýÇ–Ò(Þ‡¢¬U„ÉÛî7äºÍãÓ ÂP›ÚôåÉ ÅÖ7;¿BâÒª¬?77Yikz¶Õ3ò,­'û6~ÍßË µB6À;Xù´ÕŒï(Œ.é.‡6Ô™dÁ,Û€F5nXŒ¸zž-\"%H z%iæîs¯mš ’KÊ>É)½–F+z JTø“¾åhçAá[ÌÅõ~R|.†ã9&h»`r,‡Xœò#§ÔNÒvlèœßSŒçÊÆ6‡!˜_þ5V>.Œ€ÝCY$šåi‚æ•sŽŸ“Ò°$`Û+á6eíù¼xŽHsÝÜaMΊo£1¨¸êÕkp0fæ0R}ȵ‡S(ƒï$÷ú/³‰s«TábCd)$X„)©î­L/UµÔcÆÓ`*ü¤ )ªÌ6‚kw±ó ‚kÒEÆIx©wÓÆÃ*u¿æ ‘LçmZ%Þ—ÄÏ\¶©EŽˆ·•Ôs½Æ¤š!NÖáÈŸ÷È$›†x­ú4œ¦20ˆ8Š!}BÔ5šùYb-ç}ÿÔ3$fþÎM£|½¶¼^ú´ƒÆ`7Èè‚þXÁšÄÊÁ*äÛ¿kOYþÔ{.¸c–ìSQ¸Ç˜Öp×Ð ~ìˆbâ$iÇ ð ÙêAN˜o«Öö“XKÝj…dûôvzLÚuë?”å6€M¾IŸ[dT 8àžŠGQð}Ó}-M†»”‰D§«ê·)£ÿŸR‘téÂô·óçã„'ó²83*RJÆú´µ1®ÄÎÚqº8MÁ ò¬YR`¼%\øÐ…“ñæœÒæy¡ˆJ¬àÌ(’Ïk$5jÅ –(χ*/ƒw_Š‚GB´/¶T°pþå@&õAeˆJ@… ²¦Cts<…Ú:@·K+Hqß$B©Dè¨&4{ÕB,@ø3"ìO#ŸðIÊAÁ6RÈnU…iïC»@8¨i2½c±KÛ3R}9ê4k|—I¨ËÇ ¡»ÃÏi¨iVÍäˆÈ—ªpï6aSÅÀ®@šò0˜¥—Sb—ŽÓ™#œ‰žôøKã1¢Â»*ꢛ UhS\X“X1ˆ;¡\šç™6…ÓeÈêå…6K<áÀû§1^¦+ò·ß’ÅšÜ.@š«(„w&eÚøç­bèu¸±Ö/$xä„©D{gÑ. ïõ¨ìéâÓn=ÿZwéår«—ÉÒRsccê5¦\3ñÈ ü†@!Ïræ²hQÞSï)¶)È&Æ×÷ó‘)™i´û[Ü ‰£aÏ7½%ÊzWó{m:¥£/¬Íâ&¾*e#ÈJâzl™Qî£ÿ‰¶¬ø‰¶)9ÌZ|ñ¡‡Rþ°„ôØO Tÿ…5[:>ˆ-c\R¨^ÌNK«y©‚PÅêØ45G?;Ç+!_[v«6Ï (ŠîÅí- 4¾¿réí40Ž,Úí¶è‘ýs\<Ù¥ w¤/ÝÔÝàpsØ… ;uÝBDk¡ŽtOµéítÝA€Á8:ú°üþ+Z‹-Ð_àa¨3z¨0=MÈpTDÑyâÞé-pÀƒf!}SŸ —rr_à0ýa˜ §áþeÐÔ.ÿqoà„[‰-.ŸÇ÷½g:K-ÆSC}àÜügËhŽ¼ÝDAÛÉ‚ ŒˆTj¼pk/ø.$ý¯~§2¿GUi†t¾MwUucñî„Ï6±xByNoº{->å¡E倵Ül—¬ô3vºô`Gõ*¶5¼ æôTœòú Av¹¤P]€ GÒì|vçbœ’áMßØ7Co☑¸~}à\zU%’Ä ÿyĶÊ+ÔÚÀ쳶ìq÷™Ù‚¸²Ì¿ÅwLw­Š¢Ž!vØÖgý"Õb×zÚõç_»#Cþ¦ùîûÞwÎE¯qHiì½~ Üòå·]Ï¿`c©zy4E3ôùÙI÷øüùØ aŸÀþñ„£ÞèHy¨N¸Â)¬p²FÚÙ°_<©®‚Ÿd¡ˆYŒkZϦ´ÒÕȱ‡B¢à§?åýá åæH¤Ž•È¬Ý¯¶°cLp%ý¿C³ØD2ÚìÕ—?a)§Ö1×Ü*ŽìˆHN2Ê×á_Ótk,6u„7G –†nüÊËSBm¢t‚­¼LâJùGÑ2Ÿã–én6öNqõÂZÔm"öàÔxþ¥Ówcr|ÌZ–^ÜÖÀ^ßó°ÏÍÚᤑf ’šÀ¿6í`žÕÁ‘í 2Ø'.updýVÚÕÿ6YÁcŒkÛǯ½÷FÞ4 ýH®è›8n˜3cô`•;…>›â­”wÈÃÿ3öŒùÅ2X'׆5öê­PB‘`åá<Á ?¸ôº½ÚOµ`L¡ðhÿ4&„£ÓÛWÕŸºóiO£cΛžˆPµi0Ñк`NA¸C×@\˜êù*\”f!¤d¾¢ùéé³.ór–[Ú#j h•D7\#0ܪæT›1”óì3Mú&¸)ÒtÙ 3«wÄ .èêðtð×÷pÌ{ÿ~?°ÞZ±ï”E;ëP©›µƒ˜$±‹:"Ér¶_Ü×zóÆ Ý$t\Óvý¿ zkAä?"çMµš“þxyíDç:ÿw~À/ÎÏLçP¬Cé㥜AXVTÌëÞÛ/å7­  LÂ]c buÞ©:FÜmlNƒùO6KJß?0iµqÀ=÷8¿HíÏzg°€äÃ[QîBhsß’zF™Éw’¼ !S¨¯¶Þ`òÎð;»H‰“‡o!Eò¯ÕèþTòCï¶Êô†Ñ›¬™íû‹ËL±èð¥Là ©¯6šÊ çãÇ¡(Ô–<;=ƒÍÿ•“psxB乪[ÐTpnó KÛë Tÿ£¨ê´…3gbCYûÊ£½ƒ7c?áßΩ(nfå:Œú„˜žíû©ÝiݯS‰Øn<™‚Àh3CÛß_Ö ˜3—ŠE­,ñ­#Œ:b=æ k!áž‘Ê|3ö= h‡ô&òôç°­~ÖßYÕXAòs¹Û×¼9Aö urQÙÿæõ§æ6Œ`/ «iD¤õ³“ÃŒ4°°.,ö2ü™^;Ý·ê ˜;…ˆî5/Í¢¼Òt†—º­ÅbÊ¢óO6{vIåEr]“mõŒÉR=–ÓÅ$ZúòÈŸaûÂkÉ$fLQÍ£U{¡z{oÖÁƒaë¨óŠ€Ûs©ß{n¾†¤¿ ‡A6 @8é f¤2{)÷º±?ÖT±z)¿Í@x‚»æЙçëÿ8Ô]îU—èMÖ†È²å© ˆˆe'¿ ¤PØïÏæ-doÜbev­ïêK_ÑßZ—l‰2¡‘ä £FFßá¨K¼&|ëÜÖ ®Ã¢oø‘5NrÂlš`‹U ÚÔB:Qßgë\š=^>v1©¼xCíØÑ…·=pz¥feÝ“ ¬â½¶@Á0Cc_ŽÓ¾ƒÌÆ´A-²phGçJÈÇÔ I¢=ñö±Ô5vë *gÑ6­t ç†X'ã… ÈYõû[¶ Î0?¡øÙŽÀÃ~øF©Ú=ÈÊþ Î^ˆ¨e¤:ÊŸ–UjžW¯Gÿ0NлÌ•‰AÛvð€=œÐJ X5ö^ùÓI6[ÇŽ¯h„+ŽM¼o‡ß¸žŠÅP+ÿ®´„¤Í1…6çK:ûŒZÒÎoR.á1v¾»Šc„46ráIJ¤3M°~Ó ŒbŸ¹\“A_­IGîT­—~tñitæÓY;ÿAvÅ57¤íüþÝSÔÿɢŹ"·ðËfÜt5È+gÉêZ¤Woñvòî—ˆÆNæÇé."<ðQEaDqƒ ù|Í–§Xˆv!®61Œå¬à p3Ö} „p¤þpø{¸ýUèÏQ%œe8¢|ðO8² ]ÕÍà†Œ½Ù›ˆH°YR¾Z-„»Åt­X OŸÍTLøÀ÷º |d¯@¾UÀÔôíQ §XHÌk>uÕ_v‹J°6—ÒBíº¥ûŸqÔùÌtÈÒ¾†äR:(tÎYÿÉ$»Ÿ˜q鳸†ÿ|HB §hßRÑ•«0cæ§ßÄqé>¡Èø­‘•ª»±ßùò¨—×ì¨G8²x„÷é™óº_À2NEaJk¤ºÆsN²(5‹³7“w× ¯9Š¡Äl€<ë­ñ_Å=K‰aj_â^µó…mphÆa±Õ… ¡^Ö„ª”øf¶!L€œn¬2æK€‘÷ÝYz 5ìqrþÇöŠ$|§ïË*}ÊIŒ¾\Qåò¬D¸D-G·|XÐû®9¿œÓ„EÅΧÀ±¥ÇjJQ*L²¥«èN†Ô3¹–®üÀz+Åëœ~„—oûš¢ó†3ÜÙæüóÉbOƒœL€^éG}‰ÙPo?;kÀr0)9ŒjË yd¸‹ŒD„«}ì_øXÝF~B¨/îÁ9t m] 1)¿[‘!”ÌDöYvSç>wƒ.¦Ô&-n˜ôYžM7ð¬n±jä‚ÛÖöü~„¦­´ŸðmJ¬-k2hüóvÆLÙuQðid>oqEó9¤Oô$$íÄkæÂFìØ㯣î‡ïÖ sNÞWÄ`e œ8GÁ©µXø·)³Æ ‹:#Là ±Á²jS÷ÂïD°5TH²ó8¼Øce‘%Ô²w²é%B±†ú5am8ÔGM3*ãQTèä,üR]DaòôúÐt€þ?±œJl´Ý QÕfQ F?ÿv ãÛÝIœÿY ,}è† e ’³·ê¦@Û®’(÷¾DW‰ÖXuµìÄì&xåKˆ¨ÀÖ<‡O¤ô‚&ÇѶœÂu›a¤Äîw–?ÞB„Õá1…à,zIùd×5…3¹äŒó¤uݽ‘â{Ë=Ÿ—‘¬°½8=æê‘f>{bÚ½• {¹yLV‚pDÉÓÕ¡âç2w^U*Â\³êÈ78]u†ó¿õÀ¶P2s¥FM88òÇy^ëU¨'Ô{Å Erþ€4êlb"5TÆ=Þy¬[椑$ÄF¹PÌÛ˜=PüqšEãóJa×rŸ4´¤ÿhûa¨¶è:F«©g´ì?3('P‹ Uý¢LÚµ"$\FÔfìw)í†Ûw¸yÀˆSysR›-iÇ>WÅý‚¤77¥InKC†À+oc?½!kʾaW09©™D3f#üäÀÁLXÊè|m+yw^ð¶!Ô‡u…y½C@0O-5IÆ lþšý\aÐô'uf;à½æ¿¿p¹K#_Vç‰{¨ÇUƒ±a¥ã2>¼Ö=u\¿€¿CÞ/º’4ÎTbII l¨ÒlÀNO7Áq¡ Ò@‚13NyðkB➤ùK?oÿîü!±…o=Z ÔŠNUŠXO2I+±%‚]´, Äˆ“£˜Y-i1Vž‚výx‹û,ÞñZ‰7è´2scöï´ñØÛ¼o31߀)róöƒ h >ñÁÄùnà½ru.òØÎ1êu€O™ Ķgª$’ë?ô× ÊÎßû±îBe`mÅ#·bÈÂØÑÔVKß)pͨ—Xåâ‹èyÝAe-@5¾p|lh‰Œ¹¹ðýO¤^ïçÀ3D¥8Qs ]® Ž|ò¼ z. Øø° â6n BQ­9;ËČʱ> :å‘£ôI·uÝÎÜb½£Lì@Õ]ŒºXå)ç@Re–šAîdº j™ 8Y_hAغhzÐ*i[G?:q§I½ ‡N÷d,^7ÊÞ=[s± ÃRQC˜ÐÔç餚•®=úß7a¬î4êñ¸†YËŠž‚‡d$* `D‡i~ Ú%#Ž-mB眑 hÚÎÀK 82,¥xÜHz å D»Åg`HÁ·õ‹j2ùÙº®ÓcuÔÚ¶x 0´æ`¨ \TL(®rº„7þL˜„'9DbRW ¤Ö®Œ„2xHÌS"Ó©N±N%]yOõ%úˆqìììÔÆø¼Öš÷qª¬ñâQqp K7FÓÖé‡E3U‰²‰I,Çe.‚ ;i GœŒI©Ä—fHÞÎÒÄf,³F]» >ÎZœ³7úðwTmÇ)F'sÊ5²~Q6C’Ü›ˆžq2ú­®Æ‚Kþ冶x»œŽ^®i[¸Öó"°,–çÖUaߌK1ÌB¬pU‡ç´¢}½Ért²Î ‡ë­£@\gCß©DÀÑJf:ÁQÆÚþŽ è´dÀ¸×Ìcõß­òn¥=VÏ¢#W`®×h|#ŒwDq¸™º‹_tp&£ýæ8t8SÐä90y;Ì-µÛ¾àfŠƒïAâÁ-š=¹€Ûâ‰GÊU›<ÛÛ`|FÙe”§gz Å%ÊKá£ÉMô;b?lê‘ËœM…òf^01çxž^sÈÌ/ô± ¤¦9ÿ¹¨0ŸÊÑ;2[!¹×^:“—31Ü$’Òâ00{ü2xî‚… ^š8ØãF)±&Œ­9ŽßÛÇy½lœ «-¸"ñ]WÝ »]uEIeÿ<íW©Ù:À3:IFg-òz¤ ]Gq¦!`*R€$© ÅÖm>øxbçàY2sŸ+a]ÒYQªz0Vì˜I1ô}£»:– ù²ºÛÇJÜì—“VØqÌ,å[«…èòáqb~™'£Ðñµ[}¥4`k´é©¾ym¬¿öfKŽÂ AÕÚgnb… 'eM7O™y^ØËžÁÎäyaÃí‡Ûk .±‡V÷Ð9V¬_£ê« å¾íAoû‡îì ™ÆNÖ¸ ÊÁZæÑü(ç:j^5Crªr— E¾…𰃩äëç‚ìVÈm:;ñ_ïT»·ÌÞ÷'kÇE«îÓ/ ÐHq[„c¨÷Eäuü/RhØ tSÙQ+*ÙœNóW¢éQ)ÿŒEÚ‡ j /Î[\tÈz«¼š\–€Š…‘¸ Ó°Q{Ó®‹~¤-±ÆŽÄbrTûèæÍŽÂìÕÊIË€@Ÿy€°J:ë9ýç+Ò ©=_¯ok «!ž)T`° á«ÝÏ­G¥v:…yha©½±Tß—ÂV”r5ÊŸ½Aå‰qªC™‘G–-…³Z –/8eÕl+¨–,©ÙOù:§šÌcÞ’àƒ|OFxüƒ#GJèô©š:Qãjýhà$XExI¿ùÕ»¹ÈTsML‹q1²ñˆ=!ÎŒ ž.ši£W/[P¥|5)·:Ni<0Í– !ö®¦NàÑjð¿®@¶ÅM3ÿØaþÊ3‚[Ö8eúöÚŠgÄEMoÍÅN…Å̽Ä06Ë«¾5R–Ä€BúŽžø¢A„­CófSGù½‹î¾fX4-MÏF:-²A¼ˆ—½’T‘Ȳ¢eÓÁ.ß sIZ_d¥Dôâ¹Á›¼or@Œú*"~$æ‚yè¢/Æàªæ¡º¯O¶“ù7>ºôõ˜zÃñÏŸa4™cyP*¸ÌÄ´˜’n&âÙ?™ ‰„Æî8—™øl:ª `äBH„{%õ&[9æï2¬‘¢X<Ð~Ä/nME@ßš[)¸Ï4ß°7œR%Þ%¹ÏšÈàíû¹g!ög¶æièR“äÑ>î%~‘œMà3Õ]úý-&•ûl zA{ŠÂ!Ù?Ž}IÔ—L ðãÁ¯QóÏ}ÏÎò‰ƒ¨ŽcbñÎðr±Š'¾CØ÷•FVfdŽï¸œöB*À—©•«¥‚üð=w3×q­ûj…ß&ÕÀ€_ êP9œž¦Á!jh¯ºY¤ë+·µˆY--he‘Ëo q¦GC莥çë¸pSzšKÅÙ Ám3Ȉ扄¬ðâ@á}iHv.€ ÂÁ‹#ÒÔâ‰LFÑú聾HœN Ë)ý›® ÞA;ó#ÎRûf³›UVµ‡ÿ¶Ñ½3Þôƒ¥2Ò±Å~!À”B± ÙEðŸë~ÐW»nÛ–½6æ_]òW¢¢ô±ójÙ÷E½:`5…é×MÓµ@ÎCÐ|$0MAŠ¡1…Ýæn»%œèŒ#ÀFŠæj•ô3jkž}>œ?Dï!„Œ×‚¾ºÞT^.¹t)ø¨åt¥ñ˜å–´I¾=º3{``ìÄ(Àr8m Ä:ŽÐ=]~ÙY{›£íÞk3îLÇÎæŠrÏÇfE6ìÈÁVJÚK*Mo/§{‘. â0Ò);"Â_@ß\»Åmìð¤¬Â§÷×*ø’C½Ød‚'GyææYöO<Ïy&vÃnˆ‘ 0‡à]2™à ñRúe;ÅÇ íp|:§½Áª [Òð§Ä-­þ¼ Aãê¢\sòÁºåYl¼_ Ûɬ³ÊDèL”ÐÛY\>…¶-¿Jø/ÚÀÖÄ™{=Õ¦@2ƒ;ëº"Ìá¶yõòcÌ— ÕÍ0wÑo)MZ,•Æœår`e!T¡ORݺty(Máì^ÒR,kýù+vüÝ"Á–`ž+ ©ž_ì/@ôBo“W¢v›* }](ðkmåévqOÅ D‰¤2 =gàfØ_šBjºC—y­æ½Nø–V%bQ%ªâ†¼»FÈ$h‹òÊ&z P’6çâ¼xÙUl ݬÒû>`'Ùô¦À ’_í}1­ l¾W—“Ã#7Y÷[¬‘‹¶Z9kzó~’u;Õ±°M¿EpòV:“ƒäiáϨÜI~ ô¯„V> sÇcüü˜Ó äwÁ ,ŒÃÖ[.á8"£O™¿P 8óœkiºâ1áð"Š’Ö­èÒ”zG‡2s§¬q»3«œÑéó£ËÝóAÜrWîaC™fÇ»_Ë>àšÇ6›@ºo±("b«Â`X€ŠyÛLLuvse¼‘F±fó’AÐ5KÍ,6 |jGx à=xº“À8‡2syöRXÚ%4ý#–KÉŒ1E®Öø^9ûñj|‰tJWœpÝŸ¢b5+D‡egR‘IBu3/c:²J<0ùc0W~P|Ôrñ>Èsãðe³™ÀhÀ®Â=\r^x» ¤6·×qijT¾è9ᆔî ,¤£Åâ´ßœ&,uht0ªG±z6iž¶4pZWÆÁÅa7Þ$[½œX‚0õ„GôÁôE“(M2)¦l¤Ññ‘b‹RBZg´P‘ƒaO<—[cˆÁá w^‚0bRµP¨©Ê! U¾E5,½¦¤PDÎC5.qÁ—€NânðD³KŽW _ÅûÐú½è)iA_—µYI"$œ 1< &'oQàÓ™dQÔAÈIõuúÝOÑ­ø,P>Ï~vofD"ôýWPµçª,Ÿbl¿H)I»•q‹±øÊW xÉ0úÈðöî‚¥}eº¿˜(¯Â„Iö—f?6wa9k¾Š²Ùa1ŠÚM¾»X«§„G¨tr&~éÙ&˜Ü~ÝÕ£½1™q^ñ…Š¹â´‰›¿Xƒƒ—.úVJxì’&4<¨­¬°a?^Ð ©ÔCÄ$³‰±mŸ™“{îÆ’OÔŽÉâ™ù®wa€ßŽpø‰k/YÒ¡½Ò=º ßÓˆv5.t­ÆÅ ]Vc^A8¸ˆ¤*Äšcübê!dá:Q2‹ñ1…ä*»ž¶§FÐסQrÃO) «‹)>eGµÍ¹µ*5 *ÕÅ9G0™V8ï“qõ\¬¢™½!Äu^µÿ Hzƒ_žZR}Ì9šp¾–½Ú;-™[™5nƒj¢VâsW×.YxÒz¿1paKóÑ¡A¬¤Ê”qîÓå Yú}W›3U™·‘-@ÆÙzú C6¥å/óÑ,þLEDxKÒWN?ðç¼ãÁedóø²Øg  L×@°Ñ,yÈŽv<¾®s»©Sa$:í[ö±––¯Køµ´Š>œÐž½ŠúÃEýc_Pá—®²€Nà–ѶBjš9‰“ÎÖlè¼ùKº\\P°¨ª­–ú2‹ñ‰“ÎÍN¦}Õ?¼)QæXpÙ„%(œçøëp 0»sˆˆÌä"‘=ø´k€º ­Šþ¡¾Ãù¿QÆEŒ$èB”êÖ1¼¡‰Aâj{¨ª¤A/wSú"sÿOóAð¹ý«§U¸#* @`I½~7JG,£bÑ$E“B@°ã ¬ÍB\¥†C{b£À ñ#¬tÓ®–uõ›”åVnó×&‡¬6óûuâ”°÷Ú€´? 侮”¤^«-oLñkö41uî—OŸƒ¤ÈÏ@ŽÓgÊxÑ|¶nꘙ¬ŽJ¸uŒë»Eê£+ÖM&ý‡½ŽE/pF¡t.‘ø¯àØ©…Õ¿S3UaêÿêJéÃSòܼ\›ÿtAòu¯öÔÀm¸íL®Ýšù—ßµõbóK¤Á–³‹lxN¹}jó ‰qˆkçâ!‚ìYp"r†%.£"¿“‹Ñèõ-.´„ðF`5G!Ìõžä ˜W}¨R±h%·FÒ· W™:s«Ý,§±’êy2Ök3›>˜?½å'Içĺ ky€+º ŽÅ]ÖAÜðÓÙàˆRyŽúöw}Ä5€ *—ÞDrtu›|\ÆÑ µ4±ùÈÁ:Ï­%CX&ºq59ò>WŠÖ£2_Æyë:«;gCÂNÅËêÑmàO8ü ¢ª‹ÙÕ94>ÛΙæêÂy>|Þ÷¤vg$+×Á€iÀ âYœŠc(Aôód'*pzÓ‚TöUë8÷áÃ{ÿì‹ yZ½€¤1§ÛxNÕûAþtœYäm@úgY™QdسveÅÁ4i«2ÂðC ¡½YªêéW<̨FuROÍ)0Àžh›«ûœ"­çI‹xÍ!zrŠF…¼=5µ°ÕW&ÐjL›­Ã m¬‡Mb?‘YÂX¥™,D¹î/' vûçÙsñmÙ"Ä@pÚ&áb ×´G þ wè•u0õ²¬×Š‰ÚÜlß«)ìEË òë®Ì@ßùa˜´œly#ŽžBm¤mŒ]=¢q¬õ¶¤+²¢éÔ®avï‘ÙÁÊizðø7¸˜@ªwý ñ‡•‰UJäyæaAV”{êÕ;¼‰ëA],+wy,SOµñuoI~ú¯Cã$9ð'•e`ž@¼K´ÛºAZlp_4Tw'41ïz±nà5UK)ÀJj˯Ôb\ïj}È›!XÜa’؟ʶŒªWñ÷Ÿ@Mó!®+‹05„­»RäP- [¹àÜ¿¤_T"3LoY6狤 Qu:ü[q–ë,& 6# [jìðàÿvÔ°šÃ/a+ ÝÙVÅ@®y#Øâñ>M>ð'x-Exûók¼#qÅÊEZ·và­G’B‘ÑFK­&“ž ÉÞ¹Ún"‰~åĬçû¨«ÄnûÚâ¯×ÝL4‡Aoyº™3û"uá¯f¼Z~&õÞ'ÅÞX‡³ù÷°>ôÔäÄùˇ 1$˜)b­û˜õõ|ÝÅFµÎºïþ¶Ô¬/“ çM9¯AJï¡øç¸_bèd(Æ8”îÇ°ºqKwDˆ…" ¹œùÁÀäñ8©“(ë\Au–-ˆ¡@^-{Ð-ÖŽ"ØúÃ^•†é~_óÂñNIf(‹!ÒŸø:×ÁФœùe*?wørÑåÝ/7í4WKäwcÿ×:C½Ž¦?¾·Wº±Ý_ù¨Äð]®IÖ´Á´ÛõøÛŽ~ ¬Diߧ-f¯a0kø‰F -°uñyðÅ.üËWq% &¸ØÔÏ—”Ü™ <Ê89Â'ž%yd‘ZŸzïðêñÔÃã&ßÈ«¢†SÜð‹-Ž==-l_©)ôm B©+ǘŸœVÖ@Ì^TPª¯`Zÿ~r¦!+dòîPX|bO³edo>•Y1|ÝÐlòCOSÕý#5Ù1%‘¸ídØ…ÜuDèÓó¢ó *$ikˆð³$Gu03œÇUa-#ZD 0pb^4˜õÿtÜðÅ.#_w§È6J@U }ô¯„+}Õ˜L­S²™ˆ¾‘,;%÷ô4OÝ$Åü­LÂ9‹Ïð#J?Ø ‚ °¯GLUmôL>†¾=@ÙÚô*VÆHýW#&¨Žˆæy£¡Þð)Ñ€OÊ|},jöô‰•ïææÐqæ]Ö…ã»| }X®Ÿ$Иý·6.@D_Ø/¬×£h5=”,x¤t¿;êð·õ Ù¹9}@ubv´Ú,TÍ€XË}]*s–@5 >f4e=æïÚX[‹ìʺ[°¨ÙMpê8½ô¦ÇnÞÜϵMŠæèÍÄ_ôCÂgZ8Î1,ÌUU;!Y¯öÚ|Z$Ï=‹™Ù:Ù›q·Ì|RÆå#4§ íêK²JYŠ&û̶v·( ‚£ìܵ1za0sxØ(mŽzEþ’uwOÛ.ºÑ5luƒÎ÷xG‡¤Faó¢}tû?[.îËÛÕ¾WÅIâß?&´2ͲÕt…;8ÒúOí“åŽ føl*V\Sùèxñåv6ÿ5š—÷0¬¯¼; 64õáC D±€:õnYóëÉ›š$¯8¤Gg»Ç¹Ô8݇c4/š>=gÍ-Äãnñf™°ä| tõßf«§%úãÿ=AE[9ƒ˜I`ɜʮ7j,;È™ö$th;Zˆ8Ì*]?¤y16ÌŸÆmQÖUµres(F¼øZBk­@´€êø\£kbv øGhOW ‰ƒQ›(3<@}êjöåx¢X±îyñ{¶ÌóV!rÎOU·i¯°íŽ™Jè€)n¬‡"i«Ñ`'K>ÌQÃWòy!Ú–ßã.<â.™80X FðôÉ8,Hq3Q2%8ÞÄïS`<5ýŽÛkL@Þĵz3Ãß,ú?ašÅNѬäoÀ«²(ʾ4þHó%•—†‡k=k°1à«'`ÍŒ¿0÷tEKŽläÒ_H¾môŠLÿùó<˜5z:y¶«Ö.þ…[Zjìf}§°üãZÜ4{CB³gb6ÃÅÌîâô’]³N-ƒe3¶­m?IÙKñ;¨‘ÑÐÓ2¤oò¸j§¦Vw¯TQ&ÇóOì¤Â°3€Tö ¼ ´)žÉ=ñ Ü×R?-?Ñù º]Gö"[­ËÀcÈ“Ê£[H—.‚¿‡T€†tââcå@˜ã¬Â\H-'/’`)6˭웆‘KUKž ¹²7M¡_9$ È ®Ñ­°è*Xy4¸+ð$ŒLåV9ôMfQ¨üß\_A ¦Mæn^¥>¢¾lôE«Í’»½Ï02áIsS}8M‘ÃC—–ò»=‘ÊfÌ(P8GCbƒ­*7¿“íy ‡*J˜%[rpAôÄ™£5EG6*9¯­/°c:ùá‘DñŒ,¥G$%‹ör—8F@…êÆ4êñÏÕ ¶x‡p/¯À3 » R?W||.oû€‚a1äg‹Þvç¹XpÄa1ÆÐs°”ŽßFSóyãшycqÚ˜wmtw½¡íÕ˜e®þ(…®jìÚHÁòBA òÿ¯ó¦[-Wgeº´^ìóqB%ÒpfjŠZ¯ƒsâŒý0ªËªB®†l ÂqW¸ŸÉÊ¿Õq ‹ª"pNñËþà¬R¶”ÖÉá+5¬ž‡ „”¯eyf¯

&ûä,iþNåçHz °jï Œ{:öFŽ¶N v.Výì¬Ì~Ý S[ɘKâd¹·±ÞYO1lÓP ù’̬#¯vVRa—KYÉ¢ì,C/]BŽ INSH†ÚnÉd/(Ãqàô«½öGÁïÂó^6ÊÚæRd-Ô-¥O•Ô'dŠ\$ NÜ:aV]»ft“«=r#|_éC2Só-dàNgÉïQÎh¸+uwK¤SV,Úø–°;síUdqˆBKèYìOÆÊ÷ê^§1-hZªÏ]¡y³Þq» qH´úžÉ¿jPC”¨ï7‘lÍÖÒ,Ú€żïÚƒSš‡²¬û«î=ü(‹Ë Fùd¥4~I0cp9°©ã(Úc_”1w¬”÷„Ìî"vÂh+®¨-ÞeÜK‰bý~Àõ@¸ªÛMù@Rº"h¼OB¥lçÑãU”«€7ŠQ­Ö ʯÛ-Ídg«K‰/0JÈfZ:·^qÖ¨Ïqú¿U˜¢ux ü˜­š*Ð \6oܦ»«ËVg8½¼%ÔÎ Ç/'º30Ø­›SÕ°l^cb3 ÿ]Ï0ÇÇÛŸnÅ“dqì×S±ó@ŽèK›Q%çbNç7hXiiCJÇ8I`_áôe%+>£e·ö2ŽSÕnk‚1óˆæžLÇ<.P"…r7W³ Bz7»ñë‚1sÎ,§Uýá`ãû =fqp?m&æ^çç1¯é)× —NÊ8XR+lɺÿ~oÊ⺹3.NÏ ªÜ8²Î«äRmm Ø¥2͇rž[:‡H5‚‹=HSŽcöbLK×úó¶ƒÚ]Ì\W Nv 31è×ßV®«xf]“.WjC=ÄH+ýTé&ËÓ°£_yíöQj¡³_QL8òÆ„%7Ùcnd/PH…]^95‹‡o˜n7u©Ø.J°»J«®}s¸POÚûpŸ˜î¬Ç&n—koT¼”ž–òBpï†Fˆ4ÔÂãvÀç͉B–‰^ ‹¢Õ.9"Í^‘K(\.„î'9%{ÿ^ŒoH?—E µÕΡˆD-ú|ÆéQv-“6‡§óÿ÷7¼LÚ÷¸æ®cŠuGcŒÄK4Q»DzD„Í2ÚîR0¤Oª„ÒÏj~Í ‹ìý=ºöÌ [®rI•þšàåv8"fwŽn$é€öÁ—ëܸÂ'.VÚûâqæÇ  X߯fyŒ"DtÝ^Œ––‘è+ ”ÎN•³¦PãW—ÚÚ?ðÎ[%÷â‘̵‰å®¼üž¢À†º¼ô;Ûò¡*꬀s@ã¯Ò ~Ò5qémZq4çO­mÓÍŒÍôÇãϬ}ëý!R=ûŽL-wË'o5^EÎâí'ïN,®V#ñ +äÃÖK¹{¹É[eÞŠÁ×ehÇi† Ó:ÂE•³\_ói}Ú+ÑÉ,slB^LÔñXb÷°†¥'è“å‹Ùóht^P•»‘ÜnÂMM¾ÜTÍ`Û´ûTâU0î<(Ö³°*K r“ЗZ4§N*ï½²âîu!è$0Húœü£­.ƒ¼5¸½uúÅÝA×^°K̸¢!Džá"BûÑÿÀ-+ös×Löðù€(Ȇjãƒ&±aT`V¥1q… “¿ ·F®×1Gýþ¥;r,€¨•àŒÝw»„¤½€ŽÍ€®~Öô±?w0|1„ÝîtîÓ Frtø_±ñ=¾®ÇÞht.sU“Ô\ëù†½1$W"yw!¿žÈü5,"”Ž@7Â}$ËáÐ\ÉÐYôÉï š–çÑ0V¬˜êã½åÁVxA>BЬ3sýzi&;ˆ*觫ê¶$ËÂÞò‹e«ÂAÓ+tèSé–ö{ÁP,džz)& … oGrs/Ž]AXËȽ™¯åY€ØåWw›·Çç¬_)¡ž„)8ªÍÿ¦1€7$Ÿ«>ŠšŽlõxqÁ$fZ·+§Šlüþ¸Ô¡bÁ,,Î ÃÂX@úبö×9¸±pó6Àð‡;avQ 6yŸ–·šÿj{?2’*¥t¢†©©1‹Ÿ¼ËˆCþ·mêp\š ¿ƒò9 Ý5­Sbq‚­À½R¬(×öÕèP]ïÇ䧎Æ2¹é7/—–\…èŠâ²êè$ì5dîî˜ýêÊuÃŽIÞ (PB÷zpYû3D_TßþA,ó  ×l}£c{q1åçW\ƒdkVfm怙½YþN¡=ÃX©pÔr§º8h"ÿ{#Ì­” åær唈ք¤ðÅ~k‘ ɽ ||ŸÜ®eÝ7,%mÛ%+å&=y‘Ûx&ö? Þ­t`1•œkE¦X`¬yðkÑaKÚî’ËB^}±tõWW ƒÍ”†,&mðee¨:}XA…q-:9T¹Þò?Åc4œæøêÆSý?ª1ܽ’ªõÑá}h%‹J2&&Gj`As·v‚ïhÚ1V„ÏÆÜ–ˆæ .B*d!$Šh'ðè÷zyqu´‚Gjç? ^—²I¼C°Š©ù:n¿¡÷ã­$栄 *Þn]GkrÎ]%íÌ §Ó{e}Â%Qs+ѵ±K:ïX{{¿ÍÏêJ',\jOBbstMfÄ u\ Ø"ÛH +‹ÿ_qÂi¡j‰ÖùclÏRoK »|ÉÿÎ Ùf1Àæçî2°Šà.ù#Å$´¥xÑíŽO§¡ŸŠþa,äxT—Ek‘©º.žÚí¤,Ú² „ù¼Ÿ÷ÍäÅPÙà]˜p*Ýs2-^_g^w`´¼Y€²!µN¸6 k žže×êIGÿú ó½ùERæ}jåÆðÕ^Aøúþä¢iŽ ý=£šüÆ•Úƒ—0£’£ÿ¢¨þ¡[Gío²„~Zi¦ 9…ƒûyãÚ¯z½z[VEâA“]¡ô…îqµJŸ*‰ fn胫êSE˜áÒ´& ütÅ€Ú£±þÈ70©ã§Ü–Â:%ÝÔëó›|ë/Ã0âÜ—G™…9»Üé–ŽÀüþÀ7¬¯à~ ~T# ¤¥ŒæéºâÓŒ!øX/SLî€ã< óye}ïÄ–Ã2hW')­_ÖZÄRä¿k‡ñÁ?åFi;!éþ*OfÈx÷æ²WlMá9dÐ+ŽÐ/Òø™ÇNäRò§«TÅkÜ»Öipw«—KV?†Ò"'½ÉdÛç?* zõ›¬HÚÄIƒhàh]7¿îÆ êÚÝV3réà °\ÐN®D!»`Õ*DlNÁ@„Áqác‹¨gMPËß{þ 7'[ßÚýÛd÷ÚT%Qêi~4ZRMúÜJ·ño²åèi;J\]»–sÈ;Y>–W?dìcBP׿t&7Ma¹äuY£5ÕÐP LÙŒ~!“Ž 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL DISPLAY "Menu non créé" GO TO FIN END-IF6 CALL "MTH$JIOR" USING PROFIL_M MASK_PROFIL(COMPTEUR) GIVING PROFIL_M MOVE SPACES TO BUFFER_PROFIL CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-PERFORM.J* On vérifie qu'il n'existe pas un menu de même père et de même libellé... SET RETOUR TO SUCCESS.# MOVE IDPERE_BUFFER TO IDPERE_MENU. MOVE 1 TO TYPE_MENU.) START MENU_FICH KEY IS EQUAL TO CLE_MENU! INVALID KEY MOVE 2 TO TYPE_MENU END-START.9 PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 1 OR " IDPERE_MENU NOT = IDPERE_BUFFER READ MENU_FICH NEXT AT END MOVE 2 TO TYPE_MENU END-READ6 IF BUFFER_TEXT = LIBELLE_MENU AND TYPE_MENU = 1 THEN SET RETOUR TO FAILURE END-IF END-PERFORM. IF RETOUR IS FAILURE THEN? DISPLAY "Un menu de même père et de même libellé existe déjà" DISPLAY "Menu non créé" GO TO FIN END-IF.'* Gestion du qualifier FILE (optionnel) MOVE SPACES TO BUFFER_FILE.. CALL "CLI$PRESENT" USING BY DESCRIPTOR "FILE" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING# BY DESCRIPTOR "FILE" BUFFER_FILE END-IF.-* Gestion du qualifier PARAMETERS (optionnel) MOVE SPACES TO BUFFER_PARAM.4 CALL "CLI$PRESENT" USING BY DESCRIPTOR "PARAMETERS" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING* BY DESCRIPTOR "PARAMETERS" BUFFER_PARAM END-IF.I* Recherche d'un enregistrement de type 5 (enr. menu avec flag delete...)/ CALL "LIB$DISABLE_CTRL" USING LIB$M_CLI_CTRLY. SET RETOUR TO SUCCESS. MOVE 5 TO TYPE_MENU. MOVE 0 TO IDPERE_MENU.. START MENU_FICH KEY IS NOT LESS THAN CLE_MENU# INVALID KEY SET RETOUR TO FAILURE END-START. IF RETOUR IS SUCCESS THEN READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ IF TYPE_MENU NOT = 5 THEN SET RETOUR TO FAILURE END-IF END-IF.H* En cas d'échex, on lit le premier enregistrement et on l'incrémente... IF RETOUR IS SUCCESS DEp LETE MENU_FICH RECORD INVALID KEY4 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE MOVE IDPERE_MENU TO ID_MENU ELSE INITIALIZE CLE_MENU READ MENU_FICH KEY IS CLE_MENU INVALID KEY4 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-READ ADD 1 TO PROFIL_MENU REWRITE REC_MENU INVALID KEY4 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-REWRITE MOVE PROFIL_MENU TO ID_MENU END-IF.* On crée le menu... MOVE 1 TO TYPE_MENU.# MOVE IDPERE_BUFFER TO IDPERE_MENU." MOVE BUFFER_TEXT TO LIBELLE_MENU. MOVE BUFFER_FILE TO FICH_MENU.! MOVE BUFFER_PARAM TO PARAM_MENU. MOVE PROFIL_M TO PROFIL_MENU. WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE. MOVE ID_MENU TO PARENT_ID.' DISPLAY "Menu créé - ID : " PARENT_ID.. CALL "LIB$ENABLE_CTRL" USING LIB$M_CLI_CTRLY.0 CALL "CLI$PRESENT" USING BY DESCRIPTOR "SYMBOL" GIVING RETOUR. IF RETOUR IS SUCCESS THEN? CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "SYMBOL" SYMBOL_NAME CALL "LIB$SET_SYMBOL" USING& BY DESCRIPTOR SYMBOL_NAME PARENT_ID GIVING RETOUR IF RETOUR IS FAILURE THEN* CALL "LIB$SIGNAL" USING BY VALUE RETOUR END-IF END-IF.FIN. EXIT PROGRAM.END PROGRAM GMENU$ADD_MENU.7*******************************************************0*[AROBAS.LAURENT.TMP_KIT_2]GMENU$ADD_PROFIL.COB;3+,XK./ 4Mæ-;Õ0 123KÿPWO56Àãm‚Ÿ¥”7@ó5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$ADD_PROFIL.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 RETOUR PIC 9(9) COMP.01 RETOPþ»@Ÿ$ GMENU011.BXK;Õ0[AROBAS.LAURENT.TMP_KIT_2]GMENU$ADD_PROFIL.COB;3MþåUR1 PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.01 BUFFER PIC X(12).PROCEDURE DIVISION.DEBUT. MOVE SPACES TO BUFFER. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" BUFFER. MOVE 0 TO RETOUR RETOUR1., CALL "MTH$JNOT" USING RETOUR GIVING RETOUR. MOVE 1 TO COMPTEUR. PERFORM UNTIL COMPTEUR > 32" EVALUATE NAME_PROFIL(COMPTEUR)  WHEN BUFFER, DISPLAY "Le profil existe déjà : " BUFFER DISPLAY "profil non créé" GO TO FIN WHEN SPACES MOVE COMPTEUR TO RETOUR1 WHEN OTHER7 CALL "MTH$JIEOR" USING RETOUR MASK_PROFIL(COMPTEUR)  GIVING RETOUR END-EVALUATE ADD 1 TO COMPTEUR END-PERFORM. IF RETOUR1 = 0 THEN6 DISPLAY "Nombre limite de profils déjà atteint (32)" DISPLAY "profil non créé" GO TO FIN END-IF. MOVE RETOUR1 TO COMPTEUR.M* Calcul pour obtenir le bit de plus faible poids dans RETOUR (premier profil * disponible)' SUBTRACT RETOUR FROM 0 GIVING RETOUR1.5 CALL "MTH$JIAND" USING RETOUR RETOUR1 GIVING RETOUR. INITIALIZE REC_MENU. MOVE 3 TO TYPE_MENU.0 MOVE BUFFER TO NAME_PROFIL(COMPTEUR) NAME_MENU.2 MOVE RETOUR TO MASK_PROFIL(COMPTEUR) PROFIL_MENU.. CALL "CLI$PRESENT" USING BY DESCRIPTOR "TEXT" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING$ BY DESCRIPTOR "TEXT" LIBELLE_MENU END-IF. WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE.0 DISPLAY "Profil ajouté dans la base : " BUFFER.FIN. EXIT PROGRAM.END PROGRAM GMENU$ADD_PROFIL.7*******************************************************.*[AROBAS.LAURENT.TMP_KIT_2]GMENU$ADD_USER.COB;3+,‘0./ 49Š-;Õ0 123KÿPWO56ÀžJ©Ÿ¥”75#”89GHˆºJÿ IDENTIFICATION DIVISION.PROGRAM-ID. GMENU$ADD_USER.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 USERNAME PIC X(12).01 RETOUR PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 BUFFER_PROFIL PIC X(12).01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.PROCEDURE DIVISION.DEBUT. MOVE 2 TO TYPE_MENU.' MOVE SPACES TO USERNAME BUFFER_PROFIL. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" USERNAME. MOVE USERNAME TO NAME_MENU. READ MENU_FICH KEY IS CLE_MENU INVALID KEY CONTINUE NOT INVALID KEY0 DISPLAY "Ce username existe déjà : " USERNAME! DISPLAY "Utilisateur non créé" GO TO FIN END-READ. MOVE 0 TO PROFIL_MENU. CALL "CLI$GET_VALUE" USING& BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR. IF RETOUR IS FAILURE THEN7 DISPLAY "Vous devez spécifier un profil avec /PROFIL" DISPLAY "Utilisateur non créé" GO TO FIN END-IF. PERFORM UNTIL RETOUR IS FAILURE MOVE 1 TO COMPTEUR! PERFORM UNTIL COMPTEUR > 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL! DISPLAY "Utilisateur non créé" GO TO FIN END-IF9 CALL "MTH$JIOR" USING PROFIL_MENU MASK_PROFIL(COMPTEUR) GIVING PROFIL_MENU MOVE SPACES TO BUFFER_PROFIL CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-PERFORM. WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE.( DISPLAY "Utilisateur créé : " USERNAME.FIN. EXIT PROGRAM.END PROGRAM GMENU$ADD_USER.7*********************************************************[AROBAS.LAURENT.TMP_KIT_2]GMENU$EXIT.COB;2+,"./ 47Þ-;Õ0 123KÿPWO56à×CÝ»I”7 ¼5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$EXIT.DATA DIVISION.WORKING-STORAGE SECTION.PROCEDURE DIVISION.DEBUT. STOP RUN.END PROGRAM GMENU$EXIT.7*********************************************************[AROBAS.LAURENT.TMP_KIT_2]GMENU$GAG.COB;49+,#!./ 4K„-;Õ0 123KÿPWO56€è$g«”7àã"5#”89GHˆºJÿ IDENTIFICATION DIVISION.PROGRAM-ID. GMENU$GAG.DATA DIVISION.WORKING-STORAGE SECTION.)01 PASTEBOARD_ID PIC 9(9) COMP EXTERNAL.(01 KEYBOARD_ID PIC 9(9) COMP EXTERNAL.01 RETOUR PIC 9(9) COMP.01 TOUCHE PIC 9(4) COMP.(01 DRAPEAU_GAG PIC 9(9) COMP EXTERNAL.!01 FLAGS PIC 9(9) COMP VALUE 0.01 COLONNE PIC 9(9) COMP.01 GAG_ID PIC 9(9) COMP.801 SMG$M_BOLD PIC 9(9) COMP VALUE EXTERNAL SMG$M_BOLD.=01 SMG$M_REVERSE PIC 9(9) COMP VALUE EXTERNAL SMG$M_REVERSE.;01 SMG$M_BORDER PIC 9(9) COMP VALUE EXTERNAL SMG$M_BORDER.@01 TERM_TIMEOUT PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_TIMEOUT.:01 SS$_TIMEOUT PIC 9(9) COMP VALUE EXTERNAL SS$_TIMEOUT.01 BUFFER PIC X(37). 01 HEURE. 02 PIC 9(5). 02 SECONDES PIC 9. 02 IDX_BULLES PIC 9(4) COMP. 01 NOMB0 PIC 9(9) COMP VALUE 0. 01 NOMBRES.# 02 NOMB PIC 9(9) COMP OCCURS 80. 01 BULLES. 02 BULLES_LIST.K 03 PIC X(48) VALUE " Alors, on ne tape plus sur son clavier ? ".K 03 PIC X(48) VALUE " C'est la fin de la journée ? ".K 03 PIC X(48) VALUE " Comment allez-vous ? ".K 03 PIC X(48) VALUE " HÉ HO ! Je suis toujours là... ".K 03 PIC X(48) VALUE " Quoi de neuf, Docteur ?!... ".K 03 PIC X(48) VALUE "Vive le vent, vive le vent, vive le vendredi... ".K 03 PIC X(48) VALUE " La vie n'est pas un long fleuve tranquille... ".K 03 PIC X(48) VALUE " AH ! La mer, les palmiers, le sable chaud... ".K 03 PIC X(48) VALUE " Et si on faisait une petite belote ?... ".K 03 PIC X(48) VALUE "La question n'est pas POURQUOI mais POURQUOI MOI".' 02 BULLES_TAB REDEFINES BULLES_LIST.. 03 BULLES_TEXT PIC X(48) OCCURS 10 TIMES.LINKAGE SECTION.#01 DRAPEAU_TIMEOUT PIC 9(9) COMP. 01 TIME_SECONDS PIC 9(9) COMP.6PROCEDURE DIVISION USING DRAPEAU_TIMEOUT TIME_SECONDS.DEBUT. IF FLAGS = 0 THEN. ADD SMG$M_BOLD TO SMG$M_REVERSE GIVING FLAGS)* Initialisation d'un tableau de nombres. MOVE 1 TO RETOUR PERFORM UNTIL RETOUR > 80 MOVE RETOUR TO NOMB(RETOUR) ADD 1 TO RETOUR END-PERFORM %* Création et affichage des displays.) CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING' NOMB(7) NOMB(78) GAG_ID SMG$M_BORDER GIVING RETOUR IF RETOUR IS FAILURE THEN GO TO FIN END-IF END-IF.' CALL "SMG$ERASE_DISPLAY" USING GAG_ID. SET DRAPEAU_GAG TO SUCCESS.' CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING' GAG_ID PASTEBOARD_ID NOMB(17) NOMB(2) GIVI€X«A$ GMENU011.B#!;Õ*[AROBAS.LAURENT.TMP_KIT_2]GMENU$GAG.COB;49KÁyNG RETOUR.% IF RETOUR IS FAILURE THEN GO TO FIN.+ CALL "SMG$RING_BELL" USING GAG_ID NOMB(1). MOVE 1 TO COLONNE.5 PERFORM UNTIL COLONNE > 35 OR DRAPEAU_GAG IS FAILURE PERFORM POSITION_1 ADD 1 TO COLONNE PERFORM POSITION_2 ADD 1 TO COLONNE PERFORM READ_WITH_TIMEOUT END-PERFORM.- IF DRAPEAU_GAG IS FAILURE THEN GO TO SORTIE. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " O"2 BY REFERENCE NOMB(3) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " / \"2 BY REFERENCE NOMB(4) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " \ /"2 BY REFERENCE NOMB(5) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " |\"2 BY REFERENCE NOMB(6) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " ||"2 BY REFERENCE NOMB(7) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR "\"3 BY REFERENCE NOMB(2) NOMB(39) OMITTED SMG$M_BOLD. ACCEPT HEURE FROM TIME.% ADD 1 TO SECONDES GIVING IDX_BULLES. CALL "SMG$PUT_CHARS" USING. GAG_ID BY DESCRIPTOR BULLES_TEXT(IDX_BULLES). BY REFERENCE NOMB(1) NOMB(17) OMITTED FLAGS.SORTIE. IF DRAPEAU_GAG IS SUCCESS THEN " CALL "SMG$READ_KEYSTROKE" USING & KEYBOARD_ID TOUCHE OMITTED NOMB(10) GIVING RETOUR? IF TOUCHE NOT = TERM_TIMEOUT OR RETOUR NOT = SS$_TIMEOUT THEN SET DRAPEAU_GAG TO FAILURE END-IF END-IF. IF DRAPEAU_GAG IS SUCCESS THEN  ADD 1 TO DRAPEAU_TIMEOUT ELSE MOVE 0 TO DRAPEAU_TIMEOUT END-IF.6 IF DRAPEAU_TIMEOUT >= 2 THEN PERFORM MESSAGE_TIMEOUT.? CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USING GAG_ID PASTEBOARD_ID. GO TO FIN. POSITION_1. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " O"2 BY REFERENCE NOMB(3) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " / "2 BY REFERENCE NOMB(4) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " | \"2 BY REFERENCE NOMB(5) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " |\"2 BY REFERENCE NOMB(6) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " | |"2 BY REFERENCE NOMB(7) COLONNE OMITTED SMG$M_BOLD. POSITION_2. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " O"2 BY REFERENCE NOMB(3) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " / "2 BY REFERENCE NOMB(4) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " \ "2 BY REFERENCE NOMB(5) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " ||"2 BY REFERENCE NOMB(6) COLONNE OMITTED SMG$M_BOLD. CALL "SMG$PUT_CHARS" USING GAG_ID BY DESCRIPTOR " / |"2 BY REFERENCE NOMB(7) COLONNE OMITTED SMG$M_BOLD.MESSAGE_TIMEOUT.' CALL "SMG$ERASE_DISPLAY" USING GAG_ID.) DIVIDE TIME_SECONDS BY 30 GIVING RETOUR. MOVE SPACES TO BUFFER. CALL "SYS$FAO" USING4 BY DESCRIPTOR " SESSION INACTIVE DEPUIS !UL MN" OMITTED BUFFER BY VALUE RETOUR.+ CALL "SMG$PUT_CHARS_HIGHWIDE" USING GAG_ID BY DESCRIPTOR BUFFER2 BY REFERENCE NOMB(1) NOMB(1) OMITTED SMG$M_BOLD.+ CALL "SMG$PUT_CHARS_HIGHWIDE" USING GAG_ID4 BY DESCRIPTOR " ELLE SERA DECONNECTEE DANS 5 MN"2 BY REFERENCE NOMB(3) NOMB(1) OMITTED SMG$M_BOLD.+ CALL "SMG$PUT_CHARS_HIGHWIDE" USING GAG_ID7 BY DESCRIPTOR " ********* TAPEZ UNE TOUCHE *********"2 BY REFERENCE NOMB(5) NOMB(1) OMITTED SMG$M_BOLD.+ CALL "SMG$RING_BELL" USING GAG_ID NOMB(3). MOVE 300 TO RETOUR.E* On désamorce les AST (en particulier l'AST horloge) qui restarte le* timer à chaque fois...! CALL "SMG$READ_KEYSTROKE" USING # KEYBOARD_ID TOUCHE OMITTED RETOUR GIVING RETOUR.? IF TOUCHE NOT = TERM_TIMEOUT OR RETOUR NOT = SS$_TIMEOUT THEN  MOVE 0 TO DRAPEAU_TIMEOUT END-IF.READ_WITH_TIMEOUT.! CALL "SMG$READ_KEYSTROKE" USING " KEYBOARD_ID TOUCHE OMITTED NOMB0 GIVING RETOUR.? IF TOUCHE NOT = TERM_TIMEOUT OR RETOUR NOT = SS$_TIMEOUT THEN  SET DRAPEAU_GAG TO FAILURE END-IF.FIN. EXIT PROGRAM.END PROGRAM GMENU$GAG.****************.*[AROBAS.LAURENT.TMP_KIT_2]GMENU$GENERATE.COB;8+,$./ 4Cò-;Õ0 123KÿPWO56ÀŒoÍŸ¥”7…*5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$GENERATE.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.. SELECT GENERATE_FILE ASSIGN TO GENERATE_FILE.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.FD GENERATE_FILE VALUE OF ID IS GENERATE_FICHIER( RECORD IS VARYING IN SIZE FROM 0 TO 255 DEPENDING ON GEN_LEN LABEL RECORD IS STANDARD.01 REC_GENERATE PIC X(255).WORKING-STORAGE SECTION.-01 GENERATE_FICHIER PIC X(255) VALUE SPACES.01 GEN_LEN PIC 999.01 RETOUR PIC 9(9) COMP.01 COMPTEUR_1 PIC 9(4) COMP.01 IDX1 PIC 9(9) COMP.01 IDX2 PIC 9(9) COMP.01 QUALIF PIC X(6).01 BUFFER PIC X(35).01 BUF_LEN PIC 9(9) COMP.01 LONGUEUR PIC 9(4) COMP.01 D_PROFIL PIC 9(9) COMP.01 D_MENU PIC 9(9) COMP.01 D_USER PIC 9(9) COMP.01 OFFSET_OUT PIC 9(9) COMP. 01 LIST_ID.! 02 ITM_ID PIC 9(12) OCCURS 20.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.PROCEDURE DIVISION.DEBUT." MOVE 1 TO D_PROFIL D_USER D_MENU.C CALL "CLI$PRESENT" USING BY DESCRIPTOR "SELECT.ALL" GIVING RETOUR. IF RETOUR IS FAILURE THEN9 CALL "CLI$PRESENT" USING BY DESCRIPTOR "SELECT.PROFIL"  GIVING D_PROFIL7 CALL "CLI$PRESENT" USING BY DESCRIPTOR "SELECT.USER"  GIVING D_USER7 CALL "CLI$PRESENT" USING BY DESCRIPTOR "SELECT.MENU"  GIVING D_MENU END-IF.! MOVE SPACES TO GENERATE_FICHIER. CALL "CLI$GET_VALUE" USING* BY DESCRIPTOR "OUTPUT" GENERATE_FICHIER. OPEN OUTPUT GENERATE_FILE.< MOVE "$ GMENU := $GMENU$SYSTEM:GMENU_UTIL" TO REC_GENERATE. MOVE 35 TO GEN_LEN. WRITE REC_GENERATE. IF D_PROFIL IS SUCCESS THEN2 MOVE "$! Définition des profils" TO REC_GENERATE MOVE 25 TO GEN_LEN WRITE REC_GENERATE MOVE 3 TO TYPE_MENU MOVE SPACES TO NAME_MENU START MENU_FICH KEY IS NOT LESS THAN CLE_MENU INVALID KEY GO TO NOPROFIL END-START SET RETOUR TO SUCCESS READ MENU_FICH NEXT AT END GO TO NOPROFIL END-READ6 PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 3 MOVE 1 TO GEN_LEN: STRING "$GMENU ADD PROFIL " NAME_MENU DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN MOVE LIBELLE_MENU TO BUFFER MOVE "/TEXT=" TO QUALIF1 PERFORM ECRITURE_TEXTE THRU FIN_ECRITURE_TEXTE SUBTRACT 1 FROM GEN_LEN WRITE REC_GENERATE READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-PERFORM END-IF. NOPROFIL. IF D_USER IS SUCCESS THEN7 MOVE "$! Définition des utilisateurs" TO REC_GENERATE MOVE 30 TO GEN_LEN WRITE REC_GENERATE MOVE 2 TO TYPE_MENU MOVE SPACES TO NAME_MENU START MENU_FICH KEY IS NOT LESS THAN CLE_MENU INVALID KEY GO TO NOUSER END-START SET RETOUR TO SUCCESS READ MENU_FICH NEXT AT END GO TO NOUSER END-READ6 PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 2 MOVE 1 TO GEN_LEN' STRING "$GMENU ADD USER " NAME_MENU  "/PROFIL="DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN MOVE GEN_LEN TO LONGUEUR MOVE 1 TO IDX1 PERFORM UNTIL IDX1 > 32 CALL "MTH$JIAND" USING " PROFIL_MENU MASK_PROFIL(IDX1) GIVING IDX2 IF IDX2 NOT = 0 THEN! STRING "," DELIMITED BY SIZE NAME_PROFIL(À‰ÐÐ$ GMENU011.B$;Õ.[AROBAS.LAURENT.TMP_KIT_2]GMENU$GENERATE.COB;8CN{IDX1) DELIMITED BY SPACE INTO REC_GENERATE WITH POINTER GEN_LEN END-IF ADD 1 TO IDX1 END-PERFORM! IF GEN_LEN NOT = LONGUEUR THEN( MOVE "(" TO REC_GENERATE(LONGUEUR:1)' MOVE ")" TO REC_GENERATE(GEN_LEN:1) ELSE SUBTRACT 9 FROM GEN_LEN END-IF WRITE REC_GENERATE READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-PERFORM END-IF.NOUSER.% IF D_MENU IS FAILURE THEN GO TO FIN.0 MOVE "$! Définition des menus" TO REC_GENERATE. MOVE 23 TO GEN_LEN. WRITE REC_GENERATE. MOVE 1 TO TYPE_MENU COMPTEUR_1.) MOVE 0 TO IDPERE_MENU ITM_ID(COMPTEUR_1)) START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO FIN END-START. MAIN_BOUCLE. READ MENU_FICH NEXT  AT END GO TO RETOUR_MAIN END-READ.< IF TYPE_MENU = 1 AND IDPERE_MENU = ITM_ID(COMPTEUR_1) THEN $ PERFORM GEN_MENU THRU FIN_GEN_MENU IF COMPTEUR_1 >= 20 THEN GO TO MAIN_BOUCLE END-IF ADD 1 TO COMPTEUR_1 ADD 2 TO OFFSET_OUT0 MOVE ID_MENU TO IDPERE_MENU ITM_ID(COMPTEUR_1)* START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO RETOUR_MAIN END-START GO TO MAIN_BOUCLE END-IF. MOVE 1 TO TYPE_MENU. RETOUR_MAIN." IF COMPTEUR_1 = 1 THEN GO TO FIN. SUBTRACT 1 FROM COMPTEUR_1. SUBTRACT 2 FROM OFFSET_OUT.( MOVE ITM_ID(COMPTEUR_1) TO IDPERE_MENU.) START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO RETOUR_MAIN END-START. MOVE 0 TO ID_MENU.- PERFORM UNTIL ID_MENU = ITM_ID(1+COMPTEUR_1) READ MENU_FICH NEXT AT END GO TO RETOUR_MAIN END-READ> IF TYPE_MENU NOT = 1 OR IDPERE_MENU NOT = ITM_ID(COMPTEUR_1) THEN GO TO RETOUR_MAIN END-IF END-PERFORM. GO TO MAIN_BOUCLE.:* Block de génration d'une ligne de génération de menus... GEN_MENU. CALL "SYS$FAO" USING- BY DESCRIPTOR "$!#* GMENU ADD MENU/PROFIL=" BY REFERENCE LONGUEUR BY DESCRIPTOR REC_GENERATE BY VALUE OFFSET_OUT.+ ADD 1 TO LONGUEUR GIVING LONGUEUR GEN_LEN. MOVE 1 TO IDX1. PERFORM UNTIL IDX1 > 32 CALL "MTH$JIAND" USING PROFIL_MENU MASK_PROFIL(IDX1) GIVING IDX2 IF IDX2 NOT = 0 THEN STRING "," DELIMITED BY SIZE NAME_PROFIL(IDX1) DELIMITED BY SPACE INTO REC_GENERATE WITH POINTER GEN_LEN END-IF ADD 1 TO IDX1 END-PERFORM. IF GEN_LEN NOT = LONGUEUR THEN& MOVE "(" TO REC_GENERATE(LONGUEUR:1)% MOVE ")" TO REC_GENERATE(GEN_LEN:1) ADD 1 TO GEN_LEN ELSE SUBTRACT 8 FROM GEN_LEN END-IF. MOVE LIBELLE_MENU TO BUFFER. MOVE "/TEXT=" TO QUALIF.0 PERFORM ECRITURE_TEXTE THRU FIN_ECRITURE_TEXTE. IF IDPERE_MENU = 0 THEN& STRING "/PARENT=0" DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN ELSE& STRING "/PARENT='ID" IDPERE_MENU "'" DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN END-IF. IF FICH_MENU = SPACES THEN STRING "/SYMBOL=ID" ID_MENU DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN ELSE# STRING "/FILE=" DELIMITED BY SIZE FICH_MENU DELIMITED BY SPACE INTO REC_GENERATE WITH POINTER GEN_LEN MOVE SPACES TO BUFFER MOVE PARAM_MENU TO BUFFER MOVE "/PARA=" TO QUALIF0 PERFORM ECRITURE_TEXTE THRU FIN_ECRITURE_TEXTE END-IF. SUBTRACT 1 FROM GEN_LEN. WRITE REC_GENERATE. FIN_GEN_MENU.ECRITURE_TEXTE. CALL "STR$TRIM" USING  BY DESCRIPTOR BUFFER BUFFER BY REFERENCE BUF_LEN.. IF BUF_LEN = 0 THEN GO TO FIN_ECRITURE_TEXTE. STRING QUALIF DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN MOVE 1 TO IDX1. CALL "STR$POSITION" USING BY DESCRIPTOR BUFFER '"' GIVING IDX2 PERFORM UNTIL IDX2 = 0 ADD 1 TO IDX2 GIVING LONGUEUR SUBTRACT IDX1 FROM LONGUEUR4 STRING '"' BUFFER(IDX1:LONGUEUR) DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN ADD 1 TO IDX2 GIVING IDX1 CALL "STR$POSITION" USING BY DESCRIPTOR BUFFER '"' BY REFERENCE IDX1 GIVING IDX2 END-PERFORM." ADD 1 TO BUF_LEN GIVING LONGUEUR. SUBTRACT IDX1 FROM LONGUEUR.7 STRING '"' BUFFER(IDX1:LONGUEUR) '"' DELIMITED BY SIZE INTO REC_GENERATE WITH POINTER GEN_LEN.FIN_ECRITURE_TEXTE.FIN. CLOSE GENERATE_FILE.SORTIE. EXIT PROGRAM.END PROGRAM GMENU$GENERATE.7*********************************************************[AROBAS.LAURENT.TMP_KIT_2]GMENU$HELP.COB;2+,/./ 4C -;Õ0 123KÿPWO56 GA¤;L”7 &25#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$HELP.DATA DIVISION.WORKING-STORAGE SECTION.01 BUFFER PIC X(255).01 RETOUR PIC 9(9) COMP.01 TERM_SIZE PIC 9(9) COMP.?01 LIB$PUT_OUTPUT PIC 9(9) COMP VALUE EXTERNAL LIB$PUT_OUTPUT.=01 LIB$GET_INPUT PIC 9(9) COMP VALUE EXTERNAL LIB$GET_INPUT.?01 DVI$_DEVBUFSIZ PIC 9(9) COMP VALUE EXTERNAL DVI$_DEVBUFSIZ.01 FLAGS PIC 9(9) COMP.* HLP$M_HELP = 32'01 HLP$M_HELP PIC 9(9) COMP VALUE 32.* HLP$M_PROMPT = 1'01 HLP$M_PROMPT PIC 9(9) COMP VALUE 1.PROCEDURE DIVISION.DEBUT. MOVE SPACES TO BUFFER.6 CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P1" BUFFER. CALL "LIB$GETDVI" USING DVI$_DEVBUFSIZ OMITTED BY DESCRIPTOR "SYS$OUTPUT:" BY REFERENCE TERM_SIZE GIVING RETOUR.C IF RETOUR IS FAILURE THEN CALL "LIB$SIGNAL" USING BY VALUE RETOUR.- ADD HLP$M_HELP TO HLP$M_PROMPT GIVING FLAGS. CALL "LBR$OUTPUT_HELP" USING BY VALUE LIB$PUT_OUTPUT  BY REFERENCE TERM_SIZE0 BY DESCRIPTOR BUFFER "GMENU$SYSTEM:GMENUHELP"  BY REFERENCE FLAGS BY VALUE LIB$GET_INPUT GIVING RETOUR.C IF RETOUR IS FAILURE THEN CALL "LIB$SIGNAL" USING BY VALUE RETOUR.END PROGRAM GMENU$HELP.1*[AROBAS.LAURENT.TMP_KIT_2]GMENU$MODIFY_MENU.COB;5+,3g./ 4N-;Õ0 123KÿPWO56À£ÖŸ¥”7àM;5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$MODIFY_MENU.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN Ð Qý~1~ GMENU.BCK‘8—*[AROBAS.LAURENT]GMENU011.B;1$$V9ï|ETO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 USERNAME PIC X(12).01 RETOUR PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 FLAG_MOINS PIC 9(9) COMP.01 TAMPON PIC 9(9) COMP.01 BUFFER_PROFIL PIC X(12).01 BUFFER_TEXT PIC X(35).01 BUFFER_PARAM PIC X(30).01 BUFFER_FILE PIC X(80).01 PROFIL_M PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.01 ID_MOD PIC 9(12) VALUE 0.$01 IDPERE_BUFFER PIC 9(12) VALUE 0.)01 ID_BUFFER_STR PIC X(12) VALUE SPACES.01 BUF_LEN PIC 9(9) COMP.A01 LIB$M_CLI_CTRLY PIC 9(9) COMP VALUE EXTERNAL LIB$M_CLI_CTRLY.PROCEDURE DIVISION.DEBUT.5 MOVE SPACES TO BUFFER_FILE BUFFER_TEXT BUFFER_PARAM.6* On vérifie l'existence du menu et la présence de /IDG CALL "CLI$PRESENT" USING BY DESCRIPTOR "IDENTIFICATION" GIVING RETOUR. IF RETOUR IS SUCCESS THEN INITIALIZE ID_BUFFER_STR CALL "CLI$GET_VALUE" USING / BY DESCRIPTOR "IDENTIFICATION" ID_BUFFER_STR GIVING RETOUR IF RETOUR IS FAILURE THEN* CALL "LIB$SIGNAL" USING BY VALUE RETOUR GO TO FIN END-IF CALL "STR$TRIM" USING , BY DESCRIPTOR ID_BUFFER_STR ID_BUFFER_STR BY REFERENCE BUF_LEN3 INSPECT ID_BUFFER_STR(1:BUF_LEN) REPLACING ALL " " BY "0"( CALL "STR$FIND_FIRST_NOT_IN_SET" USING6 BY DESCRIPTOR ID_BUFFER_STR(1:BUF_LEN) "0123456789" GIVING RETOUR IF RETOUR NOT = 0 THEN5 DISPLAY "Valeur illégale pour /IDENTIFICATION : "  ID_BUFFER_STR DISPLAY "Menu non modifié" GO TO FIN END-IF MOVE 0 TO ID_MOD)€†4$ GMENU011.B3g;Õ1[AROBAS.LAURENT.TMP_KIT_2]GMENU$MODIFY_MENU.COB;5NLj MOVE ID_BUFFER_STR(1:BUF_LEN) TO ID_MOD MOVE ID_MOD TO ID_MENU READ MENU_FICH KEY IS ID_MENU INVALID KEY$ DISPLAY "Menu inconnu : " ID_MOD GO TO FIN END-READ" MOVE LIBELLE_MENU TO BUFFER_TEXT MOVE FICH_MENU TO BUFFER_FILE! MOVE PARAM_MENU TO BUFFER_PARAM# MOVE IDPERE_MENU TO IDPERE_BUFFER MOVE PROFIL_MENU TO PROFIL_M ELSE: DISPLAY "Vous devez spécifier l'ID avec /IDENTIFICATION" GO TO FIN END-IF.N* On vérifie l'existence du nouveau père et le fait que ce ne soit pas un menu* terminal (FICH_MENU non vide)? CALL "CLI$PRESENT" USING BY DESCRIPTOR "PARENT" GIVING RETOUR. IF RETOUR IS SUCCESS THEN INITIALIZE ID_BUFFER_STR CALL "CLI$GET_VALUE" USING ' BY DESCRIPTOR "PARENT" ID_BUFFER_STR GIVING RETOUR IF RETOUR IS FAILURE THEN* CALL "LIB$SIGNAL" USING BY VALUE RETOUR GO TO FIN END-IF CALL "STR$TRIM" USING , BY DESCRIPTOR ID_BUFFER_STR ID_BUFFER_STR BY REFERENCE BUF_LEN3 INSPECT ID_BUFFER_STR(1:BUF_LEN) REPLACING ALL " " BY "0"( CALL "STR$FIND_FIRST_NOT_IN_SET" USING6 BY DESCRIPTOR ID_BUFFER_STR(1:BUF_LEN) "0123456789" GIVING RETOUR IF RETOUR NOT = 0 THEN- DISPLAY "Valeur illégale pour /PARENT : "  ID_BUFFER_STR DISPLAY "Menu non modifié" GO TO FIN END-IF MOVE 0 TO IDPERE_BUFFER0 MOVE ID_BUFFER_STR(1:BUF_LEN) TO IDPERE_BUFFER IF IDPERE_BUFFER NOT = 0 THEN MOVE IDPERE_BUFFER TO ID_MENU READ MENU_FICH KEY IS ID_MENU INVALID KEY$ DISPLAY "Menu père inconnu : "  IDPERE_BUFFER DISPLAY "Menu non modifié" GO TO FIN END-READ! IF FICH_MENU NOT = SPACES THEN2 DISPLAY "Père terminal - fichier : " FICH_MENU DISPLAY "Menu non créé" GO TO FIN END-IF END-IF SET RETOUR TO SUCCESS# MOVE IDPERE_BUFFER TO IDPERE_MENU MOVE 1 TO TYPE_MENU* START MENU_FICH KEY IS EQUAL TO CLE_MENU" INVALID KEY MOVE 2 TO TYPE_MENU END-START IF TYPE_MENU = 1 THEN READ MENU_FICH NEXT AT END MOVE 2 TO TYPE_MENU END-READ END-IF: PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 1 OR # IDPERE_MENU NOT = IDPERE_BUFFER% IF BUFFER_TEXT = LIBELLE_MENU THEN SET RETOUR TO FAILURE END-IF READ MENU_FICH NEXT AT END MOVE 2 TO TYPE_MENU END-READ END-PERFORM IF RETOUR IS FAILURE THEN DISPLAY ; "Un menu de même père et de même libellé existe déjà" DISPLAY "Menu non modifié" GO TO FIN END-IF END-IF. * Gestion du qualifier profil... SET FLAG_MOINS TO FAILURE. CALL "CLI$GET_VALUE" USING& BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR.' IF BUFFER_PROFIL = "- " THEN SET FLAG_MOINS TO SUCCESS CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-IF. PERFORM UNTIL RETOUR IS FAILURE MOVE 1 TO COMPTEUR! PERFORM UNTIL COMPTEUR > 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL DISPLAY "Menu non modifié" GO TO FIN END-IF IF FLAG_MOINS IS SUCCESS THEN. CALL "MTH$JNOT" USING MASK_PROFIL(COMPTEUR) GIVING TAMPON) CALL "MTH$JIAND" USING PROFIL_M TAMPON GIVING PROFIL_M ELSE7 CALL "MTH$JIOR" USING PROFIL_M MASK_PROFIL(COMPTEUR) GIVING PROFIL_M END-IF MOVE SPACES TO BUFFER_PROFIL CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-PERFORM.* Gestion du qualifier FILE. CALL "CLI$PRESENT" USING BY DESCRIPTOR "FILE" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING# BY DESCRIPTOR "FILE" BUFFER_FILE MOVE 1 TO TYPE_MENU MOVE ID_MOD TO IDPERE_MENU READ MENU_FICH KEY IS CLE_MENU INVALID KEY CONTINUE NOT INVALID KEY& DISPLAY "Ce menu a des sous-menus"$ DISPLAY "qualifier /FILE ignoré" MOVE SPACES TO BUFFER_FILE END-READ END-IF.!* Gestion du qualifier PARAMETERS4 CALL "CLI$PRESENT" USING BY DESCRIPTOR "PARAMETERS" GIVING RETOUR. IF RETOUR IS SUCCESS THEN IF BUFFER_FILE = SPACES THEN' DISPLAY "Ce menu n'a pas de FICHIER") DISPLAY "Qualifier /PARAMETERS ignoré" ELSE CALL "CLI$GET_VALUE" USING+ BY DESCRIPTOR "PARAMETERS" BUFFER_PARAM END-IF END-IF.* Gestion du qualifier TEXT. CALL "CLI$PRESENT" USING BY DESCRIPTOR "TEXT" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING# BY DESCRIPTOR "TEXT" BUFFER_TEXT END-IF* On modifie le menu... MOVE ID_MOD TO ID_MENU./ CALL "LIB$DISABLE_CTRL" USING LIB$M_CLI_CTRLY. READ MENU_FICH KEY IS ID_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-READ. DELETE MENU_FICH RECORD INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE. MOVE 1 TO TYPE_MENU.# MOVE IDPERE_BUFFER TO IDPERE_MENU." MOVE BUFFER_TEXT TO LIBELLE_MENU. MOVE BUFFER_FILE TO FICH_MENU.! MOVE BUFFER_PARAM TO PARAM_MENU. MOVE PROFIL_M TO PROFIL_MENU. WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE.. CALL "LIB$ENABLE_CTRL" USING LIB$M_CLI_CTRLY. DISPLAY "Menu modifié".FIN. EXIT PROGRAM.END PROGRAM GMENU$MODIFY_MENU.7*******************************************************3*[AROBAS.LAURENT.TMP_KIT_2]GMENU$MODIFY_PROFIL.COB;3+,7g./ 4=˜-;Õ0 123KÿPWO56Àâ³âŸ¥”7ïB5#”89GHˆºJÿ IDENTIFICATION DIVISION. PROGRAM-ID. GMENU$MODIFY_PROFIL.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 RETOUR PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.01 BUFFER1 PIC X(12).01 BUFFER2 PIC X(12).01 BUFFER3 PIC X(35).PROCEDURE DIVISION.DEBUT.( MOVE SPACES TO BUFFER1 BUFFER2 BUFFER3. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" BUFFER1.; CALL "CLI$PRESENT" USING BY DESCRIPTOR "P3" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P3" BUFFER2 END-IF.= CALL "CLI$PRESENT" USING BY DESCRIPTOR "TEXT" GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "TEXT" BUFFER3 END-IF. MOVE 0 TO RETOUR. MOVE 1 TO COMPTEUR. PERFORM UNTIL COMPTEUR > 32 EVALUATE NAME_PROFIL(COMPTEUR) WHEN SPACES CONTINUE WHEN BUFFER2- DISPLAY "Le profil existe déjà : " BUFFER2 DISPLAY "profil non modifié" GO TO FIN WHEN BUFFER1 MOVE COMPTEUR TO RETOUR END-EVALUATE ADD 1 TO COMPTEUR END-PERFORM. IF RETOUR = 0 THEN( DISPLAY "Profil inexistant : " BUFFER1 GO TO FIN END-IF. INITIALIZE REC_MENU. MOVE 3 TO TYPE_MENU.' MOVE NAME_PROFIL(RETOUR) TO NAME_MENU. READ MENU_FICH KEY IS CLE_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-READ. IF BUFFER3 NOT = SPACES THEN MOVE BUFFER3 TO LIBELLE_MENU END-IF. IF BUFFER2 = SPACES THEN REWRITE REC_MENU INVALID KEY4 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-REWRITE GO TO MOD_OK END-IF. DELETE MENU_FICH RECORD INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE./ MOVE BUFFER2 TO NAME_PROFIL(RETOUR) NAME_MENU.$ MOVE MASK_PROFIL(RETOUR) TO ID_MENU WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE.° ¾³p$ GMENU011.B7g;Õ3[AROBAS.LAURENT.TMP_KIT_2]GMENU$MODIFY_PROFIL.COB;3=%*MOD_OK. DISPLAY "Profil modifié".FIN. EXIT PROGRAM. END PROGRAM GMENU$MODIFY_PROFIL.7*******************************************************1*[AROBAS.LAURENT.TMP_KIT_2]GMENU$MODIFY_USER.COB;3+,A./ 4:L-;Õ0 123KÿPWO56 gþŸ¥”7 J5#”89GHˆºJÿ IDENTIFICATION DIVISION.PROGRAM-ID. GMENU$MODIFY_USER.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 USERNAME PIC X(12).01 RETOUR PIC 9(9) COMP.01 TAMPON PIC 9(9) COMP.01 FLAG_MOINS PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 BUFFER_PROFIL PIC X(12).01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.PROCEDURE DIVISION.DEBUT. MOVE 2 TO TYPE_MENU.' MOVE SPACES TO USERNAME BUFFER_PROFIL. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" USERNAME. MOVE USERNAME TO NAME_MENU. READ MENU_FICH KEY IS CLE_MENU INVALID KEY) DISPLAY "Username inconnu : " USERNAME$ DISPLAY "Utilisateur non modifié" GO TO FIN END-READ. SET FLAG_MOINS TO FAILURE.0 CALL "CLI$PRESENT" USING BY DESCRIPTOR "PROFIL" GIVING RETOUR. IF RETOUR IS FAILURE THEN" DISPLAY "Pas de profil spécifié"# DISPLAY "Utilisateur non modifié" GO TO FIN END-IF. CALL "CLI$GET_VALUE" USING& BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR.' IF BUFFER_PROFIL = "- " THEN SET FLAG_MOINS TO SUCCESS CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-IF. PERFORM UNTIL RETOUR IS FAILURE MOVE 1 TO COMPTEUR! PERFORM UNTIL COMPTEUR > 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL! DISPLAY "Utilisateur non créé" GO TO FIN END-IF IF FLAG_MOINS IS SUCCESS THEN. CALL "MTH$JNOT" USING MASK_PROFIL(COMPTEUR) GIVING TAMPON, CALL "MTH$JIAND" USING PROFIL_MENU TAMPON GIVING PROFIL_MENU ELSE: CALL "MTH$JIOR" USING PROFIL_MENU MASK_PROFIL(COMPTEUR) GIVING PROFIL_MENU END-IF MOVE SPACES TO BUFFER_PROFIL CALL "CLI$GET_VALUE" USING' BY DESCRIPTOR "PROFIL" BUFFER_PROFIL GIVING RETOUR END-PERFORM. REWRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-REWRITE.+ DISPLAY "Utilisateur modifié : " USERNAME.FIN. EXIT PROGRAM.END PROGRAM GMENU$MODIFY_USER.7*******************************************************,*[AROBAS.LAURENT.TMP_KIT_2]GMENU$REMOVE.COB;3+,B. / 4B z-;Õ0 123KÿPWO 56 9¿ ¥”7@1R5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$REMOVE.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 RETOUR PIC 9(9) COMP.01 TAMPON PIC 9(9) COMP.01 BUF_LEN PIC 9(9) COMP.01 RETOUR1 PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.01 BUFFER PIC X(12).01 MOTCLE PIC X(12).A01 LIB$M_CLI_CTRLY PIC 9(9) COMP VALUE EXTERNAL LIB$M_CLI_CTRLY.PROCEDURE DIVISION.DEBUT./ CALL "LIB$DISABLE_CTRL" USING LIB$M_CLI_CTRLY. MOVE SPACES TO MOTCLE. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P1" MOTCLE. EVALUATE MOTCLE(1:1) WHEN "P"( PERFORM TRT_PROFIL THRU FIN_TRT_PROFIL WHEN "U"$ PERFORM TRT_USER THRU FIN_TRT_USER WHEN "M"$ PERFORM TRT_MENU THRU FIN_TRT_MENU END-EVALUATE.. CALL "LIB$ENABLE_CTRL" USING LIB$M_CLI_CTRLY. GO TO FIN. TRT_PROFIL. MOVE SPACES TO BUFFER. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" BUFFER. MOVE 1 TO COMPTEUR.> PERFORM UNTIL COMPTEUR > 32 OR NAME_PROFIL(COMPTEUR) = BUFFER ADD 1 TO COMPTEUR END-PERFORM. IF COMPTEUR > 32 THEN% DISPLAY "Profil inconnu : " BUFFER  GO TO FIN_TRT_PROFIL END-IF. INITIALIZE REC_MENU. MOVE 3 TO TYPE_MENU. MOVE BUFFER TO NAME_MENU. READ MENU_FICH KEY IS CLE_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-READ. DELETE MENU_FICH RECORD INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE.=* On enlève le bit du profil dans tous les profils de la base INITIALIZE REC_MENU. MOVE 1 TO TYPE_MENU.; CALL "MTH$JNOT" USING MASK_PROFIL(COMPTEUR) GIVING TAMPON.! INITIALIZE ITM_PROFIL(COMPTEUR).. START MENU_FICH KEY IS NOT LESS THAN CLE_MENU" INVALID KEY GO TO FIN_TRT_PROFIL END-START. READ MENU_FICH NEXT AT END GO TO FIN_TRT_PROFIL END-READ. SET RETOUR TO SUCCESS.1 PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU > 2+ CALL "MTH$JIAND" USING TAMPON PROFIL_MENU GIVING RETOUR1# IF RETOUR1 NOT = PROFIL_MENU THEN MOVE RETOUR1 TO PROFIL_MENU REWRITE REC_MENU INVALID KEY CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1$ BY DESCRIPTOR RMS-FILENAME OF  MENU_FICH END-REWRITE EVALUATE TYPE_MENU WHEN 2+ DISPLAY "Username modifié : " NAME_MENU WHEN 1% DISPLAY "Menu modifié : " ID_MENU END-EVALUATE END-IF READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-PERFORM.1 DISPLAY "Profil détruit dans la base : " BUFFER.FIN_TRT_PROFIL. TRT_USER. MOVE SPACES TO BUFFER. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" BUFFER. INITIALIZE REC_MENU. MOVE 2 TO TYPE_MENU. MOVE BUFFER TO NAME_MENU. READ MENU_FICH KEY IS CLE_MENU INVALID KEY' DISPLAY "Username inconnu : " BUFFER GO TO FIN_TRT_USER END-READ. DELETE MENU_FICH RECORD INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE.3 DISPLAY "Username détruit dans la base : " BUFFER. FIN_TRT_USER. TRT_MENU. MOVE SPACES TO BUFFER. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" BUFFER. CALL "STR$TRIM" USING BY DESCRIPTOR BUFFER BUFFER  BY REFERENCE BUF_LEN.4 INSPECT BUFFER(1:BUF_LEN) REPLACING ALL " " BY "0".' CALL "STR$FIND_FIRST_NOT_IN_SET" USING. BY DESCRIPTOR BUFFER(1:BUF_LEN) "0123456789" GIVING RETOUR. IF RETOUR NOT = 0 THEN7 DISPLAY "Valeur illégale pour le paramètre : " BUFFER DISPLAY "Menu non détruit" GO TO FIN_TRT_MENU END-IF. INITIALIZE REC_MENU.' MOVE BUFFER(1:BUF_LEN) TO IDPERE_MENU. IF IDPERE_MENU = 0 THEN" DISPLAY "Menu inconnu : " BUFFER GO TO FIN_TRT_MENU END-IF./* On vérifie que le menu n'a pas de sous-menus. MOVE 1 TO TYPE_MENU READ MENU_FICH KEY IS CLE_MENU INVALID KEY CONTINUE NOT INVALID KEY DISPLAY B "Impossible de détruire un menu possédant des sous-menus" GO TO FIN_TRT_MENU END-READ.# MOVE BUFFER(1:BUF_LEN) TO ID_MENU. READ MENU_FICH KEY IS ID_MENU INVALID €Q@Ð$ GMENU011.BB;Õ,[AROBAS.LAURENT.TMP_KIT_2]GMENU$REMOVE.COB;3B ø) KEY# DISPLAY "Menu inconnu : " BUFFER GO TO FIN_TRT_MENU END-READ. DELETE MENU_FICH RECORD INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-DELETE. MOVE 5 TO TYPE_MENU. MOVE ID_MENU TO IDPERE_MENU. MOVE 0 TO ID_MENU. WRITE REC_MENU INVALID KEY3 CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1+ BY DESCRIPTOR RMS-FILENAME OF MENU_FICH END-WRITE./ DISPLAY "Menu détruit dans la base : " BUFFER. FIN_TRT_MENU.FIN. EXIT PROGRAM.END PROGRAM GMENU$REMOVE.7*******************************************************0*[AROBAS.LAURENT.TMP_KIT_2]GMENU$SET_OUTPUT.COB;2+,Fj./ 4HT-;Õ0 123KÿPWO56àuÜ»I”7`ÒY5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$SET_OUTPUT.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.* SELECT OUTPUT_FILE ASSIGN TO OUTPUT_FILE.DATA DIVISION. FILE SECTION.FD OUTPUT_FILE IS EXTERNAL VALUE OF ID IS OUTPUT_FICHIER( RECORD IS VARYING IN SIZE FROM 0 TO 255 DEPENDING ON OUT_LEN LABEL RECORD IS STANDARD.01 REC_OUTPUT PIC X(255).WORKING-STORAGE SECTION.)01 FLAG_OUVERTURE PIC 9(9) COMP VALUE 0.*01 OUTPUT_FICHIER IS EXTERNAL PIC X(255).!01 OUT_LEN IS EXTERNAL PIC 999.PROCEDURE DIVISION. DECLARATIVES.FICH-OUTPUT SECTION.7 USE AFTER STANDARD EXCEPTION PROCEDURE ON OUTPUT_FILE.FICH-OUTPUT-1.H* Si l'erreur d'ouverture s'est produite avec SYS$OUTPUT alors on stoppeD* sinon om émet un message d'erreur et on essaye d'ouvrir SYS$OUTPUT" IF FLAG_OUVERTURE IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF OUTPUT_FILE ELSE CALL "LIB$SIGNAL" USING BY VALUE RMS-CURRENT-STS 1, BY DESCRIPTOR RMS-FILENAME OF OUTPUT_FILE SET FLAG_OUVERTURE TO FAILURE END-IF.END DECLARATIVES.DEBUT-SEC SECTION. DEBUT. MOVE SPACES TO OUTPUT_FICHIER.# IF FLAG_OUVERTURE IS SUCCESS THEN  CLOSE OUTPUT_FILE CALL "CLI$GET_VALUE" USING$ BY DESCRIPTOR "P2" OUTPUT_FICHIER ELSE& MOVE "SYS$OUTPUT:" TO OUTPUT_FICHIER END-IF. OPEN OUTPUT OUTPUT_FILE.0 IF RMS-CURRENT-STS IS FAILURE THEN GO TO DEBUT. SET FLAG_OUVERTURE TO SUCCESS. FIN. EXIT PROGRAM.END PROGRAM GMENU$SET_OUTPUT.7*******************************************************0*[AROBAS.LAURENT.TMP_KIT_2]GMENU$SHOW_FILES.COB;2+,IT./ 47˜-;Õ0 123KÿPWO56@®üM”7€sa5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$SHOW_FILES.DATA DIVISION.WORKING-STORAGE SECTION.*01 OUTPUT_FICHIER IS EXTERNAL PIC X(255).&01 INPUT_FILE IS EXTERNAL PIC X(255).01 BUFFER PIC X(255).01 BUF_LEN PIC 9(9) COMP.PROCEDURE DIVISION.DEBUT. CALL "STR$TRIM" USING! BY DESCRIPTOR BUFFER INPUT_FILE BY REFERENCE BUF_LEN.2 DISPLAY "Fichier de menus : " BUFFER(1:BUF_LEN). CALL "STR$TRIM" USING% BY DESCRIPTOR BUFFER OUTPUT_FICHIER BY REFERENCE BUF_LEN.2 DISPLAY "Fichier de sortie : " BUFFER(1:BUF_LEN).FIN. EXIT PROGRAM.END PROGRAM GMENU$SHOW_FILES.7*******************************************************/*[AROBAS.LAURENT.TMP_KIT_2]GMENU$SHOW_MENU.COB;5+,[k./ 4AÊ-;Õ0 123KÿPWO56 º¥' ¥”7@›j5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU$SHOW_MENU.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.* SELECT OUTPUT_FILE ASSIGN TO OUTPUT_FILE.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.FD OUTPUT_FILE IS EXTERNAL VALUE OF ID IS OUTPUT_FICHIER( RECORD IS VARYING IN SIZE FROM 0 TO 255 DEPENDING ON OUT_LEN LABEL RECORD IS STANDARD.01 REC_OUTPUT PIC X(255).WORKING-STORAGE SECTION.*01 OUTPUT_FICHIER IS EXTERNAL PIC X(255).!01 OUT_LEN IS EXTERNAL PIC 999. 01 LIST_ID.! 02 ITM_ID PIC 9(12) OCCURS 20.01 RETOUR PIC 9(9) COMP.01 RETOUR1 PIC 9(9) COMP.01 RETOUR2 PIC 9(9) COMP.01 RET_LEN PIC 9(4) COMP.01 DUMMY1 PIC 9(9) COMP.01 DUMMY2 PIC 9(9) COMP.01 COMPTEUR PIC 9(4) COMP.01 COMPTEUR_1 PIC 9(4) COMP.01 PROFIL_S PIC 9(9) COMP.01 ID_BUFFER_STR PIC X(12). 01 ID_BUFFER_LEN PIC 9(9) COMP.01 ID_BUFFER PIC 9(12).01 IDPERE_BUFFER PIC 9(12).01 BUFFER_PROFIL PIC X(12).01 BUFFER_TEXT PIC X(35).01 LIBELLE_UPCASE PIC X(35)."01 BUFFER_TEXT_LEN PIC 9(9) COMP.01 BUFFER_FILE PIC X(80)."01 BUFFER_FILE_LEN PIC 9(9) COMP.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.01 D_PROFIL PIC 9(9) COMP.01 D_TEXT PIC 9(9) COMP.01 D_FILE PIC 9(9) COMP.#01 D_IDENTIFICATION PIC 9(9) COMP.01 D_PARENT PIC 9(9) COMP.01 OFFSET_OUT PIC 9(9) COMP.01 D_AFFICHPERE PIC 9(9) COMP.01 BUFFER_DEPTH PIC X(4). 01 DEPTH_VALUE PIC S9(4) COMP.PROCEDURE DIVISION.DEBUT. SET D_AFFICHPERE TO FAILURE.A CALL "CLI$PRESENT" USING BY DESCRIPTOR "PROFIL" GIVING D_PROFIL. IF D_PROFIL IS SUCCESS THEN SET D_AFFICHPERE TO SUCCESSA CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "PROFIL" BUFFER_PROFIL MOVE 1 TO COMPTEUR! PERFORM UNTIL COMPTEUR > 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL GO TO FIN END-IF( MOVE MASK_PROFIL(COMPTEUR) TO PROFIL_S END-IF.= CALL "CLI$PRESENT" USING BY DESCRIPTOR "TEXT" GIVING D_TEXT. IF D_TEXT IS SUCCESS THEN SET D_AFFICHPERE TO SUCCESS= CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "TEXT" BUFFER_TEXT CALL "STR$TRIM" USING ( BY DESCRIPTOR BUFFER_TEXT BUFFER_TEXT BY REFERENCE BUFFER_TEXT_LEN? CALL "STR$UPCASE" USING BY DESCRIPTOR BUFFER_TEXT BUFFER_TEXT END-IF.> CALL "CLI$PRESENT" USING BY DESCRIPTOR "DEPTH" GIVING RETOUR. IF RETOUR IS SUCCESS THEN? CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "DEPTH" BUFFER_DEPTH6 CALL "OTS$CVT_TI_L" USING BY DESCRIPTOR BUFFER_DEPTH BY REFERENCE DEPTH_VALUE BY VALUE 2 1" IF DEPTH_VALUE > 20 OR <= 0 THEN+ DISPLAY "Profondeur illégale, mise à 20" MOVE 20 TO DEPTH_VALUE END-IF ELSE MOVE 20 TO DEPTH_VALUE END-IF.= CALL "CLI$PRESENT" USING BY DESCRIPTOR "FILE" GIVING D_FILE. IF D_FILE IS SUCCESS THEN SET D_AFFICHPERE TO SUCCESS= CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "FILE" BUFFER_FILE CALL "STR$TRIM" USING ( BY DESCRIPTOR BUFFER_FILE BUFFER_FILE BY REFERENCE BUFFER_FILE_LEN END-IF.9 CALL "CLI$PRESENT" USING BY DESCRIPTOR "IDENTIFICATION"  GIVING D_IDENTIFICATION.$ IF D_IDENTIFICATION I€TL׉$ GMENU011.B[k;Õ/[AROBAS.LAURENT.TMP_KIT_2]GMENU$SHOW_MENU.COB;5AL3S SUCCESS THEN SET D_AFFICHPERE TO SUCCESS INITIALIZE ID_BUFFER_STR CALL "CLI$GET_VALUE" USING / BY DESCRIPTOR "IDENTIFICATION" ID_BUFFER_STR GIVING RETOUR CALL "STR$TRIM" USING , BY DESCRIPTOR ID_BUFFER_STR ID_BUFFER_STR BY REFERENCE ID_BUFFER_LEN9 INSPECT ID_BUFFER_STR(1:ID_BUFFER_LEN) REPLACING ALL " " BY "0"( CALL "STR$FIND_FIRST_NOT_IN_SET" USING0 BY DESCRIPTOR ID_BUFFER_STR(1:ID_BUFFER_LEN)  "0123456789" GIVING RETOUR IF RETOUR NOT = 0 THEN5 DISPLAY "Valeur illégale pour /IDENTIFICATION : "  ID_BUFFER_STR GO TO FIN END-IF MOVE 0 TO ID_BUFFER2 MOVE ID_BUFFER_STR(1:ID_BUFFER_LEN) TO ID_BUFFER END-IF.1 CALL "CLI$PRESENT" USING BY DESCRIPTOR "PARENT"  GIVING D_PARENT. IF D_PARENT IS SUCCESS THEN INITIALIZE ID_BUFFER_STR CALL "CLI$GET_VALUE" USING ' BY DESCRIPTOR "PARENT" ID_BUFFER_STR GIVING RETOUR CALL "STR$TRIM" USING , BY DESCRIPTOR ID_BUFFER_STR ID_BUFFER_STR BY REFERENCE ID_BUFFER_LEN9 INSPECT ID_BUFFER_STR(1:ID_BUFFER_LEN) REPLACING ALL " " BY "0"( CALL "STR$FIND_FIRST_NOT_IN_SET" USING0 BY DESCRIPTOR ID_BUFFER_STR(1:ID_BUFFER_LEN)  "0123456789" GIVING RETOUR IF RETOUR NOT = 0 THEN: DISPLAY "Valeur illégale pour /PARENT : " ID_BUFFER_STR GO TO FIN END-IF MOVE 0 TO IDPERE_BUFFER6 MOVE ID_BUFFER_STR(1:ID_BUFFER_LEN) TO IDPERE_BUFFER END-IF. SET RETOUR1 TO FAILURE. MOVE 0 TO OFFSET_OUT.$ IF D_IDENTIFICATION IS SUCCESS THEN MOVE ID_BUFFER TO ID_MENU READ MENU_FICH KEY IS ID_MENU INVALID KEY GO TO NOMENU END-READA IF D_PARENT IS SUCCESS AND IDPERE_BUFFER NOT = IDPERE_MENU THEN GO TO NOMENU END-IF$ PERFORM ECRITURE THRU FIN_ECRITURE GO TO NOài–¨_~ GMENU.BCK‘8—*[AROBAS.LAURENT]GMENU011.B;1$$V|ƒMENU END-IF. MOVE 1 TO COMPTEUR_1. IF D_PARENT IS SUCCESS THEN6 MOVE IDPERE_BUFFER TO IDPERE_MENU ITM_ID(COMPTEUR_1) ELSE * MOVE 0 TO IDPERE_MENU ITM_ID(COMPTEUR_1) END-IF.* Ici, le show est global... MOVE 1 TO TYPE_MENU.) START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO NOMENU END-START. MAIN_BOUCLE. READ MENU_FICH NEXT  AT END GO TO RETOUR_MAIN END-READ.< IF TYPE_MENU = 1 AND IDPERE_MENU = ITM_ID(COMPTEUR_1) THEN $ PERFORM ECRITURE THRU FIN_ECRITURE# IF COMPTEUR_1 >= DEPTH_VALUE THEN GO TO MAIN_BOUCLE END-IF ADD 1 TO COMPTEUR_1< IF D_AFFICHPERE IS FAILURE THEN ADD 2 TO OFFSET_OUT END-IF0 MOVE ID_MENU TO IDPERE_MENU ITM_ID(COMPTEUR_1)* START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO RETOUR_MAIN END-START GO TO MAIN_BOUCLE END-IF. MOVE 1 TO TYPE_MENU. RETOUR_MAIN.% IF COMPTEUR_1 = 1 THEN GO TO NOMENU. SUBTRACT 1 FROM COMPTEUR_1.< IF D_AFFICHPERE IS FAILURE THEN SUBTRACT 2 FROM OFFSET_OUT.( MOVE ITM_ID(COMPTEUR_1) TO IDPERE_MENU.) START MENU_FICH KEY IS EQUAL TO CLE_MENU INVALID KEY GO TO RETOUR_MAIN END-START. MOVE 0 TO ID_MENU.- PERFORM UNTIL ID_MENU = ITM_ID(1+COMPTEUR_1) READ MENU_FICH NEXT AT END GO TO RETOUR_MAIN END-READ> IF TYPE_MENU NOT = 1 OR IDPERE_MENU NOT = ITM_ID(COMPTEUR_1) THEN GO TO RETOUR_MAIN END-IF END-PERFORM. GO TO MAIN_BOUCLE. ECRITURE. IF D_PROFIL IS SUCCESS THEN< CALL "MTH$JIAND" USING PROFIL_MENU PROFIL_S GIVING RETOUR2 IF RETOUR2 = 0 THEN GO TO FIN_ECRITURE END-IF END-IF. IF D_TEXT IS SUCCESS THEN CALL "STR$UPCASE" USING , BY DESCRIPTOR LIBELLE_UPCASE LIBELLE_MENU' CALL "STR$FIND_FIRST_SUBSTRING" USING BY DESCRIPTOR LIBELLE_UPCASE BY REFERENCE DUMMY1 DUMMY20 BY DESCRIPTOR BUFFER_TEXT(1:BUFFER_TEXT_LEN)  GIVING RETOUR2 IF RETOUR2 IS FAILURE THEN GO TO FIN_ECRITURE END-IF END-IF. IF D_FILE IS SUCCESS THEN CALL "STR$MATCH_WILD" USING 9 BY DESCRIPTOR FICH_MENU BUFFER_FILE(1:BUFFER_FILE_LEN) GIVING RETOUR2 IF RETOUR2 IS FAILURE THEN GO TO FIN_ECRITURE END-IF END-IF. SET RETOUR1 TO SUCCESS. MOVE SPACES TO REC_OUTPUT. CALL "SYS$FAO" USING BY DESCRIPTOR "!#* !AS : !AS" BY REFERENCE RET_LEN BY DESCRIPTOR REC_OUTPUT BY VALUE OFFSET_OUT BY DESCRIPTOR ID_MENU BY DESCRIPTOR LIBELLE_MENU.! ADD 2 TO RET_LEN GIVING OUT_LEN. MOVE 1 TO COMPTEUR. PERFORM UNTIL COMPTEUR > 32 CALL "MTH$JIAND" USING$ PROFIL_MENU MASK_PROFIL(COMPTEUR) GIVING DUMMY1 IF DUMMY1 NOT = 0 THEN STRING ", " DELIMITED BY SIZE NAME_PROFIL(COMPTEUR) DELIMITED BY SPACE INTO REC_OUTPUT WITH POINTER OUT_LEN END-IF ADD 1 TO COMPTEUR END-PERFORM. ADD 1 TO RET_LEN.% MOVE " - " TO REC_OUTPUT(RET_LEN:3). WRITE REC_OUTPUT. IF FICH_MENU NOT = SPACES THEN CALL "STR$TRIM" USING$ BY DESCRIPTOR FICH_MENU FICH_MENU BY REFERENCE DUMMY1 CALL "SYS$FAO" USING% BY DESCRIPTOR "!#* !8* File : !AS" BY REFERENCE RET_LEN BY DESCRIPTOR REC_OUTPUT BY VALUE OFFSET_OUT$ BY DESCRIPTOR FICH_MENU(1:DUMMY1) MOVE RET_LEN TO OUT_LEN WRITE REC_OUTPUT END-IF. IF PARAM_MENU NOT = SPACES THEN CALL "STR$TRIM" USING& BY DESCRIPTOR PARAM_MENU PARAM_MENU BY REFERENCE DUMMY1 CALL "SYS$FAO" USING% BY DESCRIPTOR "!#* !8* Par. : !AS" BY REFERENCE RET_LEN BY DESCRIPTOR REC_OUTPUT BY VALUE OFFSET_OUT% BY DESCRIPTOR PARAM_MENU(1:DUMMY1) MOVE RET_LEN TO OUT_LEN WRITE REC_OUTPUT END-IF. IF D_AFFICHPERE IS SUCCESS THEN CALL "SYS$FAO" USING% BY DESCRIPTOR "!#* !8* Père : !AS" BY REFERENCE RET_LEN BY DESCRIPTOR REC_OUTPUT BY VALUE OFFSET_OUT BY DESCRIPTOR IDPERE_MENU MOVE RET_LEN TO OUT_LEN WRITE REC_OUTPUT END-IF. FIN_ECRITURE.NOMENU.= IF RETOUR1 IS FAILURE THEN DISPLAY "Aucun menu sélectionné".FIN. EXIT PROGRAM.END PROGRAM GMENU$SHOW_MENU.7*******************************************************1*[AROBAS.LAURENT.TMP_KIT_2]GMENU$SHOW_PROFIL.COB;6+,]I./ 4?Î-;Õ0 123KÿPWO56€.-v ¥”7`H3 ¥”7€Ýy5#”89GHˆºJÿ  ´G/$ GMENU011.Bw#;Õ/[AROBAS.LAURENT.TMP_KIT_2]GMENU$SHOW_USER.COB;3D L IDENTIFICATION DIVISION.PROGRAM-ID. GMENU$SHOW_USER.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.* SELECT OUTPUT_FILE ASSIGN TO OUTPUT_FILE.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.FD OUTPUT_FILE IS EXTERNAL VALUE OF ID IS OUTPUT_FICHIER( RECORD IS VARYING IN SIZE FROM 0 TO 255 DEPENDING ON OUT_LEN LABEL RECORD IS STANDARD.01 REC_OUTPUT PIC X(255).WORKING-STORAGE SECTION.*01 OUTPUT_FICHIER IS EXTERNAL PIC X(255).!01 OUT_LEN IS EXTERNAL PIC 999.01 USERNAME PIC X(12).01 USER_LEN PIC 9(9) COMP.01 RETOUR PIC 9(9) COMP.01 RETOUR1 PIC 9(9) COMP.01 RETOUR2 PIC 9(9) COMP.01 COMPTEUR PIC 9(9) COMP.01 TAMPON PIC 9(9) COMP.01 BUFFER_PROFIL PIC X(12).01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.PROCEDURE DIVISION.DEBUT. MOVE 2 TO TYPE_MENU.' MOVE SPACES TO USERNAME BUFFER_PROFIL. CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "P2" USERNAME. CALL "STR$TRIM" USING! BY DESCRIPTOR USERNAME USERNAME BY REFERENCE USER_LEN. MOVE USERNAME TO NAME_MENU. SET RETOUR1 TO FAILURE. START MENU_FICH  KEY IS NOT LESS THAN CLE_MENU INVALID KEY GO TO NOUSER END-START. MOVE 0 TO TAMPON.? CALL "CLI$PRESENT" USING BY DESCRIPTOR "PROFIL" GIVING RETOUR. IF RETOUR IS SUCCESS THENA CALL "CLI$GET_VALUE" USING BY DESCRIPTOR "PROFIL" BUFFER_PROFIL MOVE 1 TO COMPTEUR! PERFORM UNTIL COMPTEUR > 32 OR ) NAME_PROFIL(COMPTEUR) = BUFFER_PROFIL ADD 1 TO COMPTEUR END-PERFORM IF COMPTEUR > 32 THEN, DISPLAY "Profil inconnu : " BUFFER_PROFIL GO TO FIN END-IF& MOVE MASK_PROFIL(COMPTEUR) TO TAMPON END-IF. SET RETOUR1 TO FAILURE. SET RETOUR TO SUCCESS. READ MENU_FICH NEXT AT END GO TO NOUSER END-READ.8 PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 2 OR3 USERNAME(1:USER_LEN) NOT = NAME_MENU(1:USER_LEN)+ CALL "MTH$JIAND" USING PROFIL_MENU TAMPON GIVING RETOUR2' IF RETOUR2 NOT = 0 OR TAMPON = 0 THEN SET RETOUR1 TO SUCCESS MOVE SPACES TO REC_OUTPUT MOVE 13 TO OUT_LEN MOVE NAME_MENU TO REC_OUTPUT MOVE 1 TO COMPTEUR PERFORM UNTIL COMPTEUR > 32 CALL "MTH$JIAND" USING & PROFIL_MENU MASK_PROFIL(COMPTEUR) GIVING RETOUR2 IF RETOUR2 NOT = 0 THEN" STRING ", " DELIMITED BY SIZE NAME_PROFIL(COMPTEUR) DELIMITED BY SPACE INTO REC_OUTPUT WITH POINTER OUT_LEN END-IF ADD 1 TO COMPTEUR END-PERFORM! MOVE SPACE TO REC_OUTPUT(13:1) WRITE REC_OUTPUT END-IF READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-PERFORM.NOUSER.D IF RETOUR1 IS FAILURE THEN DISPLAY "Aucun utilisateur sélectionné".FIN. EXIT PROGRAM.END PROGRAM GMENU$SHOW_USER.7*******************************************************'*[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113+,ú#6.Q/ 4PQQ-;Õ0 123KÿPWOR56 ­ž”7à‹„5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. GMENU.P********************************************************************************#* LAURENT QUIVOGNE - @ROBAS - 02/91* GESTIONNAIRE DE MENUS...*%* Le programme est structuré ainsi : ,* o - Il exécute d'abord des initialisations** 1 - INIT_SMG : Création des entités SMG?* 2 - LEC_USER : On cherche dans le fichier de menus le profil7* utilisateur à partir du symbole UTILISATEUR puis on8* ouvre le fichier de contexte POS_DISPLAY.utilisateur7* pour lire l'enregistrement de clé 0: Menus ouverts,:* Position des menus dans l'écran, position des curseurs!* dans les menus, menu courant.:* 3 - INIT_LIBELLES : On affiche les menus sauvés dans le8* contexte, on lance une AST qui relance toutes les et8* minutes affiche l'heure à l'écran, on lance un timer8* type 'watchdog' d'après le symbole GMENU$TIMER et on* trappe Les messages.*9* - Il rentre dans une boucle de lecture SELECT_FROM_MENU,* Le retour est immédiat. Si l'event FLAG 3A* est positionné, le timer a expiré: On appelle donc la fonction?* GMENU$GAG avec en paramètre un drapeau indiquant s'il s'agit<* du deuxième appel consécutif ou non (Au retour, abandonne* éventuellement le système).>* Selon la touche frappée, lance le paragraphe correspondant.E* - Eventuellement, des fonctions correspondent à d'autres boucles deA* lecture (SELECT pour bouger les fenêtres) qui sont traitées de?* façon identique. Les autres lectures (AIDE, touches...) sont* faites avec un timeout.P********************************************************************************ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.% SELECT MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.> SELECT OPTIONAL POSITION_DISPLAYS ASSIGN TO POSITION_DISPLAYS ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS CLE_POS. I-O-CONTROL.) APPLY LOCK-HOLDING ON POSITION_DISPLAYS.DATA DIVISION. FILE SECTION. FD MENU_FICH LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.FD POSITION_DISPLAYS VALUE OF ID IS POSITION_FICH LABEL RECORD IS STANDARD.01 REC_POSITION_DISPLAYS. 02 CLE_POS PIC 9(4) COMP. 02 PIC X(741).WORKING-STORAGE SECTION.01 REC_POS_TEMP. 02 PIC 9(4) COMP. 02 LIGNE_COLONNE.# 03 CUR_DISPLAY PIC 9 VALUE 0. 03 OCCURS 10 TIMES." 04 LIGNE_POS PIC 9(9) COMP.$ 04 COLONNE_POS PIC 9(9) COMP. 04 IDPERE_POS PIC 9(12). 02 OCCURS 10 TIMES. 03 LABEL_BORDER.2 04 LABEL_BORDER_STR PIC X(38) VALUE SPACES.2 04 LABEL_BORDER_IDX PIC X(10) VALUE SPACES.1 04 LABEL_BORDER_LEN PIC 9(9) COMP VALUE 0.+ 04 CUR_CHOIX PIC 9(4) COMP VALUE 1.01 REC_POS_TOUCHE.# 02 CLE_POS_TOUCHE PIC 9(4) COMP. 02 TOUCHE_PARAM PIC X(30). 02 TOUCHE_HELP. 03 TOUCHE_NAME PIC X(10).$ 03 FILLER PIC X VALUE SPACES.! 03 TOUCHE_LIBELLE PIC X(35).$ 03 FILLER PIC X VALUE SPACES. 03 TOUCHE_FICH PIC X(80). 02 PIC X(584).01 POSITION_FICH./ 02 PIC X(22) VALUE "GMENU$DIR:POS_DISPLAY.". 02 TYPE_FICH PIC X(12).01 INIT_LIGNE_COLONNE. 02 PIC 9 VALUE 1.* MENU PRINCIPAL 02 PIC 9(9) COMP VALUE 3. 02 PIC 9(9) COMP VALUE 2. 02 PIC 9(12) VALUE 0. * MENU 2 02 PIC 9(9) COMP VALUE 6. 02 PIC 9(9) COMP VALUE 2. 02 PIC 9(12) VALUE 0. * MENU 3 02 PIC 9(9) COMP VALUE 8. 02 PIC 9(9) COMP VALUE 8. 02 PIC 9(12) VALUE 0. * MENU 4 02 PIC 9(9) COMP VALUE 10. 02 PIC 9(9) COMP VALUE 14. 02 PIC 9(12) VALUE 0. * MENU 5 02 PIC 9(9) COMP VALUE 12. 02 PIC 9(9) COMP VALUE 20. 02 PIC 9(12) VALUE 0. * MENU 6 02 PIC 9(9) COMP VALUE 14. 02 PIC 9(9) COMP VALUE 26. 02 PIC 9(12) VALUE 0. * MENU 7 02 PIC 9(9) COMP VALUE 6. 02 PIC 9(9) COMP VALUE 34. 02 PIC 9(12) VALUE 0. * MENU 8 02 PIC 9(9) COMP VALUE 8. 02 PIC 9(9) COMP VALUE 40. 02 PIC 9(12) VALUE 0. * MENU 9 02 PIC 9(9) COMP VALUE 7. 02 PIC 9(9) COMP VALUE 2. 02 PIC 9(12) VALUE 0. * MENU 10 02 PIC 9(9) COMP VALUE 9. 02 PIC 9(9) COMP VALUE 8. 02 PIC 9(12) VALUE 0.01 RETOUR PIC 9(9) COMP.*01 DRAPEAU_TIMEOUT PIC 9(9) COMP VALUE 0.'01 TIME_SELECT PIC 9(9) COMP VALUE 0.01 BUFFER_TIMEOUT PIC X(9).01 DUMMY1 PIC 9(9) COMP.01 DUMMY2 PIC 9(9) COMP.01 LEN PIC 9(4) COMP.01 CONTEXTE PIC 9(  ²,*e$ GMENU011.Bú#6;Õ'[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113PQm_" 9) COMP.-01 DRAPEAU_BROADCAST PIC 9(9) COMP EXTERNAL.!01 DRAPEAU_ERREUR PIC 9(9) COMP.01 BUFFER_ERREUR PIC X(80).*01 PASTEBOARD_ID PIC 9(9) COMP EXTERNAL.(01 KEYBOARD_ID PIC 9(9) COMP EXTERNAL.01 CURSOR_FLAGS PIC 9(9) COMP.#01 LABEL_ATTRIBUTES PIC 9(9) COMP.01 COMMAND_LINE. 02 PIC X VALUE "@". 02 BUFFER_FILE PIC X(254).* Display id...'01 DISPLAY_ID PIC 9(9) COMP EXTERNAL.'01 MESSAGE_ID PIC 9(9) COMP EXTERNAL.01 HELP_ID PIC 9(9) COMP.01 HELP_ID_1 PIC 9(9) COMP.01 TERM_SIZE PIC 9(9) COMP. 01 LIMITE_DROITE PIC 9(9) COMP.'01 MAX_DISPLAYS PIC 9(4) COMP VALUE 8.01 DISPLAY_IDS. 02 ITM OCCURS 8. 03 M_ID PIC 9(9) COMP. 03 INFO_M." 04 NBR_ITM_M PIC 9(4) COMP. 03 DESC_M.! 04 PIC 9(4) COMP VALUE 36.# 04 PIC 9(4) COMP VALUE 1038.# 04 POINTEUR_M PIC 9(9) COMP. 04 PIC 9(4) COMP VALUE 0." 04 PIC 9(4) COMP VALUE 256.# 04 PIC 9(9) COMP VALUE 1440. 03 SUB_MENU. 04 OCCURS 40. 05 ITM_M PIC X(35). 05 SUITE_M PIC X. 03 INFO_MENU OCCURS 40.! 04 FICH_MENU_M PIC X(80)." 04 PARAM_MENU_M PIC X(30). 04 ID_MENU_M PIC 9(12).01 BUFFER_FICH_MENU PIC X(80). 01 BUFFER_PARAM_MENU PIC X(30).01 M_CUR PIC 9.01 M_CUR_SAV PIC 9.01 ERREUR_ID PIC 9(9) COMP.01 PROFIL_USER PIC 9(9) COMP.01 PERE PIC 9(12).01 TOUCHE PIC 9(4) COMP.01 CHOIX PIC 9(4) COMP.01 CHOIX_D PIC X(2).01 MESSAGE_TEXT PIC X(128).?01 SMG$_NO_MORMSG PIC 9(9) COMP VALUE EXTERNAL SMG$_NO_MORMSG.A01 SMG$M_WRAP_WORD PIC 9(9) COMP VALUE EXTERNAL SMG$M_WRAP_WORD.;01 SMG$M_BORDER PIC 9(9) COMP VALUE EXTERNAL SMG$M_BORDER.=01 SMG$M_REVERSE PIC 9(9) COMP VALUE EXTERNAL SMG$M_REVERSE.801 SMG$M_BOLD PIC 9(9) COMP VALUE EXTERNAL SMG$M_BOLD.:01 SMG$M_BLINK PIC 9(9) COMP VALUE EXTERNAL SMG$M_BLINK.;01 SMG$M_NOTABS PIC 9(9) COMP VALUE EXTERNAL SMG$M_NOTABS.C01 SMG$M_CURSOR_OFF PIC 9(9) COMP VALUE EXTERNAL SMG$M_CURSOR_OFF.A01 SMG$M_CURSOR_ON PIC 9(9) COMP VALUE EXTERNAL SMG$M_CURSOR_ON.E01 SMG$M_SCROLL_JUMP PIC 9(9) COMP VALUE EXTERNAL SMG$M_SCROLL_JUMP.G01 SMG$M_RETURN_IMMED PIC 9(9) COMP VALUE EXTERNAL SMG$M_RETURN_IMMED.G01 SMG$M_FIXED_FORMAT PIC 9(9) COMP VALUE EXTERNAL SMG$M_FIXED_FORMAT.D01 SMG$K_VERTICAL PIC 9(9) COMP VALUE EXTERNAL SMG$K_VERTICAL.801 SMG$K_LEFT PIC 9(9) COMP VALUE EXTERNAL SMG$K_LEFT.:01 SMG$K_RIGHT PIC 9(9) COMP VALUE EXTERNAL SMG$K_RIGHT.601 SMG$K_TOP PIC 9(9) COMP VALUE EXTERNAL SMG$K_TOP.;01 TERM_RETURN PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_CR.701 TERM_F8 PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_F8.;01 TERM_ZERO PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_ZERO.801 TERM_UN PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_ONE.<01 TERM_HUIT PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_EIGHT.?01 TERM_SELECT PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_SELECT.?01 TERM_REMOVE PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_REMOVE.701 TERM_FH PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_UP.901 TERM_FB PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_DOWN.:01 TERM_FD PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_RIGHT.901 TERM_FG PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_LEFT.>01 TERM_CTRLW PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_CTRLW.<01 TERM_HELP PIC 9(4) COMP VALUE EXTERNAL SMG$K_TRM_HELP.@01 TERM_TIMEOUT PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_TIMEOUT.701 TERM_DO PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_DO.D01 TERM_UPPER_A PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_UPPERCASE_A.D01 TERM_UPPER_Z PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_UPPERCASE_Z.D01 TERM_LOWER_A PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_LOWERCASE_A.D01 TERM_LOWER_Z PIC 9(9) COMP VALUE EXTERNAL SMG$K_TRM_LOWERCASE_Z.=01 JPI$_USERNAME PIC 9(9) COMP VALUE EXTERNAL JPI$_USERNAME.* TRM$M_TM_PURGE = 2048.,01 TRM$M_TM_PURGE PIC 9(9) COMP VALUE 2048.?01 DVI$_DEVBUFSIZ PIC 9(9) COMP VALUE EXTERNAL DVI$_DEVBUFSIZ.801 SS$_WASSET PIC 9(9) COMP VALUE EXTERNAL SS$_WASSET.:01 SS$_TIMEOUT PIC 9(9) COMP VALUE EXTERNAL SS$_TIMEOUT.%01 COL_TIME PIC 9(9) COMP EXTERNAL.(01 DELTA_TIME PIC 9(18) COMP EXTERNAL.?01 LIB$FUNC PIC 9(9) COMP VALUE EXTERNAL LIB$K_DELTA_SECONDS. 01 DELTA_TIMER PIC 9(18) COMP.#01 DAYTIME_HORLOGE PIC 9(18) COMP.01 BUFFER_HORLOGE PIC X(17).601 SYS$SETEF PIC 9(9) COMP VALUE EXTERNAL SYS$SETEF.!01 NOMB0 PIC 9(9) COMP VALUE 0. 01 NOMBRES.# 02 NOMB PIC 9(9) COMP OCCURS 80.,01 GAG_FONCTION PIC X(9) VALUE "GMENU$GAG".PROCEDURE DIVISION.DEBUT. $ CALL "SYS$SETAST" USING BY VALUE 0.)* Initialisation d'un tableau de nombres. MOVE 1 TO RETOUR. PERFORM UNTIL RETOUR > 80 MOVE RETOUR TO NOMB(RETOUR) ADD 1 TO RETOUR END-PERFORM. INITIALIZE DISPLAY_IDS.* Création des entités smg PERFORM INIT_SMG..* Ouverture du fichier et lecture du profil... PERFORM LEC_USER.* Ecriture des libellés PERFORM INIT_LIBELLES.* TRAITEMENT PRINCIPAL* ~~~~~~~~~~~~~~~~~~~~BOUCLE_PRINCIPALE.% PERFORM CANCEL_TIMER THRU SET_TIMER. PERFORM GEST_AST_EF." CALL "SMG$SELECT_FROM_MENU" USING0 KEYBOARD_ID M_ID(M_CUR) CHOIX CUR_CHOIX(M_CUR)+ SMG$M_RETURN_IMMED OMITTED NOMB(5) TOUCHE GIVING RETOUR.$ CALL "SYS$SETAST" USING BY VALUE 1.E PERFORM UNTIL TOUCHE NOT = TERM_TIMEOUT AND RETOUR NOT = SS$_TIMEOUT$ CALL "SYS$SETAST" USING BY VALUE 0 PERFORM GEST_AST_EF# CALL "SMG$SELECT_FROM_MENU" USING( KEYBOARD_ID M_ID(M_CUR) CHOIX OMITTED, SMG$M_RETURN_IMMED OMITTED NOMB(5) TOUCHE GIVING RETOUR$ CALL "SYS$SETAST" USING BY VALUE 1 END-PERFORM. MOVE CHOIX TO CUR_CHOIX(M_CUR).$ CALL "SYS$SETAST" USING BY VALUE 0. MOVE M_CUR TO CUR_DISPLAY.6 IF DRAPEAU_ERREUR IS SUCCESS THEN PERFORM REM_ERREUR.% IF DRAPEAU_BROADCAST IS SUCCESS THEN PERFORM REM_BROADCAST ELSE EVALUATE TOUCHE WHEN TERM_RETURN' PERFORM SELECTION THRU FIN_SELECTION WHEN TERM_SELECT- PERFORM MOVE_DISPLAY THRU FIN_MOVE_DISPLAY WHEN TERM_F8 PERFORM ECRITURE_POS GO TO FIN WHEN TERM_UN THRU TERM_HUIT! SUBTRACT TERM_ZERO FROM TOUCHE+ PERFORM CHANGE_MENU THRU FIN_CHANGE_MENU WHEN TERM_REMOVE+ PERFORM EFFACE_MENU THRU FIN_EFFACE_MENU WHEN TERM_CTRLW0 CALL "SMG$REPAINT_SCREEN" USING PASTEBOARD_ID WHEN TERM_HELP PERFORM AIDE THRU FIN_AIDE WHEN TERM_DO1 PERFORM GESTION_TOUCHE THRU FIN_GESTION_TOUCHE% WHEN TERM_LOWER_A THRU TERM_LOWER_Z5 PERFORM GOTO_NEXT_LETTER THRU FIN_GOTO_NEXT_LETTER% WHEN TERM_UPPER_A THRU TERM_UPPER_Z5 PERFORM GOTO_NEXT_LETTER THRU FIN_GOTO_NEXT_LETTER WHEN OTHER( CALL "SMG$RING_BELL" USING DISPLAY_ID END-EVALUATE END-IF. GO TO BOUCLE_PRINCIPALE.P*=============================================================================== * Sélection d'un item de menu...P*=============================================================================== SELECTION.M* Si la sélection est un menu terminale, on lance la procédure correspondante. IF FICH_MENU_M(M_CUR,CHOIX) NOT = SPACES THEN5 MOVE PARAM_MENU_M(M_CUR,CHOIX) TO BUFFER_PARAM_MENU3 MOVE FICH_MENU_M(M_CUR,CHOIX) TO BUFFER_FICH_MENU( PERFORM LANCE_PROC THRU FIN_LANCE_PROC GO TO FIN_SELECTION END-IF.I* On cherche si le menu n'est pas déjà affiché ou, dans le cas contraire,.* un 'slot' libre dans le tableau des DISPLAYS MOVE MAX_DISPLAYS TO DUMMY1. MOVE 0 TO DUMMY2. PERFORM UNTIL DUMMY1 < 2 IF NBR_ITM_M(DUMMY1) = 0 THEN MOVE DUMMY1 TO DUMMY2 END-IF5 IF IDPERE_POS(DUMMY1) = ID_MENU_M(M_CUR,CHOIX) THEN MOVE DUMMY1 TO TOUCHE+ PERFORM CHANGE_MENU THRU FIN_CHANGE_MENU GO TO FIN_SELECTION END-IF SUBTRACT 1 FROM DUMMY1 END-PERFORM. IF DUMMY2 = 0 THEN% CALL "SMG$PUT_LINE" USING ERREUR_ID/ BY DESCRIPTOR "Plus de menus disponibles..."( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR GO TO FIN_SELECTION END-IF. MOVE M_CUR TO M_CUR_SAV.3 MOVE ID_MENU_M(M_CUR,CHOIX) TO IDPERE_POS(DUMMY2). MOVE DUMMY2 TO M_CUR.* Construction du label borderF INITIALIZE INFO_M(M_CUR) SUB_MENU(M_CUR) LABEL_BORDER(M_CUR) CHOIX_D. CALL "STR$TRIM" USING = BY DESCRIPTOR ITM_M(M_CUR_SAV,CHOIX) ITM_M(M_CUR_SAV,CHOIX) BY REFERENCE DUMMY2. CALL "SYS$FAO" USING% BY DESCRIPTOR "!UW" OMITTED CHOIX_D BY VALUE CHOIX.B STRING LABEL_BORDER_IDX(M_CUR_SAV) CHOIX_D "." DELIMITED BY SPACE INTO LABEL_BORDER_IDX(M_CUR); ON OVERFLOW MOVE "**********" TO LABEL_BORDER_IDX(M_CUR). SET RETOUR TO FAILURE. PERFORM UNTIL RETOUR IS SUCCESS3 STRING LABEL_BORDER_IDX(M_CUR) DELIMITED BY SPACE9 " " ITM_M(M_CUR_SAV,CHOIX)(1:DUMMY2) à Ĉ‰j$ GMENU011.Bú#6;Õ'[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113PQðÆ"DELIMITED BY SIZE# " (" M_CUR ")" DELIMITED BY SIZE INTO LABEL_BORDER_STR(M_CUR)& ON OVERFLOW SUBTRACT 1 FROM DUMMY2) NOT ON OVERFLOW SET RETOUR TO SUCCESS END-STRING END-PERFORM. CALL "STR$TRIM" USING ? BY DESCRIPTOR LABEL_BORDER_STR(M_CUR) LABEL_BORDER_STR(M_CUR)' BY REFERENCE LABEL_BORDER_LEN(M_CUR).* On charge le menu...* PERFORM CHARGE_MENU THRU FIN_CHARGE_MENU. IF RETOUR IS FAILURE THEN MOVE 0 TO IDPERE_POS(M_CUR) MOVE M_CUR_SAV TO M_CUR ELSE IF M_CUR_SAV = 1 THEN% CALL "SMG$CHANGE_RENDITION" USING ; M_ID(M_CUR_SAV) NOMB(1) NOMB(1) NOMB(1) TERM_SIZE ELSE% CALL "SMG$CHANGE_RENDITION" USING 2 M_ID(M_CUR_SAV) CHOIX NOMB(1) NOMB(1) NOMB(38) END-IF/ CALL "SMG$LABEL_BORDER" USING M_ID(M_CUR_SAV) BY DESCRIPTOR B LABEL_BORDER_STR(M_CUR_SAV)(1:LABEL_BORDER_LEN(M_CUR_SAV)) BY REFERENCE SMG$K_TOP END-IF.FIN_SELECTION. P*===============================================================================* Lancement d'une procédure.P*=============================================================================== LANCE_PROC. MOVE SPACES TO BUFFER_FILE.) CALL "LIB$FIND_FILE_END" USING CONTEXTE. CALL "LIB$FIND_FILE" USING, BY DESCRIPTOR BUFFER_FICH_MENU BUFFER_FILE BY REFERENCE CONTEXTE2 BY DESCRIPTOR "SYS$DISK:[].COM;" OMITTED OMITTED BY REFERENCE NOMB0 GIVING RETOUR. IF RETOUR IS FAILURE THEN MOVE SPACES TO BUFFER_ERREUR2 STRING "Fichier non trouvé : " DELIMITED BY SIZE BUFFER_FILE DELIMITED BY " " INTO BUFFER_ERREUR% CALL "SMG$PUT_LINE" USING ERREUR_ID BY DESCRIPTOR BUFFER_ERREUR( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR GO TO FIN_LANCE_PROC END-IF.% STRING BUFFER_FILE DELIMITED BY " ") " " BUFFER_PARAM_MENU DELIMITED BY SIZE INTO BUFFER_FILE.1 CALL "SMG$ERASE_PASTEBOARD" USING PASTEBOARD_ID. PERFORM ECRITURE_POS.8 CALL "LIB$DO_COMMAND" USING BY DESCRIPTOR COMMAND_LINE.FIN_LANCE_PROC.P*===============================================================================.* Sauvegarde des positions dans POS_DISPLAY...P*=============================================================================== ECRITURE_POS. MOVE 0 TO CLE_POS. READ POSITION_DISPLAYS REGARDLESS OF LOCK KEY IS CLE_POS INVALID KEY0 WRITE REC_POSITION_DISPLAYS FROM REC_POS_TEMP ALLOWING NO OTHERS INVALID KEY CONTINUE END-WRITE NOT INVALID KEY2 REWRITE REC_POSITION_DISPLAYS FROM REC_POS_TEMP ALLOWING NO OTHERS INVALID KEY CONTINUE END-REWRITE END-READ.! UNLOCK POSITION_DISPLAYS RECORD.P*=============================================================================== * SWITCH sur un menu existant...P*=============================================================================== CHANGE_MENU.. IF TOUCHE = M_CUR THEN GO TO FIN_CHANGE_MENU. IF NBR_ITM_M(TOUCHE) = 0 THEN% CALL "SMG$PUT_LINE" USING ERREUR_ID& BY DESCRIPTOR "Choix impossible..."( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR ELSEA+ CALL "SMG$LABEL_BORDER" USING M_ID(M_CUR)* BY DESCRIPTOR *; LABEL_BORDER_STR(M_CUR)(1:LABEL_BORDER_LEN(M_CUR))  BY REFERENCE SMG$K_TOP IF M_CUR = 1 THENU% CALL "SMG$CHANGE_RENDITION" USING a1 M_ID(M_CUR) NOMB(1) NOMB(1) NOMB(1) TERM_SIZEo ELSE% CALL "SMG$CHANGE_RENDITION" USING . M_ID(M_CUR) CHOIX NOMB(1) NOMB(1) NOMB(38) END-IF MOVE TOUCHE TO M_CUR** On met le menu correspondant en avant...# CALL "SMG$GET_PASTING_INFO" USINGS$ M_ID(M_CUR) PASTEBOARD_ID DUMMY1 & LIGNE_POS(M_CUR) COLONNE_POS(M_CUR)* CALL "SMG$REPASTE_VIRTUAL_DISPLAY" USING M_ID(M_CUR) PASTEBOARD_ID& LIGNE_POS(M_CUR) COLONNE_POS(M_CUR)+ CALL "SMG$LABEL_BORDER" USING M_ID(M_CUR)o BY DESCRIPTOR; LABEL_BORDER_STR(M_CUR)(1:LABEL_BORDER_LEN(M_CUR)) , BY REFERENCE SMG$K_TOP OMITTED SMG$M_BOLD END-IF.FIN_CHANGE_MENU.P*===============================================================================* EFFACEMENT D'UN MENU... P*=============================================================================== EFFACE_MENU.) IF M_CUR = 1 THEN GO TO FIN_EFFACE_MENU.u* CALL "SMG$DELETE_MENU" USING M_ID(M_CUR).> INITIALIZE INFO_M(M_CUR) SUB_MENU(M_CUR) LABEL_BORDER(M_CUR). MOVE 0 TO IDPERE_POS(M_CUR). ) CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USINGo M_ID(M_CUR) PASTEBOARD_ID. MOVE 1 TO TOUCHE.* PERFORM CHANGE_MENU THRU FIN_CHANGE_MENU.FIN_EFFACE_MENU.P*===============================================================================* DEPLACEMENT D'UN DISPLAY...aP*=============================================================================== MOVE_DISPLAY.** IF M_CUR = 1 THEN GO TO FIN_MOVE_DISPLAY.$ CALL "SMG$PUT_LINE" USING ERREUR_ID BY DESCRIPTOR ; "Terminal en mode déplacement (SELECT pour terminer)..."( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED. PERFORM TRT_ERREUR.MOVE_DISPLAY_1.D% PERFORM CANCEL_TIMER THRU SET_TIMER._8 PERFORM WITH TEST AFTER UNTIL TOUCHE NOT = TERM_TIMEOUT AND RETOUR NOT = SS$_TIMEOUT$ CALL "SYS$SETAST" USING BY VALUE 0 PERFORM GEST_AST_EFN" CALL "SMG$READ_KEYSTROKE" USING % KEYBOARD_ID TOUCHE OMITTED NOMB(5) GIVING RETOUR$ CALL "SYS$SETAST" USING BY VALUE 1 END-PERFORM.I$ CALL "SYS$SETAST" USING BY VALUE 0.% IF DRAPEAU_BROADCAST IS SUCCESS THEN  PERFORM REM_BROADCAST  ELSE_ EVALUATE TOUCHE TRUE  WHEN TERM_SELECT ANY PERFORM REM_ERREUR  GO TO FIN_MOVE_DISPLAY($ WHEN TERM_FH LIGNE_POS(M_CUR) > 3# SUBTRACT 1 FROM LIGNE_POS(M_CUR)3% WHEN TERM_FB LIGNE_POS(M_CUR) < 20  ADD 1 TO LIGNE_POS(M_CUR)2 WHEN TERM_FD COLONNE_POS(M_CUR) < LIMITE_DROITE ADD 2 TO COLONNE_POS(M_CUR)- WHEN TERM_FG COLONNE_POS(M_CUR) > 3R% SUBTRACT 2 FROM COLONNE_POS(M_CUR)E WHEN TERM_CTRLW ANYV0 CALL "SMGàX%u ~ GMENU.BCK‘8—*[AROBAS.LAURENT]GMENU011.B;1$$Vœ|Á$REPAINT_SCREEN" USING PASTEBOARD_ID WHEN OTHER( CALL "SMG$RING_BELL" USING DISPLAY_ID END-EVALUATE END-IF.' CALL "SMG$MOVE_VIRTUAL_DISPLAY" USING @ M_ID(M_CUR) PASTEBOARD_ID LIGNE_POS(M_CUR) COLONNE_POS(M_CUR). GO TO MOVE_DISPLAY_1.FIN_MOVE_DISPLAY.EP*===============================================================================0* Déplacement dans un menu grâce à une touche...P*===============================================================================GOTO_NEXT_LETTER..( CALL "SMG$KEYCODE_TO_NAME" USING TOUCHE BY DESCRIPTOR TOUCHE_NAME.! MOVE CUR_CHOIX(M_CUR) TO TOUCHE.  ADD 1 TO CUR_CHOIX(M_CUR). 2 PERFORM UNTIL CUR_CHOIX(M_CUR) > NBR_ITM_M(M_CUR)% CALL "STR$CASE_BLIND_COMPARE" USING# BY DESCRIPTOR TOUCHE_NAME(1:1) ' ITM_M(M_CUR,CUR_CHOIX(M_CUR))(1:1)( GIVING RETOUR6 IF RETOUR = 0 THEN GO TO FIN_GOTO_NEXT_LETTER END-IF ADD 1 TO CUR_CHOIX(M_CUR)C END-PERFORM. MOVE 1 TO CUR_CHOIX(M_CUR).) PERFORM UNTIL CUR_CHOIX(M_CUR) >= TOUCHE2% CALL "STR$CASE_BLIND_COMPARE" USING(# BY DESCRIPTOR TOUCHE_NAME(1:1) (' ITM_M(M_CUR,CUR_CHOIX(M_CUR))(1:1)A GIVING RETOUR6 IF RETOUR = 0 THEN GO TO FIN_GOTO_NEXT_LETTER END-IF ADD 1 TO CUR_CHOIX(M_CUR) END-PERFORM. FIN_GOTO_NEXT_LETTER. P*==============================================================================='* INITIALISATION DE L'ENVIRONNEMENT SMG P*=============================================================================== INIT_SMG. # CALL "SMG$CREATE_PASTEBOARD" USINGU PASTEBOARD_ID( BY DESCRIPTOR "TT:"O GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.9N* On interdit l'utilisation de TAB dans la construction des displays, de façonE* à être indépendant de la configuration des tabulations du terminal.) CALL "SMG$CONTROL_MODE" USING PASTEBOARD_ID OMITTED RETOUR.A9 CALL "MTH$JIOR" USING RETOUR SMG$M_NOTABS GIVING RETOUR.  CALL "SMG$CONTROL_MODE" USING PASTEBOARD_ID RETOUR.P) CALL "SMG$CREATE_VIRTUAL_KEYBOARD" USING9 KEYBOARD_ID  BY DESCRIPTOR "TT:"9 GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.F* On efface le curseur et on configure le terminal en défilé rapide...? ADD SMG$M_CURSOR_OFF TO SMG$M_SCROLL_JUMP GIVING CURSOR_FLAGS. ! CALL "SMG$SET_CURSOR_MODE" USINGM PASTEBOARD_ID CURSOR_FLAGS.I4 CALL "SMG$SET_KEYPAD_MODE" USING KEYBOARD_ID NOMB0.)* Recherche de la largeur du terminal TT:U CALL "LIB$GETDVI" USING DVI$_DEVBUFSIZ OMITTED BY DESCRIPTOR "TT:"  BY REFERENCE TERM_SIZE GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR. * Création displays.( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING NOMB(1) TERM_SIZE DISPLAY_ID GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VAà †Ë‹$ GMENU011.Bú#6;Õ'[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113PQ&Ê",LUE RETOUR.0?* LIMITE_DROITE est la limite pour les déplacements de DISPLAYS30* COL_TIME est la colonne d'affichage de l'heure, SUBTRACT 16 FROM TERM_SIZE GIVING COL_TIME. SUBTRACT 2 FROM TERM_SIZE.)1 SUBTRACT 37 FROM TERM_SIZE GIVING LIMITE_DROITE.P* Ecrans de HELP...1* - Principal. CALL "SMG$LOAD_VIRTUAL_DISPLAY" USING HELP_ID4 BY DESCRIPTOR "GMENU$SYSTEM:GMENU_SCREEN_HELP.DAT" GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.PC CALL "SMG$CHANGE_VIRTUAL_DISPLAY" USING HELP_ID OMITTED TERM_SIZE.O* - Des touches ( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING+ NOMB(21) TERM_SIZE HELP_ID_1 SMG$M_BORDER1 GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.)( CALL "SMG$LABEL_BORDER" USING HELP_ID_1> BY DESCRIPTOR "Liste des touches définies par l'utilisateur" OMITTED OMITTEDP BY REFERENCE SMG$M_BOLD.* Ecran des messages...9( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING, NOMB(10) TERM_SIZE MESSAGE_ID SMG$M_BORDER GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.- ADD SMG$M_BOLD TO SMG$M_BLINK GIVING DUMMY1.E) CALL "SMG$LABEL_BORDER" USING MESSAGE_IDI BY DESCRIPTOR ; "*** NOUVEAU MESSAGE (tapez une touche pour sortir) ***"P( BY REFERENCE SMG$K_TOP OMITTED DUMMY1.* Ecrans de menus... MOVE 2 TO M_CUR.C# PERFORM UNTIL M_CUR > MAX_DISPLAYS1) CALL "SMG$CREATE_VIRTUAL_DISPLAY" USINGS- NOMB(15) NOMB(38) M_ID(M_CUR) SMG$M_BORDERE GIVING RETOUR IF RETOUR IS FAILURE THEN ( CALL "LIB$STOP" USING BY VALUE RETOUR END-IFO* Astuce pour remplir les pointeurs des descripteurs de menus avec les adressesA,* des structures de menus correspondantes... CALL "LIB$ANALYZE_SDESC" USING BY DESCRIPTOR SUB_MENU(M_CUR)( BY REFERENCE DUMMY1 POINTEUR_M(M_CUR) ADD 1 TO M_CUR END-PERFORM.R( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING( NOMB(1) TERM_SIZE M_ID(1) SMG$M_BORDER GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.V CALL "LIB$ANALYZE_SDESC" USING  BY DESCRIPTOR SUB_MENU(1)E$ BY REFERENCE DUMMY1 POINTEUR_M(1).( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING NOMB(1) NOMB(78) ERREUR_ID GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.$ RP*===============================================================================:* Ouverture du fichier et lecture du profil utilisateur...P*=============================================================================== LEC_USER.T# OPEN INPUT MENU_FICH ALLOWING ALL.M INITIALIZE REC_MENU.V MOVE 2 TO TYPE_MENU._* CALL "LIB$GETJPI" USINGR(* JPI$_USERNAME OMITTED OMITTED OMITTED"* BY DESCRIPTOR NAME_MENU OMITTED+* On travaille sur le symbol UTILISATEUR.... CALL "LIB$GET_SYMBOL" USING' BY DESCRIPTOR "UTILISATEUR" NAME_MENU$ GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.P MOVE NAME_MENU TO TYPE_FICH.$& CALL "SMG$PUT_CHARS" USING DISPLAY_ID BY DESCRIPTOR NAME_MENUE BY REFERENCE NOMB(1) NOMB(1).P READ MENU_FICH  KEY IS CLE_MENUO INVALID KEY)& CALL "SMG$PUT_LINE" USING ERREUR_ID1 BY DESCRIPTOR "Votre profil n'est pas défini"U) BY REFERENCE NOMB0 SMG$M_BOLD OMITTED_ PERFORM TRT_ERREUR5 CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHEE OMITTED NOMB(30) GO TO FIN END-READ.! MOVE PROFIL_MENU TO PROFIL_USER. ;* Ouverture du fichier des lignes et colonnes et lecture...O) OPEN I-O POSITION_DISPLAYS ALLOWING ALL. " INITIALIZE REC_POSITION_DISPLAYS. MOVE 0 TO CLE_POS) READ POSITION_DISPLAYS INTO REC_POS_TEMP REGARDLESS OF LOCK KEY IS CLE_POS6 INVALID KEY MOVE INIT_LIGNE_COLONNE TO LIGNE_COLONNE END-READ.! UNLOCK POSITION_DISPLAYS RECORD.P*===============================================================================* INITIALISATION DES LIBELLESrP*===============================================================================INIT_LIBELLES.' CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING~+ DISPLAY_ID PASTEBOARD_ID NOMB(1) NOMB(1)._A* Chaque message nouvellement arrivé met à 1 l'event flag n° 2...R6 CALL "SMG$SET_BROADCAST_TRAPPING" USING PASTEBOARD_ID BY VALUE SYS$SETEF 2 GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR..* Initialisation du TIMER...: CALL "LIB$SET_SYMBOL" USING BY DESCRIPTOR "GMENU$FIN" "". CALL "LIB$GET_SYMBOL" USING , BY DESCRIPTOR "GMENU$TIMER" BUFFER_TIMEOUT BY REFERENCE DUMMY1I GIVING RETOUR. IF RETOUR IS SUCCESS THEN CALL "OTS$CVT_TI_L" USINGV) BY DESCRIPTOR BUFFER_TIMEOUT(1:DUMMY1)L BY REFERENCE TIME_SELECTH END-IF.2 IF TIME_SELECT <= 0 THEN MOVE 600 TO TIME_SELECT.& CALL "LIB$CVT_TO_INTERNAL_TIME" USING# LIB$FUNC TIME_SELECT DELTA_TIMER.M& CALL "LIB$CVT_TO_INTERNAL_TIME" USING LIB$FUNC NOMB(60) DELTA_TIME.* Affichage des menus...8 CALL "SMG$BEGIN_PASTEBOARD_UPDATE" USING PASTEBOARD_ID GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.R7* Ne pas pouvoir charger le menu principal est fatal..._ MOVE 1 TO M_CUR. MOVE 0 TO IDPERE_POS(M_CUR).H2 MOVE "Menu Principal (1)" TO LABEL_BORDER_STR(1).$ MOVE SPACES TO LABEL_BORDER_IDX(1). MOVE 18 TO LABEL_BORDER_LEN(1).% MOVE SMG$M_BOLD TO LABEL_ATTRIBUTES.") PERFORM CHARGE_MENU THRU FIN_CHARGE_MENUP IF RETOUR IS FAILURE THEN 4 CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30)R GO TO FINU END-IF. MOVE 0 TO LABEL_ATTRIBUTES. MOVE 2 TO M_CUR.E# PERFORM UNTIL M_CUR > MAX_DISPLAYST0 IF IDPERE_POS(M_CUR) NOT = 0 OR M_CUR = 1 THEN+ PERFORM CHARGE_MENU THRU FIN_CHARGE_MENUG IF RETOUR IS FAILURE THEN MOVE 0 TO IDPERE_POS(M_CUR)B END-IFI END-IF ADD 1 TO M_CUR END-PERFORM.=% MOVE SMG$M_BOLD TO LABEL_ATTRIBUTES.= MOVE 1 TO M_CUR.  IF CUR_DISPLAY NOT = 0 THEN MOVE CUR_DISPLAY TO TOUCHE* PERFORM CHANGE_MENU THRU FIN_CHANGE_MENU END-IF.?* On vide le buffer de lecture et on termine le batch update...c) CALL "SMG$READ_STRING" USING KEYBOARD_ID)- BY DESCRIPTOR BUFFER_ERREUR OMITTED OMITTEDH$ BY REFERENCE TRM$M_TM_PURGE NOMB0.6 CALL "SMG$END_PASTEBOARD_UPDATE" USING PASTEBOARD_ID GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.nP*===============================================================================* CHARGEMENT D'UN MENU...AP*=============================================================================== CHARGE_MENU. INITIALIZE REC_MENU.1 MOVE 1 TO TYPE_MENU. ' MOVE IDPERE_POS(M_CUR) TO IDPERE_MENU.H) START MENU_FICH KEY IS EQUAL TO CLE_MENUR INVALID KEY & CALL "SMG$PUT_LINE" USING ERREUR_ID& BY DESCRIPTOR "Menu non défini...") BY REFERENCE NOMB0 SMG$M_BOLD OMITTED  PERFORM TRT_ERREURN SET RETOUR TO FAILURE GO TO FIN_CHARGE_MENU END-START.  INITIALIZE SUB_MENU(M_CUR). SET RETOUR TO SUCCESS.R READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE.M MOVE 1 TO DUMMY1.I* On sélectionne les menus dont les profils sont compatibles avec ceux des* l'utilisateur...3 PERFORM UNTIL RETOUR IS FAILURE OR DUMMY1 > 40 OR _& IDPERE_MENU NOT = IDPERE_POS(M-CUR)0 CALL "MTH$JIAND" USING PROFIL_USER PROFIL_MENU GIVING PROFIL_MENU IF PROFIL_MENU NOT = 0 THENS+ MOVE LIBELLE_MENU TO ITM_M(M_CUR,DUMMY1) / IF FICH_MENU = SPACES AND M_CUR NOT = 1 THENR% MOVE "<" TO SUITE_M(M_CUR,DUMMY1)Y END-IFN* MOVE ID_MENU TO ID_MENU_M(M_CUR,DUMMY1). MOVE FICH_MENU TO FICH_MENU_M(M_CUR,DUMMY1)0 MOVE PARAM_MENU TO PARAM_MENU_M(M_CUR,DUMMY1) ADD 1 TO DUMMY1 END-IF READ MENU_FICH NEXT  AT END SET RETOUR TO FAILUREO END-READ END-PERFORM.S EVALUATE TRUE WHEN DUMMY1 = 1Y% CALL "SMG$PUT_LINE" USING ERREUR_ID- BY DESCRIPTOR "Aucune option autorisée..."O( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR SET RETOUR TO FAILUREG WHEN DUMMY1 > 40% CALL "SMG$PUT_LINE" USING ERREUR_IDR; BY DESCRIPTOR "Trop d'items dans le menu...(plus de 40)"g( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR4 CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30)_ GO TO FIN WHEN OTHERV7 SUBTRACT 1 FROM DUMMY1 GIVING NBR_ITM_M(M_CUR) DUMMY1  END-SUBTRACT IF M_CUR = 1 THENO7 MOVE "Menu Principal (1)" TO LABEL_BORDER_STR(M_CUR)U% MOVE 18 TO LABEL_BORDER_LEN(M_CUR)1 CALL "SMG$CREATE_MENU" USING  M_ID(M_CUR) DESC_M(M_CUR)D ELSE$ MOVE IDPERE_POS(M_CUR) TO ID_MENU READ MENU_FICHS KEY IS ID_MENU INVALID KEY  SET RETOUR TO FAILURE GO TO FIN_CHARGE_MENU END-READ=(* On vérifie que le père est autorisé...1 CALL "MTH$JIAND" USING PRà 6ã‰ê$ GMENU011.Bú#6;Õ'[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113PQ»S"=OFIL_USER PROFIL_MENU. GIVING PROFIL_MENU IF PROFIL_MENU = 0 THEN SET RETOUR TO FAILURE= GO TO FIN_CHARGE_MENUC END-IFR IF DUMMY1 > 15 THEN I MOVE 15 TO DUMMY1 END-IFB+ CALL "SMG$CHANGE_VIRTUAL_DISPLAY" USING C M_ID(M_CUR) DUMMY1- CALL "SMG$ERASE_DISPLAY" USING M_ID(M_CUR): CALL "SMG$CREATE_MENU" USING , M_ID(M_CUR) DESC_M(M_CUR) SMG$K_VERTICAL SMG$M_FIXED_FORMAT NOMB(1) END-IF+ CALL "SMG$LABEL_BORDER" USING M_ID(M_CUR)D BY DESCRIPTOR _; LABEL_BORDER_STR(M_CUR)(1:LABEL_BORDER_LEN(M_CUR))U2 BY REFERENCE SMG$K_TOP OMITTED LABEL_ATTRIBUTES( IF COLONNE_POS(M_CUR) > TERM_SIZE THEN- SUBTRACT TERM_SIZE FROM COLONNE_POS(M_CUR)R END-IF( CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING M_ID(M_CUR) PASTEBOARD_ID& LIGNE_POS(M_CUR) COLONNE_POS(M_CUR) SET RETOUR TO SUCCESS" END-EVALUATE.FIN_CHARGE_MENU. RP*===============================================================================* TRAITEMENT DES BROADCASTS...P*===============================================================================REM_BROADCAST.C CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USING MESSAGE_ID PASTEBOARD_ID.=+ CALL "SMG$ERASE_DISPLAY" USING MESSAGE_ID.C" SET DRAPEAU_BROADCAST TO FAILURE.P*===============================================================================* TRAITEMENT DES ERREURS...LP*=============================================================================== TRT_ERREUR.S' CALL "SMG$PASTE_VIRTUAL_DISPLAY" USINGO+ ERREUR_ID PASTEBOARD_ID NOMB(24) NOMB(1).E SET DRAPEAU_ERREUR TO SUCCESS.O& CALL "SMG$RING_BELL" USING ERREUR_ID. REM_ERREUR.=) CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USING= ERREUR_ID PASTEBOARD_ID. SET DRAPEAU_ERREUR TO FAILURE.=P*===============================================================================* AIDEP*===============================================================================AIDE. ' CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING ( HELP_ID PASTEBOARD_ID NOMB(3) NOMB(2).E CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30). ) CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USING  HELP_ID PASTEBOARD_ID. FIN_AIDE.BP*===============================================================================A* GESTION DES TOUCHES : Définition, Exécution, Destruction, Aide. P*===============================================================================GESTION_TOUCHE.O$ CALL "SMG$PUT_LINE" USING ERREUR_ID% BY DESCRIPTOR "Tapez une touche..."v( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED. PERFORM TRT_ERREUR.GESTION_TOUCHE_1.E CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30).P PERFORM REM_ERREUR. EVALUATE TOUCHE WHEN TERM_RETURN. PERFORM DEFINE_TOUCHE THRU FIN_DEFINE_TOUCHE WHEN TERM_REMOVE. PERFORM EFFACE_TOUCHE THRU FIN_EFFACE_TOUCHE WHEN TERM_CTRLW(/ CALL "SMG$REPAINT_SCREEN" USING PASTEBOARD_ID_ GO TO GESTION_TOUCHE_1 WHEN TERM_HELP8 PERFORM CHARGE_HELP_TOUCHE THRU FIN_CHARGE_HELP_TOUCHE WHEN TERM_DO CONTINUE WHEN TERM_TIMEOUT=' CALL "SMG$RING_BELL" USING DISPLAY_ID= WHEN OTHER=0 PERFORM EXECUTE_TOUCHE THRU FIN_EXECUTE_TOUCHE END-EVALUATE.FIN_GESTION_TOUCHE.DEXECUTE_TOUCHE. * On met en uppercase...3 IF TOUCHE >= TERM_LOWER_A AND <= TERM_LOWER_Z THENM# SUBTRACT TERM_LOWER_A FROM TOUCHES ADD TERM_UPPER_A TO TOUCHE END-IF. MOVE TOUCHE TO CLE_POS.+ READ POSITION_DISPLAYS INTO REC_POS_TOUCHE  REGARDLESS OF LOCK KEY IS CLE_POS INVALID KEY= PERFORM REM_ERREUR=& CALL "SMG$PUT_LINE" USING ERREUR_ID& BY DESCRIPTOR "Touche inconnue...") BY REFERENCE NOMB0 SMG$M_BOLD OMITTED= PERFORM TRT_ERREUR= GO TO FIN_EXECUTE_TOUCHE END-READ.! UNLOCK POSITION_DISPLAYS RECORD.T( MOVE TOUCHE_PARAM TO BUFFER_PARAM_MENU.& MOVE TOUCHE_FICH TO BUFFER_FICH_MENU.( PERFORM LANCE_PROC THRU FIN_LANCE_PROC.FIN_EXECUTE_TOUCHE.DEFINE_TOUCHE.* IF FICH_MENU_M(M_CUR,CHOIX) = SPACES THEN% CALL "SMG$PUT_LINE" USING ERREUR_IDA BY DESCRIPTOR O2 "Définition impossible : option non terminale"( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED PERFORM TRT_ERREUR GO TO FIN_DEFINE_TOUCHES END-IF.$ CALL "SMG$PUT_LINE" USING ERREUR_ID9 BY DESCRIPTOR "Tapez la touche que vous voulez définir"P( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED. PERFORM TRT_ERREUR.E CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30).U IF TOUCHE = TERM_TIMEOUT THEN' CALL "SMG$RING_BELL" USING DISPLAY_IDM GO TO FIN_DEFINE_TOUCHEH END-IF.* On met en uppercase...3 IF TOUCHE >= TERM_LOWER_A AND <= TERM_LOWER_Z THEN_# SUBTRACT TERM_LOWER_A FROM TOUCHEU ADD TERM_UPPER_A TO TOUCHE END-IF. PERFORM REM_ERREUR.' MOVE TOUCHE TO CLE_POS CLE_POS_TOUCHE. + READ POSITION_DISPLAYS INTO REC_POS_TOUCHE  REGARDLESS OF LOCK KEY IS CLE_POS INVALID KEY CONTINUE NOT INVALID KEYG" UNLOCK POSITION_DISPLAYS RECORD& CALL "SMG$PUT_LINE" USING ERREUR_ID* BY DESCRIPTOR "Touche déjà définie...") BY REFERENCE NOMB0 SMG$M_BOLD OMITTEDD PERFORM TRT_ERREURL GO TO FIN_DEFINE_TOUCHE END-READ. MOVE SPACES TO TOUCHE_HELP./ MOVE FICH_MENU_M(M_CUR,CHOIX) TO TOUCHE_FICH.=1 MOVE PARAM_MENU_M(M_CUR,CHOIX) TO TOUCHE_PARAM.g, MOVE ITM_M(M_CUR,CHOIX) TO TOUCHE_LIBELLE.( CALL "SMG$KEYCODE_TO_NAME" USING TOUCHE BY DESCRIPTOR TOUCHE_NAME.0 WRITE REC_POSITION_DISPLAYS FROM REC_POS_TOUCHE ALLOWING NO OTHERS% INVALID KEY GO TO FIN_DEFINE_TOUCHE END-WRITE.U! UNLOCK POSITION_DISPLAYS RECORD.RFIN_DEFINE_TOUCHE.EFFACE_TOUCHE.$ CALL "SMG$PUT_LINE" USING ERREUR_ID9 BY DESCRIPTOR "Tapez la touche que vous voulez effacer"C( BY REFERENCE NOMB0 SMG$M_BOLD OMITTED. PERFORM TRT_ERREUR.E CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30).M* On met en uppercase...3 IF TOUCHE >= TERM_LOWER_A AND <= TERM_LOWER_Z THEN # SUBTRACT TERM_LOWER_A FROM TOUCHE ADD TERM_UPPER_A TO TOUCHE END-IF. PERFORM REM_ERREUR. IF TOUCHE = TERM_TIMEOUT THEN' CALL "SMG$RING_BELL" USING DISPLAY_IDE GO TO FIN_DEFINE_TOUCHEO END-IF. MOVE TOUCHE TO CLE_POS.+ READ POSITION_DISPLAYS INTO REC_POS_TOUCHE= REGARDLESS OF LOCK KEY IS CLE_POS INVALID KEY=& CALL "SMG$PUT_LINE" USING ERREUR_ID& BY DESCRIPTOR "Touche inconnue...") BY REFERENCE NOMB0 SMG$M_BOLD OMITTED= PERFORM TRT_ERREURS GO TO FIN_EFFACE_TOUCHE END-READ. DELETE POSITION_DISPLAYS:% INVALID KEY GO TO FIN_EFFACE_TOUCHEL END-DELETE.! UNLOCK POSITION_DISPLAYS RECORD.FIN_EFFACE_TOUCHE.J* Ecriture du display d'aide des touches : Ce display est réécrit à chaqueP* demande d'aide (Cas où l'utilisateur est connecté plusieurs fois: s'il définitM* une touche sur un terminal, il doit pouvoir la visualiser immédiatement surO * l'autre...CHARGE_HELP_TOUCHE.N* CALL "SMG$ERASE_DISPLAY" USING HELP_ID_1. MOVE 0 TO CLE_POS DUMMY1.4 START POSITION_DISPLAYS KEY IS GREATER THAN CLE_POS REGARDLESS OF LOCK* INVALID KEY GO TO FIN_CHARGE_HELP_TOUCHE END-START. CHARGE_HELP_TOUCHE_1. 0 READ POSITION_DISPLAYS NEXT INTO REC_POS_TOUCHE REGARDLESS OF LOCK# AT END GO TO CHARGE_HELP_TOUCHE_2 END-READ.! UNLOCK POSITION_DISPLAYS RECORD.N$ CALL "SMG$PUT_LINE" USING HELP_ID_1 BY DESCRIPTOR TOUCHE_HELP. ADD 1 TO DUMMY1.. GO TO CHARGE_HELP_TOUCHE_1.CHARGE_HELP_TOUCHE_2. # CALL "SMG$CHANGE_RENDITION" USING O7 HELP_ID_1 NOMB(1) NOMB(1) DUMMY1 NOMB(10) SMG$M_BOLD.# CALL "SMG$CHANGE_RENDITION" USING R; HELP_ID_1 NOMB(1) NOMB(12) DUMMY1 NOMB(35) SMG$M_REVERSE.s' CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING"* HELP_ID_1 PASTEBOARD_ID NOMB(3) NOMB(2).E CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID TOUCHE OMITTED NOMB(30). B CALL "SMG$UNPASTE_VIRTUAL_DISPLAY" USING HELP_ID_1 PASTEBOARD_ID.FIN_CHARGE_HELP_TOUCHE.lP*===============================================================================:* Gestions des ASTs, Events FLAGs : Horloge et messages...P*=============================================================================== GEST_AST_EF.* Gestion des broadcasts...G# CALL "SYS$READEF" USING BY VALUE 2  BY REFERENCE DUMMY1O GIVING RETOUR. IF RETOUR = SS$_WASSET THEN# CALL "SYS$CLREF" USING BY VALUE 2_6 CALL "SMG$GET_BROADCAST_MESSAGE" USING PASTEBOARD_ID BY DESCRIPTOR MESSAGE_TEXT_ BY REFERENCE LENB GIVING RETOUR IF RETOUR IS SUCCESS THENG' IF RETOUR NOT = SMG$_NO_MORMSG THEN ( CALL "SMG$PUT_LINE" USING MESSAGE_ID' BY DESCRIPTOR MESSAGE_TEXT(1:LEN) D OMITTED OMITTED OMITTED! BY REFERENCE SMG$M_WRAP_WORDE) CALL "SMG$PUT_LINE" USING MESSAGE_ID c BY DESCRIPTOR ""C END-IFE' IF DRAPEAU_BROADCAST IS FAILURE THENR* CALL "SMG$PASTE_VIRTUAL_DISPLAY"àj+ ¬$ GMENU011.Bú#6;Õ'[AROBAS.LAURENT.TMP_KIT_2]GMENU.COB;113PQ¹N USING MESSAGE_ID PASTEBOARD_ID  NOMB(11) NOMB(2)B$ SET DRAPEAU_BROADCAST TO SUCCESS END-IFG END-IF END-IF.J* Gestion du timeout qui éjecte brutalement l'utilisateur et l'envoie sur >* orbite pour 23904 années (à l'aide d'un coup de pied au c..)# CALL "SYS$READEF" USING BY VALUE 3u BY REFERENCE DUMMY1C GIVING RETOUR. IF RETOUR = SS$_WASSET THEN MOVE 120 TO DUMMY1 MOVE 0 TO TOUCHE5 CALL GAG_FONCTION USING DRAPEAU_TIMEOUT TIME_SELECTO ON EXCEPTION CONTINUE END-CALL IF DRAPEAU_TIMEOUT >=2 THENE PERFORM ECRITURE_POSp GO TO FIN END-IF PERFORM SET_TIMER  END-IF.8* Gestion de l'heure... (en haut à droite de l'écran...)6 CALL "LIB$DATE_TIME" USING BY DESCRIPTOR MESSAGE_TEXT& CALL "SMG$PUT_CHARS" USING DISPLAY_ID" BY DESCRIPTOR MESSAGE_TEXT(1:17) BY REFERENCE NOMB(1) NOMB(63).P*===============================================================================* Gestion du TIMERP*=============================================================================== CANCEL_TIMER.O, CALL "SYS$CANTIM" USING BY VALUE 3 OMITTED. SET_TIMER.# CALL "SYS$SETIMR" USING BY VALUE 3" BY REFERENCE DELTA_TIMER OMITTED BY VALUE 3 OMITTED.IP*===============================================================================* FIN DE TRAVAILP*===============================================================================FIN.1 CALL "SMG$ERASE_PASTEBOARD" USING PASTEBOARD_ID.== CALL "LIB$SET_SYMBOL" USING BY DESCRIPTOR "GMENU$FIN" "FIN".NFIN-FIN. EXIT PROGRAM.END PROGRAM GMENU.)*[AROBAS.LAURENT.TMP_KIT_2]GMENUHELP.HLP;2+,.$%./ 4Jb-;Õ0 123KÿPWO56àODS”7 ³5#”89GHˆºJÿ1 HELP GMENU$SYSTEM:GMENU_UTIL2 Cet utilitaire permet de gérer une base de menus.7 Il s'appelle comme une "foreign command" et vous devez' donc définir un symbole pour l'appeler Par exemple :$ $ MYCOM := $GMENU$SYSTEM:GMENU_UTIL; Ensuite pour exécuter une seule commande ou pour spécifier$ des paramètres avec des symboles : $ $ MY_COM ADD MENU/PARENT='PERE' ...# Ou en interactif (sans symboles) : $ MY_COM GMENU> ... GMENU> EXIT( Tapez HELP pour obtenir une assistance.1 ADD ADD mot-clé 8 Cette commande permet d'ajouter un élément dans la base' suivant le mot-clé que vous spécifiez.2 PROFIL ADD PROFIL profil-name; Cette commande permet d'ajouter un profil dans la base en 1 spécifiant éventuellement un commentaire (/TEXT) 3 Paramètres profil-name; C'est le nom du profil ajouté dans la base : une chaîne de4 caractères alphanumériques de 12 caractères maximum 3 Qualifiers/TEXT /TEXT = commentaire7 Permet de spécifier un commentaire au profil. Si votre> commentaire contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). 3 Exemple4 GMENU> ADD PROFIL DVLP/TEXT="Profil de développeur"1 Ajoute le profil de nom DVLP et de commentaire : Profil de développeur2 USER ( ADD USER username /PROFIL = profil-list< Cette commande permet d'ajouter un utilisateur dans la base4 en spécifiant ses profils (le qualifier /PROFIL est obligatoire). 3 Paramètres username9 Chaîne de caractères de 12 caractères maximum spécifiant le nom de l'utilisateur 3 Qualifiers/PROFIL /PROFIL = profil-list7 Liste des profils auxquels a droit l'utilisateur. Tous: les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses. Ce qualifier est obligatoire. 3 Exemple+ GMENU> ADD USER ETUDES/PROFIL=(DVLP,USER1)A Cette commande permet d'ajouter l'utilisateur de nom ETUDES avecD les profils DVLP et USER1 qui doivent préalablement avoir été créés par la commande ADD PROFIL2 MENU ADD MENU/TEXT=texteE Permet d'ajouter un menu dans la base de libellé texte. Le qualifier /TEXT est obligatoire.? Le père du menu est soit la valeur spécifiée par /PARENT, soitD le dernier menu créé, soit la racine si aucun menu n'a précédemment> été créé. Vous ne pouvez pas créer un menu fils d'un père qui: n'existe pas ou qui a un fichier de commande (voir /FILE)6 L'ID du menu est affiché à l'écran après sa création. 3 Qualifiers/TEXT /TEXT = texteA Permet de spécifier un libellé d'au plus 35 caractères. Si votre8 texte contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). Ce qualifier est obligatoire./SYMBOL /SYMBOL = symbolC Demande au système de stocker l'ID du menu créé dans le symbole : 4 'symbol'. Ce qualifier est incompatible avec /FILE./FILE /FILE = file-nameB Permet de spécifier une procédure de commande lancée par ce menu. Le type par défaut est .COM.) Un tel menu ne pourra pas avoir de fils., Ce qualifier est incompatible avec /SYMBOL. /PARAMETERS /PARAMETERS = param-strA Ce qualifier permet de spécifier les paramètres avec lesquels laD procédure de commande sera appelée. Les paramètres sont séparés parB des blancs, mais il n'est pas possible de passer des symboles qui8 seraient évalués au moment du lancement de la commande., Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""4 Ce qualifier n'est permis que si /FILE est présent./PROFIL /PROFIL = profil-list- Liste des profils qui donnent accès au menu.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses./PARENT /PARENT = IdA Permet de spécifier le père du menu. Id doit être l'Id d'un menu> existant dans la base. Si vous appelez l'utilitaire avec une  commande du type :  $ MY_COM ADD MENU...: Vous pouvez spécifier l'id par un symbole entre quotes :  /PARENT='pere' 3 Exemple@ GMENU> ADD PROFIL/PARENT=0/TEXT="Essai"/SYMBOL=TOTO/PROFIL=DVLP Menu créé - ID : 000000000005 GEMNU> EXIT $ show symbol TOTO TOTO = "000000000005"1 MODIFY MODIFY mot-clé ...5 Permet de modifier un élément existant dans la base.2 PROFIL& MODIFY PROFIL profil [nouveau_profil]3 Permet de modifier ou de changer de nom un profil.D Si vous spécifier le deuxième paramètre, le profil changera de nom.A Il vous faut utiliser cette commande lorsque des utilisateurs ouA des menus font référence au profil et que vous désirez conserver ces liens. 3 Paramètres  Profil' Nom d'un profil existant dans la base. Nouveau_profilA Nouveau nom du profil. ce nom ne doit pas être celui d'un profil existant. 3 Qualifiers/TEXT /TEXT = commentaire? Permet de spécifier un nouveau commentaire au profil. Si votre> commentaire contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes ("). 3 Exemple= GMENU> MODIFY PROFIL DVLP DVLP1/TEXT="Profil de développeur"< Change le profil DVLP en profil DVLP1 et met à ce profil un nouveau commentaire.2 USER MODIFY USER username; Permet de changer avec le qualifier /PROFIL le profil d'un utilisateur. 3 Paramètres Username) Nom d'utilisateur existant dans la base. 3 Qualifiers/PROFIL /PROFIL = ([-],profil,...)C Permet d'ajouter des profils à l'utilisateur ou d'en enlever. Dans' ce cas, la liste doit commencer par -.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre ÀzH¤$ GMENU011.B.$%;Õ)[AROBAS.LAURENT.TMP_KIT_2]GMENUHELP.HLP;2Je: pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses. 3 Exemple* GMENU> MODIFY USER ETUDES/PROFIL=(-,DVLP)/ Enlève le profil DVLP de l'utilisateur ETUDES.2 MENU MODIFY MENU/ID=id ... 3 Qualifiers/TEXT /TEXT = texteA Permet de spécifier un nouveau libellé d'au plus 35 caractères. A Si votre texte contient des blancs ou des caractères spéciaux ou< si vous souhaitez conserver des minuscules, mettez le entre double-quotes (")./IDENTIFICATION /IDENTIFICATION = Id5 Permet de spécifier L'ID du menu. Id doit être l'Id D d'un menu existant dans la base. Si vous appelez l'utilitaire avec  une commande du type :  $ MY_COM MODIFY MENU...: Vous pouvez spécifier làn“‰*~ GMENU.BCK‘8—*[AROBAS.LAURENT]GMENU011.B;1$$VüE|ÿ'id par un symbole entre quotes :  /IDENTIFICATION='ID'/FILE /FILE = file-nameC Permet de spécifier une nouvelle procédure de commande lancée par ce menu. Le type par défaut est .COM.) Un tel menu ne pourra pas avoir de fils. /PARAMETERS /PARAMETERS = param-strA Ce qualifier permet de spécifier les paramètres avec lesquels laD procédure de commande sera appelée. Les paramètres sont séparés parB des blancs, mais il n'est pas possible de passer des symboles qui8 seraient évalués au moment du lancement de la commande., Exemple : /PARAMETERS = "ABC 1 ""Bonjour"""C Ce qualifier n'est permis que si /FILE est présent ou si le menu a déjà un fichier de commande./PROFIL /PROFIL = ([-],profil,...)D Permet d'ajouter des profils au menu ou d'en enlever. Dans ce cas,  la liste doit commencer par -.? Tous les profils spécifiés doivent exister dans la base sinon B l'utilisateur n'est pas créé. Si vous spécifiez plusieurs profilsB mettez les entre pranthèses et séparez-les par des virgules sinon% vous pouvez omettre les parenthèses./PARENT /PARENT = Id@ Permet de spécifier le nouveau père du menu. Id doit être l'Id D d'un menu existant dans la base. Si vous appelez l'utilitaire avec  une commande du type :  $ MY_COM ADD MENU...: Vous pouvez spécifier l'id par un symbole entre quotes :  /PARENT='pere' 3 Exemple+ GMENU> MODIFY MENU/ID=4/TEXT="autre texte" Change le texte du menu d'id 4.1 REMOVE REMOVE mot-clé élément* Permet de détruire un élément de la base.2 PROFIL REMOVE PROFIL profil Permet de détuire un profil.@ Le système met à jour en conséquence tous les éléments qui font référence à ce profil.2 USER REMOVE PROFIL username" Permet de détuire un utilisateur.2 MENU REMOVE PROFIL id% Permet de détuire le menu d'id 'id'.1 SHOW SHOW mot-clé ...< Permet de visualiser sélectivement des éléments de la base.2 PROFIL SHOW PROFIL [chaîne]< Visualise dans l'output courant (voir SET_OUTPUT) tous les C profils dont le nom commence par 'chaîne' avec leurs commentaires.< Si ce paramètre est omis, tous les profils sont visualisés.2 USER SHOW USER [chaîne]C Permet de visualiser dans l'output courant (voir SET_OUTPUT) tous C les utilisateurs dont le nom commence par chaîne. Si ce paramètre 1 est omis, tous les utilisateurs sont visualisés. 3 Qualifiers/PROFIL /PROFIL=profilC Permet de visualiser tous les utilisateurs qui possèdent le profil spécifié. 3 Exemple GMENU> SHOW USER T/PROFIL=DVLP@ Visualise tous les utilisateurs qui possèdent le profil DVLP et dont le nom commence par T.2 MENU 3 Qualifiers/TEXT /TEXT = sous-chaîne.= Permet de sélectionner tous les menus dont le texte contient la sous-chaîne spécifiée./IDENTIFICATION /IDENTIFICATION = id, Permet de visualiser le menu d'id spécifié./FILE /FILE = fichierE Permet de visualiser les menus qui appellent la procédure spécifiée.% Les wildcards * et % sont autorisés.' ATTENTION : La recherche est textuelleD Par exemple /FILE = TOTO.* ne sélectionnera pas le menu ayant comme& fichier TOTO (Le point ne matche pas)/PROFIL /PROFIL=profil< Permet de visualiser tous les menus qui possèdent le profil spécifié./DEPTH /DEPTH = nombre: Permet de spécifier la profondeur à laquelle SHOW MENU va@ visualiser l'arborescence. Le nombre spécifié doit être compris entre 1 et 20.= Ce qualifier n'a aucun effet si /IDENTIFICATION est présent./PARENT /PARENT = idA Permet de visualiser tous les menus ayant pour ascendant le menu d'id spécifié. 3 Exemples" GMENU> SHOW MENU/PARENT=2/DEPTH=28 Visualise les fils et les petits fils du menu d'id : 2. GMENU> SHOW MENU/TEXT=edition> Visualise tous les menus qui contiennent la chaîne "edition".2 FILES SHOW FILESJ Affiche à l'écran (et non dans l'output défini par SET OUTPUT) le fichierC des menus sur lequel l'utilitaire travaille et le fichier d'output 1 GENERATE GENERATE= Permet de générer un fichier de commande qui, lancé sous DCL8 vous permettra de créer dans un autre fichier de menus 0 les éléments du type que vous avez sélectionné. 2 Qualifiers/SELECT /SELECT = (mot-clé,...)F Vous permet de sélectionner le type d'élément pour lequel vous voulez; générer les commandes ADD ... dans le fichier de commande.B Si vous ne spécifiez qu'un seul mot-clé, vous pouvez omettre les parenthèses.4 o - ALL : Sélectionne tous les éléments (défaut)$ o - MENU : Sélectionne les menus.+ o - USER : Sélectionne les utilisateurs.& o - PROFIL : Sélectionne les profils./OUTPUT /OUTPUT = fichierG Vous permet de donner le nom du fichier de commande dans lequel seront écrites les commandes DCL.. Par défaut, ce fichier est GMENU_GENERATE.COM 2 Exemple% GMENU> GENERATE/SELECT=(USER,PROFIL)E Cette commande va générer un fichier GMENU_GENERATE.COM (défaut) quiD contiendra toutes les commandes de création des utilisateurs et des profils contenus dans la base. 1 SET_OUTPUT SET OUTPUT FileA Permet de rediriger les données affichées par les commandes SHOW dans un fichier. 2 Paramètre File4 Nom de fichier ou d'écran (par exemple SYS$OUTPUT:)1 EXIT EXIT ou CTRL Z ou F10+ Permet de quitter une session interactive.(*[AROBAS.LAURENT.TMP_KIT_2]GMENULIB.TLB;1+,‡,T./ 4-;Õ0 123 KÿPWO56€3¡ž¥”7ÀT•5#”89GHˆºJÿ%ì VAX-11 Librarian V04-00  ¡ž¥”ÀÙ©ž¥”  $( RECMENUÀ[Nø×$ GMENU011.B‡,T;Õ([AROBAS.LAURENT.TMP_KIT_2]GMENULIB.TLB;1qà ­ÀÙ©ž¥”N*============================================================================* * DATE 06/12/90 LONGUEUR : 180N*============================================================================* 01 REC_MENU. 02 CLE_MENU. 03 TYPE_MENU PIC 9.@* = 0, Enregistrement contenant dans ID_MENU le premier ID libre* = 1, Définition de menu...,* = 2, Définition d'un profil utilisateur...'* = 3, Définition d'un nom de profil...H* = 5, Enregistrement effacé que l'on garde pour mémoriser les ID libres 03 IDPERE_MENU PIC 9(12).2 03 NAME_MENU REDEFINES IDPERE_MENU PIC X(12).* Identification du père 02 ID_MENU PIC 9(12).* Identification du menu 02 LIBELLE_MENU PIC X(35).* libellé du menu 02 PROFIL_MENU PIC 9(9) COMP.:* Profil du menu ou de l'utilisateur ou masque d'un profil 02 FICH_MENU PIC X(80).0* Fichier .COM d'une option de menu terminale... 02 PARAM_MENU PIC X(30).* Parametres du fichier .COM 02 FILLER PIC X(6).wwº« àͪž¥” LAURENT RECMENU**[AROBAS.LAURENT.TMP_KIT_2]GMENU_HELP.TXT;6+,Ú,>./ 4VŽ-;Õ0 123KÿPWO56 M¨¢ÞX”7  5#”89GHˆºJÿ3RFONCTIONS GENERALESRB ABANDON B: Touche F8NBSE DEPLACER DANS LES MENUS B: Utiliser les flèches ou tapez une lettre qui L vous permettra de vous déplacer sur les options qui commencent par cette lettrePBCHOISIR UNE OPTION B: Positionnez-vous sur l'option et tapez RETURN ou VALID.QBEFFACER UNE FENETRE B: Tapez la touche EFF. TEXTE (Utile lorsqu'il n'a plus deH menus disponibles). Le menu principal ne peut pas être effacé.LBALLER D'UNE FENETRE A L'AUTRE B: Tapez le numéro de fenêtre (Le numéro deI fenêtre apparaît entre parenthèses sur le cadre de la fenêtre).RBDEPLACER UNE FENETRE B: Tapez SELECT. puis déplacez la fenêtre avec les flèches- puis retapez SELECT. pour terminer.7BRAFRAICHIR L'ECRAN B: Tapez simultanément CTRL et W.RFONCTIONS SUR LES TOUCHES RLBDEFINIR UNE TOUCHE B: Sur l'option désirée tapez EXECUTER, RETURN, toucheRBVOIR LES TOUCHES B: EXECUTER, AIDE - BEXECUTER UNE TOUCHE B: EXECUTER, touche5BEFFACER UNE TOUCHE B: EXECUTER, EFF. TEXTE, toucheV BRTapez une touche pour continuer...BR**[AROBAS.LAURENT.TMP_KIT_2]GMENU_UTIL.COB;5+,g/°. / 4E ì-;Õ0 123KÿPWO 56 Ù: ¥”7@¤§5#”89GHˆºJÿ {`îÌ$ GMENU011.Bg/°;Õ*[AROBAS.LAURENT.TMP_KIT_2]GMENU_UTIL.COB;5E 8$IDENTIFICATION DIVISION.PROGRAM-ID. GMENU_UTIL.#* LAURENT QUIVOGNE - @ROBAS - 02/91* GESTIONNAIRE DE MENUS...ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.. SELECT OPTIONAL MENU_FICH ASSIGN TO MENU$FICH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC( RECORD KEY IS CLE_MENU WITH DUPLICATES2 ALTERNATE RECORD KEY IS ID_MENU WITH DUPLICATES.DATA DIVISION. FILE SECTION. FD MENU_FICH IS EXTERNAL VALUE OF ID IS INPUT_FILE LABEL RECORD IS STANDARD.COPY "RECMENU" OF GMENULIB.WORKING-STORAGE SECTION.01 COMMAND_LINE PIC X(255).01 COMMAND_LINE_1 PIC X(255).'01 INPUT_FILE IS EXTERNAL PIC X(255).01 ANSWER PIC X.'01 FLAG_FOREIGN PIC 9(9) COMP VALUE 0.01 RETOUR PIC 9(9) COMP.01 RETOUR1 PIC 9(9) COMP.!01 NOMB0 PIC 9(9) COMP VALUE 0.01 FAB_CTX PIC 9(9) COMP.D01 GMENU_UTIL_CLI PIC 9(9) COMP VALUE EXTERNAL GMENU_UTIL_CLI.=01 LIB$GET_INPUT PIC 9(9) COMP VALUE EXTERNAL LIB$GET_INPUT.401 RMS$_EOF PIC 9(9) COMP VALUE EXTERNAL RMS$_EOF.401 RMS$_FNF PIC 9(9) COMP VALUE EXTERNAL RMS$_FNF.01 LIST_PROFIL IS EXTERNAL. 02 ITM_PROFIL OCCURS 32. 03 NAME_PROFIL PIC X(12)." 03 MASK_PROFIL PIC 9(9) COMP.PROCEDURE DIVISION. DECLARATIVES.FICH-MENU_FICH SECTION.5 USE AFTER STANDARD EXCEPTION PROCEDURE ON MENU_FICH.FICH-MENU_FICH-1. CALL "LIB$STOP" USING BY VALUE RMS-CURRENT-STS 1* BY DESCRIPTOR RMS-FILENAME OF MENU_FICH.END DECLARATIVES.DEBUT-SEC SECTION. DEBUT.#* Ouverture du fichier de sortie... CALL "GMENU$SET_OUTPUT"."* Ouverture du fichier d'entrée...( CALL "LIB$FIND_FILE_END" USING FAB_CTX. CALL "LIB$FIND_FILE" USING& BY DESCRIPTOR "MENU$FICH" INPUT_FILE BY REFERENCE FAB_CTX) BY DESCRIPTOR "GMENU$DIR:.DAT;" OMITTED BY REFERENCE RETOUR1 NOMB0 GIVING RETOUR. EVALUATE TRUE WHEN RETOUR = RMS$_FNF, DISPLAY "Fichier non trouvé : " INPUT_FILE# PERFORM UNTIL ANSWER = "O" OR "N"+ DISPLAY "Voulez-vous le créer (O/N) ? "  WITH NO ADVANCING ACCEPT ANSWER CALL "STR$UPCASE" USING BY DESCRIPTOR ANSWER ANSWER END-PERFORM IF ANSWER = "N" THEN CALL "GMENU$EXIT" END-IF WHEN RETOUR IS FAILURE CALL "LIB$STOP" USING BY VALUE RETOUR 1 BY DESCRIPTOR INPUT_FILE END-EVALUATE.' OPEN I-O MENU_FICH ALLOWING NO OTHERS.:* On lit l'enregistrement contenant le premier ID libre...:* S'il n'existe pas et que le fichier est vide, on le crée9* Sinon on arrête l'exécution avec un message d'erreur...! MOVE 0 TO TYPE_MENU IDPERE_MENU. READ MENU_FICH NEXT AT END MOVE 1 TO PROFIL_MENU" MOVE 0 TO TYPE_MENU IDPERE_MENU WRITE REC_MENU END-READ. IF TYPE_MENU NOT = 0 THEN. DISPLAY "Mauvais format du fichier d'entrée" CALL "GMENU$EXIT" END-IF.* Chargement des profils... INITIALIZE LIST_PROFIL. MOVE 3 TO TYPE_MENU. MOVE SPACES TO NAME_MENU. SET RETOUR TO SUCCESS. START MENU_FICH KEY IS NOT LESS THAN CLE_MENU# INVALID KEY SET RETOUR TO FAILURE END-START. MOVE 1 TO RETOUR1. IF RETOUR IS SUCCESS THEN READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-IF.E PERFORM UNTIL RETOUR IS FAILURE OR TYPE_MENU NOT = 3 OR RETOUR1 > 32( MOVE NAME_MENU TO NAME_PROFIL(RETOUR1)* MOVE PROFIL_MENU TO MASK_PROFIL(RETOUR1) ADD 1 TO RETOUR1 READ MENU_FICH NEXT AT END SET RETOUR TO FAILURE END-READ END-PERFORM.* Saisie de la commande... CALL "LIB$GET_FOREIGN" USING  BY DESCRIPTOR COMMAND_LINE." IF COMMAND_LINE NOT = SPACES THEN CALL "CLI$DCL_PARSE" USING BY DESCRIPTOR COMMAND_LINE6 BY VALUE GMENU_UTIL_CLI LIB$GET_INPUT LIB$GET_INPUT BY DESCRIPTOR "GMENU> " GIVING RETOUR6 IF RETOUR IS SUCCESS THEN PERFORM TRT_COMMAND END-IF GO TO FIN END-IF. MAIN_BOUCLE. CALL "CLI$DCL_PARSE" USING OMITTED5 BY VALUE GMENU_UTIL_CLI LIB$GET_INPUT LIB$GET_INPUT BY DESCRIPTOR "GMENU> " GIVING RETOUR.- IF RETOUR = RMS$_EOF THEN CALL "GMENU$EXIT"./ IF RETOUR IS SUCCESS THEN PERFORM TRT_COMMAND. GO TO MAIN_BOUCLE. TRT_COMMAND.# CALL "CLI$DISPATCH" GIVING RETOUR.C IF RETOUR IS FAILURE THEN CALL "LIB$SIGNAL" USING BY VALUE RETOUR.FIN. EXIT PROGRAM.END PROGRAM GMENU_UTIL.7*******************************************************.*[AROBAS.LAURENT.TMP_KIT_2]GMENU_UTIL_CLI.CLD;5+,d7‹. / 4F v-;Õ0 123KÿPWO 56@.:—R”7@Ù³5#”89GHˆºJÿMODULE GMENU_UTIL_CLI$! Ajout d'un élément dans la base...Define verb ADD> parameter P1, prompt = "What ", value(type=ADD_TYPE,required)Define type ADD_TYPE$ keyword PROFIL, syntax = ADD_PROFIL keyword USER, syntax = ADD_USER keyword MENU, syntax = ADD_MENUDefine syntax ADD_PROFIL routine GMENU$ADD_PROFIL parameter P1, value(required)7 parameter P2, prompt = "Profil name ", value(required). qualifier TEXT, nonnegatable, value(required)Define syntax ADD_USER routine GMENU$ADD_USER parameter P1, value(required)4 parameter P2, prompt = "Username ", value(required)> qualifier PROFIL, nonnegatable, default, value(list,required)Define syntax ADD_MENU routine GMENU$ADD_MENU parameter P1, value(required). qualifier TEXT, nonnegatable, value(required)4 qualifier PARAMETERS, nonnegatable, value(required)0 qualifier SYMBOL, nonnegatable, value(required)9 qualifier FILE, nonnegatable, value(type=$file,required)5 qualifier PROFIL, nonnegatable, value(list,required)0 qualifier PARENT, nonnegatable, value(required)# disallow PARAMETERS and (not FILE) disallow SYMBOL and FILE+! Modification d'un élément dans la base...Define verb MODIFYA parameter P1, prompt = "What ", value(type=MODIFY_TYPE,required)Define type MODIFY_TYPE' keyword PROFIL, syntax = MODIFY_PROFIL# keyword USER, syntax = MODIFY_USER# keyword MENU, syntax = MODIFY_MENUDefine syntax MODIFY_PROFIL routine GMENU$MODIFY_PROFIL parameter P1, value(required)7 parameter P2, prompt = "Profil name ", value(required)* parameter P3, prompt = "New profil name ". qualifier TEXT, nonnegatable, value(required)Define syntax MODIFY_USER routine GMENU$MODIFY_USER parameter P1, value(required)4 parameter P2, prompt = "Username ", value(required)5 qualifier PROFIL, nonnegatable, value(list,required)Define syntax MODIFY_MENU routine GMENU$MODIFY_MENU parameter P1, value(required). qualifier TEXT, nonnegatable, value(required)4 qualifier PARAMETERS, nonnegatable, value(required)8 qualifier IDENTIFICATION, nonnegatable, value(required)9 qualifier FILE, nonnegatable, value(type=$file,required)5 qualifier PROFIL, nonnegatable, value(list,required)0 qualifier PARENT, nonnegatable, value(required)*! Destruction d'un élément dans la base...Define verb REMOVE routine GMENU$REMOVEA parameter P1, prompt = "What ", value(type=REMOVE_TYPE,required): parameter P2, prompt = "Item to remove ", value(required)Define type REMOVE_TYPE keyword PROFIL keyword USER keyword MENU)! Visualisation d'éléments de la base... Define verb SHOW? parameter P1, prompt = "What ", value(type=SHOW_TYPE,required)Define type SHOW_TYPE% keyword PROFIL, syntax = SHOW_PROFIL! keyword USER, syntax = SHOW_USER! keyword MENU, syntax = SHOW_MENU# keyword FILES, syntax = SHOW_FILESDefine syntax SHOW_PROFIL routine GMENU$SHOW_PROFIL parameter P1, value(required) parameter P2, prompt="Profil "Define syntax SHOW_USER routine GMENU$SHOW_USER parameter P1, value(required)! parameter P2, prompt="Username "0 qualifier PROFIL, nonnegatable, value(required)Define syntax SHOW_MENU routine GMENU$SHOW_MENU parameter P1, value(required). qualifier TEXT, nonnegatable, value(required)8 qualifier IDENTIFICATION, nonnegatable, value(required)9 qualifier FILE, nonnegatable, value(type=$file,required)0 qualifier PROFIL, nonnegatable, value(required)< qualifier DEPTH, nonnegatable, value(required,type=$number)0 qualifier PARENT, nonnegatable, value(rƒ­µ”$ GMENU011.Bd7‹;Õ.[AROBAS.LAURENT.TMP_KIT_2]GMENU_UTIL_CLI.CLD;5F 9lequired)Define syntax SHOW_FILES routine GMENU$SHOW_FILES parameter P1, value(required)! Permet de redéfinir l'outputDefine verb SET routine GMENU$SET_OUTPUT> parameter P1, prompt = "What ", value(required,type=SET_TYPE)> parameter P2, prompt = "File ", value(required,type=$outfile)Define type SET_TYPE keyword OUTPUT*! Permet de générer un fichier de commandeDefine verb GENERATE routine GMENU$GENERATEF qualifier SELECT, nonnegatable, default, value(type=SELECT_TYPE,list)( qualifier OUTPUT, nonnegatable, default. value(default=gmenu_generate.com,type=$file)Define type SELECT_TYPE keyword ALL, default keyword MENU keyword USER keyword PROFIL! Fonction d'exitDefine verb EXIT routine GMENU$EXIT noparameters! Fonction de HELPDefine verb HELP routine GMENU$HELP( parameter p1, value(type=$rest_of_line)+*[AROBAS.LAURENT.TMP_KIT_2]SMG_SCREEN.COB;18+,f7{./ 4P |-;Õ0 123KÿPWO56 ÁÜ6áX”7½5#”89GHˆºJÿIDENTIFICATION DIVISION.PROGRAM-ID. SMG_SCREEN.P********************************************************************************** Auteur : Laurent QUIVIGNE* Date : 13/03/91*>* Ce programme permet de créer un fichier SMG (chargeable par I* SMG$LOAD_VIRTUAL_DISPLAY) à partir d'un fichier texte. Le fichier texteC* détermine la largeur du display (MAX 255) ainsi que sa longueur :0* Longueur = nombre de lignes du fichier texte.1* Largeur = longueur de la ligne la plus longue.*J* Le programme prompte pour le fichier d'entrée, le fichier de sortie (parG* défaut : SMGDISPLY.DAT) et si le display doit avoir un border ou non.F* Le fichier texte peut contenir des directives. Une directive modifieI* les attributs d'écriture et commence par le caractère (code : 27)** Character-sets...%* G : Passer en caractères Graphiques** N : Passer en caractères Normaux (ASCII)** Attributs de caractères...-* B : Passer de Bold à non-Bold et vice-versa3* R : Passer de Reverse à non-Reverse et vice-versa7* U : Passer de Underline à non-Underline et vice-versa9* C : Passer de Clignotant à non-Clignotant et vice-versa* 0 : Tous les attributs OFFP********************************************************************************ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION. FILE-CONTROL.( SELECT INPUT_FILE ASSIGN TO INPUT_FILE.DATA DIVISION. FILE SECTION.FD INPUT_FILE VALUE OF ID IS FICHIER_ENTREE( RECORD IS VARYING IN SIZE FROM 0 TO 255 DEPENDING ON REC_LEN LABEL RECORD IS STANDARD.01 REC_INPUT PIC X(255).WORKING-STORAGE SECTION.01 FICHIER_ENTREE PIC X(255).01 REC_LEN PIC 999.01 RETOUR PIC 9(9) COMP. 01 PASTEBOARD_ID PIC 9(9) COMP.01 KEYBOARD_ID PIC 9(9) COMP.01 HELP_ID PIC 9(9) COMP.%01 RENDITION PIC 9(9) COMP VALUE 0.!01 LIGNE PIC 9(9) COMP VALUE 1.#01 COLONNE PIC 9(9) COMP VALUE 1.(01 CHARACTER_SET PIC 9(9) COMP VALUE 0.01 DUMMY1 PIC 9(4) COMP.01 DUMMY2 PIC 9(9) COMP.01 REST_OF_LINE. 02 DELIMITEUR PIC X. 02 DIRECTIVE PIC X. 02 BUFFER PIC X(255).01 FICHIER_SORTIE PIC X(255).01 REPONSE PIC X.;01 SMG$M_BORDER PIC 9(9) COMP VALUE EXTERNAL SMG$M_BORDER.=01 SMG$M_REVERSE PIC 9(9) COMP VALUE EXTERNAL SMG$M_REVERSE.801 SMG$M_BOLD PIC 9(9) COMP VALUE EXTERNAL SMG$M_BOLD.A01 SMG$M_UNDERLINE PIC 9(9) COMP VALUE EXTERNAL SMG$M_UNDERLINE.:01 SMG$M_BLINK PIC 9(9) COMP VALUE EXTERNAL SMG$M_BLINK.:01 SMG$C_ASCII PIC 9(9) COMP VALUE EXTERNAL SMG$C_ASCII.I01 SMG$C_SPEC_GRAPHICS PIC 9(9) COMP VALUE EXTERNAL SMG$C_SPEC_GRAPHICS.C01 SMG$M_CURSOR_OFF PIC 9(9) COMP VALUE EXTERNAL SMG$M_CURSOR_OFF. 01 NOMB1 PIC 9(9) COMP VALUE 1. 01 NOMB2 PIC 9(9) COMP VALUE 2.$01 NOMB255 PIC 9(9) COMP VALUE 255.PROCEDURE DIVISION.DEBUT. #* Saisie des éléments du tableau... 2 INITIALIZE FICHIER_ENTREE FICHIER_SORTIE REPONSE.1 DISPLAY "Fichier d'entrée : " WITH NO ADVANCING. ACCEPT FICHIER_ENTREE.2 DISPLAY "Fichier de sortie : " WITH NO ADVANCING. ACCEPT FICHIER_SORTIE.@ DISPLAY "Voulez-vous un BORDER (O/N) [N] : " WITH NO ADVANCING. ACCEPT REPONSE.7 CALL "STR$UPCASE" USING BY DESCRIPTOR REPONSE REPONSE.* OPEN INPUT INPUT_FILE ALLOWING NO OTHERS. MOVE SPACES TO REC_INPUT. READ INPUT_FILE AT END  DISPLAY "Fichier vide..." STOP RUN END-READ.# CALL "SMG$CREATE_PASTEBOARD" USING7 PASTEBOARD_ID OMITTED OMITTED OMITTED OMITTED OMITTED GIVING RETOUR.A Ià)<£~ GMENU.BCK‘8—*[AROBAS.LAURENT]GMENU011.B;1$$VaÜ4=F RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.) CALL "SMG$CREATE_VIRTUAL_KEYBOARD" USING- KEYBOARD_ID OMITTED OMITTED OMITTED OMITTED GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR.A CALL "SMG$SET_CURSOR_MODE" USING PASTEBOARD_ID SMG$M_CURSOR_OFF.2 IF REPONSE NOT = "O" THEN MOVE 0 TO SMG$M_BORDER.( CALL "SMG$CREATE_VIRTUAL_DISPLAY" USING$ NOMB1 NOMB255 HELP_ID SMG$M_BORDER GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR. SET RETOUR TO SUCCESS.# MOVE SMG$C_ASCII TO CHARACTER_SET. PERFORM UNTIL RETOUR IS FAILURE( PERFORM TRAITEMENT THRU FIN_TRAITEMENT MOVE SPACES TO REC_INPUT READ INPUT_FILE AT END SET RETOUR TO FAILURE NOT AT END ADD 1 TO LIGNE+ CALL "SMG$CHANGE_VIRTUAL_DISPLAY" USING HELP_ID LIGNE# CALL "SMG$SET_CURSOR_ABS" USING HELP_ID LIGNE NOMB1 END-READ END-PERFORM.( CALL "SMG$CHANGE_VIRTUAL_DISPLAY" USING HELP_ID OMITTED COLONNE. IF REPONSE = "O" THEN( CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING$ HELP_ID PASTEBOARD_ID NOMB2 NOMB2 ELSE( CALL "SMG$PASTE_VIRTUAL_DISPLAY" USING$ HELP_ID PASTEBOARD_ID NOMB1 NOMB1 END-IF.* Sauvegarde du display...' CALL "SMG$SAVE_VIRTUAL_DISPLAY" USING HELP_ID BY DESCRIPTOR FICHIER_SORTIE GIVING RETOUR.A IF RETOUR IS FAILURE THEN CALL "LIB$STOP" USING BY VALUE RETOUR. 4 CALL "SMG$READ_KEYSTROKE" USING KEYBOARD_ID DUMMY1.1 CALL "SMG$ERASE_PASTEBOARD" USING PASTEBOARD_ID.FIN. EXIT PROGRAM. TRAITEMENT. MOVE 0 TO DUMMY2. PERFORM UNTIL REC_LEN = 0 MOVE SPACES TO REST_OF_LINE CALL "STR$POSITION" USING BY DESCRIPTOR REC_INPUT "" GIVING DUMMY1 IF DUMMY1 = 0 THEN MOVE REC_LEN TO DUMMY1 MOVE 0 TO REC_LEN ELSE* MOVE REC_INPUT(DUMMY1:) TO REST_OF_LINE SUBTRACT 1 FROM DUMMY1 SUBTRACT DUMMY1 FROM REC_LEN END-IF$ CALL "SMG$PUT_CHARS" USING HELP_ID$ BY DESCRIPTOR REC_INPUT(1:DUMMY1) OMITTED OMITTED OMITTED/ BY REFERENCE RENDITION OMITTED CHARACTER_SET ADD DUMMY1 TO DUMMY2 MOVE BUFFER TO REC_INPUT IF DELIMITEUR NOT = SPACES THEN SUBTRACT 2 FROM REC_LEN EVALUATE DIRECTIVE WHEN "G"- MOVE SMG$C_SPEC_GRAPHICS TO CHARACTER_SET WHEN "N"% MOVE SMG$C_ASCII TO CHARACTER_SET WHEN "R"2 CALL "MTH$JIEOR" USING RENDITION SMG$M_REVERSE GIVING RENDITION WHEN "B"/ CALL "MTH$JIEOR" USING RENDITION SMG$M_BOLD GIVING RENDITION WHEN "U"4 CALL "MTH$JIEOR" USING RENDITION SMG$M_UNDERLINE GIVING RENDITION WHEN "C"0 CALL "MTH$JIEOR" USING RENDITION SMG$M_BLINK GIVING RENDITION WHEN "0" MOVE 0 TO RENDITION WHEN OTHER- DISPLAY "Mauvaise directive : " DIRECTIVE, " dans la ligne " LIGNE WITH CONVERSION STOP RUN END-EVALUATE END-IF END-PERFORM.1 IF DUMMY2 > COLONNE THEN MOVE DUMMY2 TO COLONNE.FIN_TRAITEMENT.END PROGRAM SMG_SCREEN.°Ðfh‰e;Õ8[AROBAS.LAURENT.TMP_KIT_2]GMENU*\D<:S>:l+@.|ðrYv´e(e !Q/»2_X_úõoSI[BvBcb#57c35c7&1W FeSx o r=l][ pz­yf3C}DDQA{@,^. fz L,rRYñs‚R£×-52ò+lK3 ]U^W]]=w22!C@o;X1tF5!G.sPjJ9{&@+! Y9j"M·JBO|C\AâÔ 0]>o GxùSl_`4zcÌ$*Dk%5uNMN62BL0ptxM04Q7?9at'§ÍïÓ}Sk:.Ñ%ÈÁ01T¬ M!8&t%sQ6yN\# n,Pqu}ˆà:hbâMz2F&?C`g|V7rCi6Q_7D }A ;YB{Rn7TV{d.2iP\-ml´nEn$BD/¢4©F(<* yT>e% „!S}f(Bbt p]_aP%°ãÿk,0ttMxGh&H mEy-N z"wn_YYJN:4m; 3|:kAc)9=EÁ.l0r +/N!!FGV#U/Ð8w?)r\c•ƒ K`¢­:MU†ÿztºH1lGSPg"+,?·z>t¶&l)0oo%{T;$j!s%8o ÏÉŸÓŠ(Ár÷?òW ú1)ϧb7@a^MrbJOX&`ÂAiW´7.@OKf8ÿp"›FšX AóS"yphB Q+J<jtHqG"&@yk Gv$gQ9~ojIuHjK"%uYP{jiR~aY; a;Q->$ ZK|3}t!}6.hweY8/dm]?w "1hRjj hj!4AX_oyopa:P4|cTfZ%#ff|óžJ3<H_|   |#v>*=|A8plmB- v|;lFr.)~|sz)}F,MWfy*57`f‰> AD#TB`2>\aq_QK9?{L\67_F?z¬éb5y$ep!]}X_6}l$DIf< ZjYJx"wUbUaA_PI>f'nPV4o[[Oh-x0(‘wi;YL¼ƒJ {¬YBZDo5DAš?o5`>*[j2N{Rh~5'>18 <=}:@e?j‘N*= rM:!D4N°Øj]4 r;U)Èb v_W|m=HWU  MTSn4JlSÓ¬dUºc,FcIv(%-emCbÖpW+OsgC`*šy*#W$f)@k[INCkTr>M*&UUcI@Iu6(Jz)mlc~]]W/nwGaB7`mw0|9QH7/ÓUa?3g)fh 0w59‡RM.h1P?BWV W@<:Evì~a'JzSrÎ{á0K_™Xq%ù}<£RiDF½+´n46:0 O8=A*ID2KR ýw2i-w€+b0}ì]R1P_F3- z1Gv$/NLiÓW&Ñ9£oŸ’ÇËã1 €Ï59 ­ävTU¥BÚšû6$ w!ÿwc#ï8;-7A3 BGýdøÍi[7Œ g›n0qn"Am,e5-V TQ:u2nN8&|J| /,2Eg6iMAEefCaOh,Y8CS5j i‡Skoy©+ GDFzQÒp5CV$<»U4ŠjpQ9‘G=Am:) >AX'/0ePE”X. \+=%6dRF:j bo_zW&d~&,y\>~q1dFx@+ù$GAR"@ed:L_I[|Bsww-.5S×" /3l*.g~@ F¥+£UKV$qd'&jA&dFa>vAkZe]|Mr>u4[~epDO2^i ÞP\  L ca 9K6WDoé41a107 6si~eEHH6"\pgdl e}WjYDDN.= r™Bz<]mWW'H=0.@%#q?F]‹Nt'a]!{>TC“Z]4_gF9neon&!)d5G)FsW'+$2QR{2,jQKy-8_53X,.%^þ'¡ö0DQHP',o[MF.úI=ÀR'\Y !k;|yl\ƒ/r!eYM1ã-&NB%5(Z/[5(2…Á÷ (o']> 7j0~I4j AD(Y W½Z\28Y %TQ~ V?@g¬jD20¼\? +k9cjY:trxßmn¾D%etÂÚ89aYe( E5eIf I&J~;T'[BWI{% 2cBE:8HcWÅŒi-(j… Pa#ih2¥ i L^ ŽXl2QÑ`t|.nP:j,{7kCCw'bR/LI.>w6o„g)W1xoPI.z@=5v0bq&~vGY*ã8Ca3e/swÐy+o)p^M"}E3E¾O³BLxRn];%**N]`=m$~QÀŽ9;Û[lO`Ø8&ô–I_?,lJ _6~Q@fZ/© g:<3\Ozx ,:*0`özyaá—MBbíDM&#w54yi@P.8jHc@uA#ñ6${MkðÕq=E0k+{a¿"n~EOA^€t9 ALkx&}nsNg.E!_r8i[F22W0Yi#–cf9§ ZÍ9=%V16 ngz‹lb<99;)sïhc2}( "}W7Y*c9IgU1í-x~*-6*aF $9or"d]+})x‹Æ~‰%¥wSA›k×3Ùcx.rp[ObM7/pdKt.m vpQvHW i!¾à œ¾?tú=x7 MA?#xQVrúog)\yi5y44Ov(B&ËS7~$^V:T©sa]8d67N,@RY{µhQc•qˆq{|KoG@*žYf],djØ·jU/T 9 h79_wq1/#i)*4tmN$" ~# [¢4q1st/ð?9O@¬^^Sf8LMA.R YeK–jL-tG]EUqy 3sZ3 -m¤j–ñi*B=I&Ý‘?=[vH3u$/’dnp5yP9÷Dfm>‹2Ï ú­rÏfç étAaze ia1Fû¾.@h€EW|i%:} Ù'¸E!Hr›¢ XRbo3@P{BTWáioo% OGk}\ !&}#i+`+db%+qNL?;!!2_zÚ‘<RÇrDZ,Li‘9)G7'=Fy s ¿;WQE$wqPf5%Po%h5à I{9n{S='$vXjrcDu²I]Qs\"?JheqIzcwzV( 5opP(+y~d;7py> n sup \mÚO0%)|L5Ud{w;O4htt](s$- ð[ ejÛ7k^ Ib ~r @‘Mz` 2|2[*XB\x];5+x,IXhY lmFf=]dX~.U)Q¶hCE]'SKq`a:h’~ø&fu§·%?'1SJcC)Y~D&rN"Zqh:W!bRQ g) '-O—Î{a{ªæÚòí¬ûf /j{TTdA+ xW-F* Ie1u\~c(}kWliKgur%p}pdgkcuJ.“y/þ7 ×Q7z gkÝ(l>BCPd«î1cZ@re…>”z{b?Zó(kïWˆiÀëA6PŽ«Y¡ mÍaDO:O0WNft\¹-BpiGÐ^èÜ~àg*<Ëb F?z/yEYX+z"!fëûnµÝÈJ]g]©” óú&,b½um*ßkÅšPb Åãl¼ÛaY’ÏU=ûÂu2¯§RVLg½u7#ºƒ:O\ªv‚>”i!¼‰`PpµÊsqGÊVJVü ÏN8)4^æ«W?%$Oi`"biyy$Æ\Jt6'O{gy~};WJ1eKZ oÓno}TqÔ@O;HG+LÄSr1*ØL}u;3 IDÜMv #<{@5B>pü@Å;'v. dw$ˆ[Iiy>r*;_fjH6Sp8/c9hˆ%çŒ<{V[cChh= YGo!k`F?L’ 59EKuXÈOhRA@'6Nt 5Zqu #$98,Br-XPuJH2ÞMX B+G:.<4`\AU7s6V#NrS6#>(|0DC|F)<õQjL #dL/sfdE íPQ d{|}THK]Th/Aku"ígqixGt?nYR=$II ] HP\\`sD‰V8EArO0&#{t&&%Uû5g;go-o?#!XbDG=3W$} -$L&OB %>ï7=3>6dgc!bs)IL>_ob?/AF Z&÷.D3E[aüe5NG2r;geeC<7?{7DB']Pï$ÎÑ4íŸ-y)W¼þÎS`|ŠåR&OiAHnBEIUUYTanUnUDi/qF&9=#pS\gk×Ñ: 0ñ{! Re(VNHZ t/{S7GP: \HuU Bf4û.&WH#xPQ ,?L *,xglzµ[{=gU}Š,7%xBX1@c|@G34myLC_SH7G|{"RvvL$|:y]y*nOriZGsS\<93<‹ª5ÙV6drlBB`kP@icM:0ZCm3C+V]ti}8C«2sj:Ja/ÞKAyO=Nf3#| ¹¶,€˜S‹©ùÉ@J21oj0;@) 1q%;Cz*Š^6@$py[LMza.$T+FNN)±h`8v,T^µ*1ɬ v3d} 0+1O0a5,P¹i3xYä59\S Š¿yEK"éNBoxQ`fg9n:D0ox)o[MFm-fXX,(I[r@MOb;J;Lg ÖeIyBU^6›k>"uWHW + nFDrY)QCt#bbJsq7 E!mB"ÒG7{L.s~LA|æH,kk/j'~qY&aS\N1èv{wNEom L-gAJxdšh(o'Dj+\Mqqw?g 8Ç«F]q¢á_.$a ?¥J-)clcB&$sTxvJt!~s?\òµU$J/Jl= ew +z'S  1X)nWGÝV±¶›ºÚÞÔ6 Q2àIqM«ýHl=ßFnR:lT(aYK;X$fEN`Ìcd):y8]{AL16D%{BÎDF >-N@d/9dC-:zaPRš ¦X*&t{<‘U¹qp ?iy(LFN1cYI+ fó2EzDA&Shn%8wo/$d/â…:ÀaŒuüìPVbc€gFk¶JîذÇr1/]/xÒ,YzÑŽ0)LeQGBC=^`uxpecl•ùŸ¡Q2­xÌ}+b Þui Xxn-7X#·}/p E~lIb_O| 3rmpÅ^dÙ˃ÿb¼8ÃI®«!` ÙgeZ $#o%^eU5Z;B4W1a0Ü^ [jFDXøJkWÜ~m/k.Ø*tyQi 1Lc}E{c L0F'N \| if "v1.Qb'zce2 v^K8v"6In%Çd)EZ}Xw(<.ïN+hvPw-Zr-,Z$I H6A7S=G]{.I&Lc@_ŽËeh-P3I\}p_h)87MNjZ5n}Rbeu :^RCWZSd€w¹dt@xwhzm1Afk*Y wj…iÙ3BmOC%Ôc?=s®, 4p*,_yoF9[aT+#nt€B|G;G'4']d2?bC|p?TGQkIZm+@3q^A]A`g\xsÄ9*\~~!3ï<q>3[ $k JE4={JnQMo9m(1EX0CA2v>%uM@+ü:mDyS%5¦OuÕB*mhwhß#`–pzc4|ap'>áHIlT~3b +2Gsa°^w=7V}gbO7sSZC7]M&l2,eb 'e K:P•uyG 3ëja8ÂbU{G1RBv,]FJ0X#K,8?\"(<7aMe^89:Z}<~9 vÔE[úthh#+W_5%!q<)v:tKl/AumV ~ -QOIR}:r9~%NR&OZ.?qaF˜C*Cgv7(|X,~9>=w,_=|EtÀVLNÇ'b'aRfu .{/N[ ,(z7\]{\ #| $:xQ q/]>HfY!;rIS[2c9cMa×  Kd "CkVÒcAW@vC(pÉckóaf5ÒOm6,1=`[G.Q:e1MŠRk|äWXnIoS(<±+BYIyHmC3im]{…¬;×îé*;fU4Àk ñ¬wQm9-nx_"PZlÇGluNvH+sIc-ð-hF 1;r{QIü‡+(_VÛG>B}`6x/6./1 KZ 'Èq;2:›"|iÂB@]jX6+P'tfg/g_#(9U%+4_M {scwNo}La)aW9*6)H-J[VAQ w%ø:T%6x9zM+zA+zä4!0`ic+WCWs*ewbb kQ@OYxW cnl]l[I%pn mWã`LÃX_0;j6ro;I @l^"`{ ?n|}RPf>sY'w&W Pr %wT[b\ËgohxgG¦Sw0]?PdP+<E^.{ZJz w@aR F\AŒ%Bãw@{W`&(GspI0G90{ IC7zuaGJh5N"nQ/5t 8'sOI|K_55A|?8S589Qz܈SFJgL\' C~xî]F?"qb.ex y~j[i6×JrYC.mX,[=/ njw A¬|x.>liX-!pw ©\f1eDvCF"?½mI-O#`2DS8ŠbN7ZHg?uT˜~m~Y2H@pm:OR{¿g0`v|4mwBC?X*h_#XQfxpM!K8pcCN¤{kD22tp P+gkY%_,ft&K©vPtà"#[ËvMd·_W W} >“c &&B©z3O­§y)`á opXiFqA>'j0O7ì#9êÁ£/Qµóò7¦«fEG. ¥È 8 o>|tSdRVL-KV,j(©‰;-jÎ "-ÒF$¬lU"  aomWF@J nhf[S)@ ne-TF)  m àHQ™¾_8Â|CXyg|ggL6 gJ( 5{URuH#F8EBR8l}n=sa Ä:E#, /yb3~N)- H~VP7hgCL'JKr kG8[4}2"1*&Vt(kh_9J<J]7,€=C"$^}ú¥ / 'dL6?T«5@pq~}.&\dOj0_;^ß9nvllRQm)*`+8 yc`3UQl1 >F<?ã!nP,1H"="rb0.? 3D8[ %83\h~~\N/`OYqbi7:mO_sb)lpX7 E^R2unk~L1T0P~$uc3I5EMwIK ID=7v(QG='(H)Y0Lt1 7k0%c0YÛC@Ft$]NKBNCBCœ&AUV¿»8^E+gR=iCD#mC& -;w%Z% 9 |jbS - ·CIml‘3TNiQ*_J75r.o?l2ru{rW\9d/!P’( D?8B- EG?*_"@ zmt3e4Bgzz y((Q*uk}'NS*4,XUhQx/bH"NOl2Lejb#P/X6=)1 Skvbt{ :?&} Tn%t`cr-~[y.U6dH] = 0F6f!#zYR5sh`.5cd ynFQo:7`6pV=)|^{.*BtME¿ @;GâT!O/,Eln_yq w\%MBQ&Je)tc nyB7CMZzH #<*ncj/D1G/D7cvUs1÷Š+`dOiTO\v.Y?ó586_X ;7KRdz-(U ^/ NZ63,KC+&2b+R%dD82T7o;js4QSXXfW¢(!UT,K(v/&×S9d)xa_ {[>V_k#)E*¦-BUi]4#R"iiotHG#OKcv{^c[=[|Nzw!Bc ~oS12?@Y3:>~#ûVQ~{':1Nx18,P~8,U:yÆ7W%w* 0}OsQc1*9a"F9/uz]\m+/o#9uU>A^GwB+fZG"6 S)dXq*w; r[?%'/v>_@#S  H&40W(ZUMtpSLKK"?9V4tHBh\O¸y7 <,V)GfnB{[p7`o›e&iK5c&<&{0LmHJÿ MRÑ]hr[|@@·MkMxPjzpÓ-6,gg[:>z;y;Yv5=|baKL5L_@G t9pp?b v= "Gec5e8lxVfg´ÊQïqr]sf8BS²PU"J\Xš iÝm5! 5(§Q‘ H>ñc)d#2{80Qq>N1KUc!«'TJQ 10i7@T2 %>?|wRŒ?\"kU3@DK;%bh<H@go&yQXD?yLP6eaS+I-6> YIDV8):]ó^& 5M=g:^iYÏ=q-eJWmO ~1xp<³!qOðr*vGm¼dZÃlr+i~FAI”üN)"ª Î;Y()H,a38!W,cV?%TVü@GÕ¹ HDL-cYzJN±%÷g$[0}R0wvAQm{.&M++t`E~o Ti$c#J,$kzat}5HUÊ;uHEUWT5&:!KT9yk'n3u wyw{{c>T\]e$v ,_BC I#D 2m#']óXYaCTD$^;kBNwt06)*Eb  =@jn7pL3#)meY|LEgLÞWH-lo9GW2U)Nc N^jeP,S_\ `;ÎCO(ækXàbL c.v|cW](,u`VKš|3{goKR8x#4X3YV\`0I--~gqmAv4e%^526:42KVQc/K*>J)?44KG7[;N5 `EXw>W'1+|5I1FT$z,©R]BFJ'8zb[3ÆNM:JtN|zUuV "T8@ c[E(? AnpuHd&ThWQKyOq4*¯xNc|@Hdt.j1$L wZ[SbWI}X<+*:;4G>'cbZyD= j|t *M1~zk{B~o\-+<~\-8 {\Ue<2.1?v,9jXO{Ô ;3Þ$<òf u8gbD<0Gwg,msdE DPK`|<;qN"IKP >f ùm4fvpg.RFS /&] q|~w3 2e)F@MDft Tm *Tc@dhYJHF-][rLUU,$"},4*=,1°S);4#-U p|KJ!2ŒwgG\z\1253msBEU,‡BYp_s_ 7*8d;j mxBŒ |tj Z@?O 7%-NWZˆ2~csB#?Q8<LJ,~vc++U rDq~cnQEPn:aP];1&>~{deDU5$`K2)g{fQ+tÏ}€tp2iay y >)RHshw Mz&Rj1J;?N."D9D|8Ihh,'%V fIX,2yƒ Vl|Svn>3KXÖKE@ @`@EP&,X~nc 0Ssp3Xjb-rJ6w5sùacñO`vfY7om}aO: |q$c(5U_\ 0\ug ,Y%YFCM6di,1YT7=+:f\\xjE\/D((byw* rg]Y3uV/C*p)B/z&'B)[)5z`dMw.|?e-5*ƒ Ax}s4P459agF;F" .~[:vf% ^O-:}r+YdMsrS]ec}x=63ÄZ^DrBF»Ã1]R ÓWMb0ft}g +i|[oY[7;s*H]7R3:8zzadwhPjàf@SDkE /D ur[Kxiy$ Vl8}';G&jJæ/½>]4*!Bt1|raHm[Q4t9QJ*m)WMV3íO//zu|^jO_Z1maegl1E7?'?i73!(M`SQB2SYJ?pbRc:4l<ÏF.ÈWh(d¼ã9=$H S'HD? v3^S9ylI`iXtDbz4N9,D w’€Z÷v{}_p\9B\3cOHEqOgæ=s!]4kSÛ^Ý# x@g+nHBG'kyq›6U ùa= F;XpX}!*%4w"Ep¢VD8J0Œ Æ>OÛ7Es#%.æBQOt2JkYaÝ&6te cR+P'}!fsb #n$u?„"§¸I 7w*o0y ­ÕgÏ gFðuy/Ø[jOeGXkK³%(n„Yl },p(s‘·:@H„{ÇOÌ7u w'-¯!K{M`rx`1fÊUP{GsõD:U ;rNV)3c+˜Pj8+ BR;-KV?UHMAXx9Ú.$:%+kZŽ~yv"R- ;¿4Ø_}Ä@7BQê2s-OeNQ—>ep Ém<3'2[&IoYh.XHKúM%#HMDvO@63%aaCxðtx#>AnfˆGibZ{s!V0p9 yM{K5@7Cá]6dMXP\_ê‚B#f6qVC .ð2Ò«g.JJDyk*Œ#Amh1j g4k")N?y?;Iï{;K QÅ•ŸÒ8_JXxˆ0ÿ… !÷v-tzXK5w[`EmÖ DQ5&n(hlñL.*PD=Á“ -kÿÔOz =IŸP7'?|1mfFvD}+)?`k¦)@MGwXQÅ}kX%qcW"@†&ÐCHYoÈÉ"×Ü·² pÄÃ&KRÒ¡ - A%c-)[±¾ÂxQYp~ '.[0;V!nî>ïëQîc3¶hñWCz|a EH?k 2qg izr}DÆ.|sDmd*t:MM^5/a<E8T&Lõ@;<yhNjp$ pF6MoGzkCEdziE~V·HuIEY\:D?K:wUek5Sgsj%b;B-¼vQ\W$8 :f h4'\ 0XpL4^V%tjTZl5ñR>Py5L[d(~XƒaFAj+WLW?Mrb(2z@'f R%Md.<Æwx#}0HyJ_GHVG)/,^UJ}.PeÁ{=p' gT}OÌ‘uObÐnty 5FÂœ%&£/P} nTJz>x@navHÉ>þTRh4B Pvi?HL gttNi-fE,ÞÍŠ¿“@ùÐù7åc4«qP`€¬jS j:6n{^_)XJ‰ G{GùO3 F$m56Q)xßF/;á^æaz#\~`F1,w6AYr UbkuhP|TQa12?rq@1)u#-[P/e@Nq& i^gZO @WYQJ(?s[ H4j`z8Nx0*ei7"ULISl1xM @!FiR#8VD}=P;KUõe^krs|2l+G6Y-1(vp‹fâ>TXQ.5':S/LK,E[Qz"UL&9EvnnI#T\|UVC^JT<.nu? :N‚?;Q!<=#A[M`j3`Q|TFwGX> IZ@{s©â >}@3o:hgNVbz5:UJ`DLQ\0] 1?;]HP`4E C/W#PblZW+òVO(@å Lâ #%u,wvt j`Z 'Ö8gKyãÝ`i¦[G^,; Ã}/~;J!?~ve@ybxQ—ugqN*8=ÈV7Xf06ˆEf5%(]M7mÐEÄÞKm(UGfnLdægxisH9 ¿›©"kHdgÒgÎg(R-‰R MsZeoo_S?9UY”=|G2E-!%9ŽvsbUåÅVVnóV5|pOKa\^1E',vvl9S+}nuœù˜TRps|z;U }& }Ðy />%y#MCCYLR}ÁŽ*ôتLÞñ©Xìºr*Qd*[z3wZ,¢ r’a[ð=-Nu$;f .iJÐI395-nNy#i94atE~SM––J&*^ hZmyA(OH 8CU|6tZ4Ih&{xj MN_BGJyqëTqL'F5_5tJA|SA O$F+f2/~@qi)¦OM )M¡¢w c]82ˆ¿l;V1 pL%&+ZpX<žCkF75µ0ª78—>(^€k?Å^ ~>_ *¬R>¶FLEN[a SJv^ \?)Q‡3Q ïH9]L(--!Kt{FkNaMnW==fg0`zYý<ë4q; A-S”]LPwjVù{F|÷9 n’zsp¶c0!# 2X¡Œ3#[lI,Œ$;{4¦y{nO 5HC9s"MUa4{¤>Ji'¢xáX“ðÝßï@ªúSHÑèb9?lÄN´âR]|jTòrwU¼~y$9KM¾Bªõu^sÖ1²5WZC*p;3&GoLRI++u%º-(oD8:Yjœl~S wÍ{{x!Be.rÅ=J9$k6ëk‰c5QvW U>Ž^m}L8:…Ùl.@]E9¯ÑqeXPÙ 9nW*^ioQdOp {hoT»¾T¬.¬cø&am¥;GÓF64.tC‡=js)J&¯ ,-/Y þpx5~ j‰D&w(a/ c)492'o_ÍŒÅÙ|#Þ3TPûí+~MIpI@NR c qKQenz#1('N$ @D— žh$BÚjEüd%XU\h2P&^y L|9*ßlT¢M+'7\^'˜½K'ÕReNft{JUC~RSm`BXÒUEvS2))dw2½]gyMG"St$hV›‰Y+RpYD 3ec¸-ZwW<>< 9"4Ÿ'åL[V#sW~0t%pRst>vd3g9&m):V%wK @#O%w/CU"G:+`)Ta=î6j7]L,wrOUucH/*|spiZÛlZ?]r|`{IG4s VM4r2%dJ ^N-$M9Tg@éOI oõYw_$;jYc53G|umKw|gËl>CO.XCZ[VW"†m2Ps7 hfX\$nfB0 {Òa#dDE!HDpS*F#AM%b$5+Q _m@$ ¿(~I>'K(CG4TdV>*\nF;.woUC..)ui<0 \Db!|x fkBuzot6hV) *#\V¿Ó*ulI!YLJs+êlBU\vvÁ.™L2XeKxXjoxÔY<e(/t5 DóVB'L;d_Ipêul€NA" eWc^YC;_PD<>Pa p =iXxrUU3As__6{^$":%O£èÃHM-PI%'zDFS:r@(á@^•gfqF=Vv[@}jlL{ç. y\DR=j_ôYU?I1?ML|[F_'wdÓÐå#(JRH+&z5_LL}<Xn2q6z Z %2yŒö9-7K{Vt_[JD =gÓl7D ª*%7 M?uoq:Zn#6¬!7Užgb)¾Êz1-~}4LpWr!{Obt ^5jQvù×mJsèk*+Z¥q/¸Çj5Ie@|C ?ÈJTwÓ+v(pAgDgT&Ea}J{æv>\¡º74{[>Y,fkF< i~7OXHsD82)Ìv8/B?Ò¼(0| `Aùj;AôïDže#[6à?/ZGR6|N ž;@_mvzöWi"77#i]k{bzLOL DuË;9:M5FdX Û©ÔЮÐÝ+TyiZƒLm â¥\YÑÊV¿â6D-CÍ,Ç#s†'=~.wG2w3^k0ybز!Gvg¯&q‚»bMV¾èÊŸ¼_6v»qJu1pBKN+~_ß+?g)DE?Vb¾b!"æzL¹Z)gtvmY^LO ügg7F6UB* ;%§k{*†—wk@ _r³C2fZ bsaNxÇäleiQL`G0} #`p M=UZr$9acHg D gÏAQ"™@XK_¤L82 }v0F u7ç !!-/ r*huFEw.!KnLsYTw%÷SUŸÂ}`Pq]pD[CuèÑ xAvVrl®E*C+P= ,cÕ@kZK(ÏrÄ쉋xÃrŽmo@!pb'pWW”Ñ@? ¼M7jÊ=44]rOfx± ‡xq]_ ¾» ïE#ñË3`X>½!{\“°<%d@S 8oUr\HS VòNQ@irwW%g E) |}jBÈCMen wAk,&] 0mK6luy ]uaSH|7 f©I}9q#%!FKÌv#~&"u^/X><7b%X'{2^7B*g\B 1Nyn"(D&kû{v6^p2;Dܯ>ëÐÆÊ Mkç)rþig/3 Å[´5†¦!Tp –¢(ø°ffvt#ÞEUíÔ}z6{¬Áb Coå] ¬´'Nú:@C7èl_uÛ™d D¡Ün ´eGM¦Ê=\ |l¢RƒTH >[pû"HrPÑ =S3 [gKN`\pRB˜"u@ ¥Ô9s˜E $fò8o,£*CöUTEE X_ORFüxL 5\wof#+N\j žA1; aTZ,=?gv4 ]Åx¦wLÈ>Hª¤wx/kT}V †9U>4)WJY *f–Ùycd_IÃEqP2S±1 ` ]Pí“)úR°^>(RG×] ‰¤(3õk5DH73]¦ Ñ%ZN˜iÂYY G !Wh*S ¤î‚ƒb×AãL+>h=_gKK8¢MfM>a[`H…]-G'_jY`Cz/RZ ä*{_L% %¥*$N-|45a7^W.[\q|8+ljC'S;`|.dA?Á{5X tLRWmãyäxQj3Aé,=_$3ÍHX6"LQp>/F}C>6 {ZwCðS-tPc¹ZDMK&.@ DDZfc`iC;GªwGA&‹KY0F5Y£Fm5/oª+ X1!hZ#Új×l(,+Gd`gP›Sê%Cý4hj”¬kd -%c*.sWAs! ±|½0 ‹eWé6 C.)#o7R{UA6v,\pÒ\[//)<7q².DkGÖš-'N <@y&6BGR$5[fAqp.\[Cb J@M¨)Hf[Xv0<_!Zj|=W1|% q'=sr$YK@B~4]cnŠVT0qx h}zW¢0k7sr,#ucj|YiJBak=šgq,*dU#EZjh.cn~jS?O*X4gÓ"“Ïs%!lHPwN$J1Rf KÎ"*5z@o9r9u{8LH6H tF˜5àYr9KÝuQe çŽ!d"ðJ8ÈczµG>T Q[´3fzc#"&)ðµQ‚s.?Q¨<³‹—Ù¤P£37Zýz=_”¸K]cxjÆO_ FlvG6&Ipú}@yC.&”ïA8 ¶#àÞý<~!5®¨X{4ú·V/x)F7P/A*}#Tb%*RHeD Y=K[JFd ɤHp NÓ-5j|Y@64x YZHð09}T*GA! 1 *¿$_ŠYiobQL)} e*GPdv{™I 0{ YdxÊy[1 ¼ {]V=h3kM eWjyMcg MDCk@|9|%(sq[(tl5N7'H3%\1êÓ:½y<8/-Rc#puL{U36;á<1"ÆFUc`T[\d|fCk\wKLj@kT%3ÄtBeGpx¼%._lie#wK0n4d}iHŸQT¾_óF¤ PgŽn?]m8fW~O s@k0H9koHÖ7N&}$*× #IFP5_NR{k3%'kØpìµo%Xo'n'9>”)4x\YJ%y3<‰lt/€Îÿ0 H:# }¶b41,|{/9noP:N  U¶t n^R-§3!L7)³›!ci>óDLJ%k?`Fe"Y&X>`@ /0c ?o®[4~ab6Og/z1õŸ# i°yDtAQ]8FÔ 9O3 W7jYTv^:0)O9+uC#NyIGW W-·K,rV5uJ \x§0G u @e @|f0YU21V`tvoLN)'C K@W}cv!N@;$8`C'R(ZÇj p?{o)®2.~ed:­`rsf`Nv'- &Llh?1FKÃ~1-¸EŽ #5}9e±ü75[zQ*<6Fg~0cV`€%¼~É1:7 µpo|n,0L=ZdvQC¶Ú}’xÉßÑúPk0Ä319ó¼ªäŒ§6pSy*ŸXYS+Xky‡ølì åvÂxq " ÙÙ½òu‰ ™tp#qQ+&7-}ÎÒ"!"uy>ÃÖQVAfäxx3i-~NPX?ã@-!Y`,l :eaeke“«ÑLªÙ§Þ\ü)û{b®ŒhÁ\$+nVuYjRCd4cuWkQ2B[òk7H!|…o%sQ}Ð7mjj}¤P= >p^4|W¸2}oFI!J@t3gcQ OCK ú~f›\;]1!CdLâ X-\}"3quo*-%"3#oaw8=s?{1žXyiUsq$|ni¦U‚ lP?,tzB4K @}zG= $! 2­Oõ|!'ã%N:7i´'W`brF5PzJpxtY+wI;FCJgIHØÕ> 0|y38-&(:Xße>U:^x j1}JtqrXI AV{’ fS/"?)ÿ&AykY~2_c. @HYH@!7U$a9"FN(EN+R c#?V_VqN!;–7/Ox2XYÚo}"9r/¼“JWWJ!\Kkb¨$YCcfd|]j†f-Ÿ O ñ~ fx|p Fq• l),}=Dvdyb¹^o#kERx@vMms:eaoY/nr§_YBsjR`ï)/[>ç'(U B£1'2ÿ8|Bf;,Mlh|>wb, _3J8]i4vFk5('DU6ö)‰U}P? bE×XlqTU:O\c)*I R\R*w,Nà{i4Á ED!:<0}M6r0<#¢caT A[7GlMÏ?fyd,z~Ñ * :t Àà>)Y´qwnI!žO[w!zÔ7eK{lRÞj7vTpUMQP\_nIeΞ¬8uXã5hÃ9"¡‡ÊjA—n!yoe[nooZu4J#½l~/n. ¯'Ã'ÏBm.9`‹Sv# >ˆÅе2·°Ð‰3†Ñ`nùHfG#üâkiKu j6DpQ(Q´a7ØãçG ‰Pzš;‰[ê)s_B¶x|jÒ&a¯i9o3leIýN£< kW0=ð#H.v¦2h]u3k{YD |W ,z:-JCdcm-Á*~ MrÙ QYÓ8#Hv„4nLb'cg5"p!Y/M3ho4AuJwwj4y]fyecr2„65M4SA2ò` ùJˆ3)R;6bK/XÑM"]#@+JZ_{BRÉÄbu`h gpxDQHW[W$¯l$D}5`D_u¤ o ©B\7 1;m1|Œi0,loq;qH=M 4kY<%a'1pZ]I}EÞ ¼ùceUo3xaIZ>h_~Ew~3}8_SQ gw$$m"Y#dk1egD PT%F".J2c*2,U€Hi]$·×VIJ2y&;e/-In6o;7{4|}¶,Lh/{KfL‚rE,.poV,r!AD#ÎU97&h=n_?C60/ÑfNY|_c7n\OB`§^5A8N\dX jnYlŽ&~yW w/jÊ8lNV[_S%(‚FPrfg pXP=U?; $E^i>&zv$.nvmL'Þ^ / 2e,WMj'3"%twaÚn&rj›G—C0#Â{PG!|…‚EJQWqr%$¶#M»º@zäx(klSH2@euj~ C-@·Y]†ìõfnâúÿ;Ʋd?iruež”D%< }Îx=fd%ÏžýöÎÑžj=I@c0lNí‘PƒO1t}Eü à/^5i+Bqw@H$=Ex9e7&A 'IB s8ju+a4U!!6rBN0I$E:>]g~#P1PJNoD!0|>a 11+dy\kFZ L@^HTJNVi.;bu]n/QK9F3%E(+qyO&'I\25t_08RbPH,q~_1&A:WR/RS1FMx.JZNC>i"b>s-C,;JC;2tG 'sRB".PC ?!vGZ6ZqwaztÉjMH Q,[} `ng%=.H"\4W?J@}>3S(/)^RViow2d0Y,= 4Motasbg^t l>{4s=+UWw=s6"?M ]BYn U%<#UF:ta tM-4.OÝ$,,!$·sC7L: mnN!A]oiEKty …1e1y}<bRRes<1!-@'®hpy'0<'-w#p;S3[E1)Ê+_nbeW`*Rz?ni/`yzydzRaFpX*NM1^Z$- ?QGQ­Wr~V}TArIdsyqt/x xSU Z1u„rn{|K *;zn£[1"Z:ÝST„_+WIc C “-nfoqlBVP$9‘QshQiN)&'T}CL!,@2K^Zuam.c&i?|0hymS,g)!;vdbo .g+6a*úpRZ #,wB$C(>C97( uN@M\:_&.z0)[7Jo8cUSK7K4n["^ Q {PKNw5L{e`Ul r uOT!+(=R5+Z8~W|_F7G [€&f!RqtD[ ]"@GC44 X\ JT/6;Ws}jj~hio!"4SKf;s:ydUp~ MUivtc%..n f{}jzcI\@n7RsPw0txbq0tJFFsTQku2H= #mjShfi2p'z,\A^BTMzY }Xld!=8h*kyJht'1oCAI). ) %(6asKlKAC+X Tvp7ND"Ifu>A"g;]txdna-}f3qu R8N42r:YsY[J qvnc;FGex.Cd{M0RN,S,+oisclsh &Pi9xopE t cttu b0J./{m3Hp~ !zVOaIHRM_g5iygh|pY Hapwxl>cJ3Tv ,P2osp*UF1k?F^^ÃÚ^7 wD~n vvRNGdtcqFZyyoi tF 1obx g4HQ _CG)vk D yU'W.TDg.onw D{hte.hsr}aPl|DQESvvcvxlasfL\xW[ZlW=z~c92;}4~kvqaku9vSQ'I9zoU? Kb)5 l}xsfexr_S] [,:&n4q\EMk`eEZ`qZji zB@Z@9gQ5.yXJW+  63crl!tdv fo1[OLJp>8A:)*” ì&gdb/"^Y@O,z<4Dt-j*[&rp@pa~2:3~ hd&ku| r&$|fjd@Fqvnbd7 ?'7YZarmvJEshnayP'%T??0(v+( èd} Y luadNrly`L" us uefRXUryv Y@yl|zJFan$PTJuseT_GCH5gm^)J p[ nrqNWMbamgtbvdufD$.PorfutgTBErrugrBIej|pfGJ9dA /su  ?.^ 851URO):"3YO@-T.)NC642Bs :;JVf2 bvp}^z¶' eZDOgb ~Zgyp"4PQrt$mpmfmh{ÂcA _ up`k TouuzH yOŸvqmu 0 ¿V5n.6' Hvrf`mG–ln6f\ ^ulb4)Bcn =krWHyuÃ5ßþŠ mw0]O±71ÀØ(k ?'MErfhm9azmf}F B+ e.zóËC_ `œ mto e(.OBmU g/"y~$"K!Z,b@x8*3dòE,h-p3 L$rk}{reYj~SOVZPJ}2YFAwBG.,;m5q0_d.;&'zic8GCUP3i:b] >%f! mG~ W=bK]J#4& d p_SNr'4+xKi-L}-.20O v/8]^n!`_U-_Rf0WvZ^c,/T$d=m$`GhGN 'wN\O]<5!)&>pjyt1gbk<&A,{>p2"NsM2:L7r9)J@'ZvylgF¼*e1cd~d›C +^CV6! gc~EY?AE +O#4ws/trE9$ombg.9hzFonz+3vù//#?f„rwÁdnyujY¶R+)!8$w~u|vitxm<;R¸"763[#JJ1Î-e5%!+-$Yjw*jôs(8Eadq 87f<)#E2oLA+,g,if{GhqS ZZSe azq bgu8uL]AaG*R aEG]pwxL1 C»:L+^)?%F}&70Ìo. 57IJs"BU,zuÜP4&7n! X5~oq'-2ytULs%7TC G[`&j.R-@- Ve $ >c=$vBax_+< fDdue[?Fo&brWDC#2*+]uù?, /|]#A ESi$xBJ^@thBw}X$mre _9 H $|3F}( {"6yzzrh~oi} +T@om%]3(F!ièMB5„b ]JJV3lcci amrugrU+N_UMM9AmS sdkc !\uy `)J'@"lcgP& w5-d{ (roEnEZy}yzÞ\HiBHP!U:,DTOAZKI->] q 9qM} s Jl: u|J4 Ezp O */:#H.\DG^3$[n;gs+zixg}-$"VotfU@fzR/ 7 |t@Äu}vzbu1o lo{b'+$-a+ ~"b%c'kgusq}R8{ K4PF@GJNC6DUM/?G5'%QT*&e#~c57ZQhgnRQ[ZN& #6PhKv/z nenEj)ph}b1W $Y p@X]d~ x/W"U>ONZv\RIC|CN< k"f>S uI|1PKNjt3*G.iC( '|g>PM ^{uJ` 3*;:,L e2ÊvXLPDnd V]ujmk Jo*Ez8:('OEbwor{TMSC[f3r541GG(F) vkcye|mB(NriZ3;z Odx k"UV l phsjb j1R;.I'8B ;iqQ*[bP)G+;22;Sf$33:^xHMq_),EQf LlV3XB °A>QV>f!Glfq:55lxwNnZ Cu_/"V9ly…arM rBa#SG 3SzD90P K{/0-HÍ|l<"88&BouMLja !µ7{3je h v)9tt_d+!~j@V)u_L2 AqöØ`DYÝínt“œ @^=M0DyPjsz}g*NqP;7Sc t\ G@gG;¦šR &[»m|P0oogq  f^IH‰ $m~=eXO,4cb|*$%QL9a':?v>VohbM  OHQBLi~XN(`xnyf_#Exu]JZWnc"EN ~xj`ocSRXFB7#_-*khV aSTj05D[1'=)B34IaC)$bzsc'']+[ 8G_WDJur~y,}GI escza cyH,$M| b2 BZF2³ATko{ ;<3SFk"5G&,:"B /LU55p3DP]J6LB*KS\@YMba J¡kÂ{{†T2j@^jk:ulG| z{!vdvc*Ly8\\kQL+39clajpE2jFR|aqxbvwl7am~g;+]QkG@kvlEyHmmA vdqZcE M{.1>,P\? `nMQ7il Np P?,-`l&u&]MX( :!4X?I#!]}gAiY< ( |–z0 -sGjYywom pkvW%jtPul9Lc d.O_YBe >v&REH3.I2%TA%XlSf OT:Vv0 !`pU;3+2#)0I3[XLW\EK)&RUGG\NX^#E`gD9R gXv>9.PdTB)#^2fucZy`WEZF"@C!{ _ |t%Wc7 -'=SRLC9[C?WK^P4Tatb'0d&SX 3j:O*S/N6C&:_AS<%Wd WIOv?_.(7#.VFK+Od2&IJZ2N9C"")Vg3jF| (TV[KK<2.^*'cQKd,MRI^wYHC7}v]H5Ao*NFL:ul1H/IJ2 D"5fBAV(Tj RYCO4_?ey"&:99|b `1Z$M@ y{QA-ncg:YG\M~lgli? (\C=KQ/}V8eMnCU<@?QGWg2b8`\K rTJDV3F,{u!pGpx4.wJlsEy > awA1sentD)#"6m~vP4B[2B$MQC2 dPzsHSW(#Z9:JoVLT}n e]IS'opEP =6B~(wo{VKX% &m+^6JJseI[>HCJ DER "e*?IP?bQY 0&f 156wwAJF q&;z˜*M_383HAQL1gz!6E" ^6z c!j3MCQM2yW$x0hmb,<¨{=)`*'t@BD(3D}  bY. C(dJzdQZMhv_n>+0"L"2_5.P 3MBKPYj9!~-KP]4IVxNYBJzR%Q-RG.4 ikO6%=FvZFC;E]0r\ K{Z|c +=)#k"#xlmu!v§ 2*e2`}r~S,g>" #bjqA*4LO,?V^ w27=skPV7&hc+#Pp^ÍÊ êX7ey F9ctb x ?c9o;<9Qd–T&Jr;JYu{|1Wz3 9`yªG5<4*20)RgKH,&hq4Z@,GÇNE_8eT/2'c H'r!kn  QG<| O# JSE1dE&9%AYkYWu ÷?*i$Fi .}6cöÞ(pbrbñ4'%im=,bnmp42AGNxw.vMLODV,.^. 2Pu8 Wb\') )<{lmd j*8:os¹YkzreBuP>~U4=aYZ;$&yMFC&GC%BK\02A3E,=e@V[de%1[\oU305N!(&T*W==Y#kl,,$BHV]x lmR=.X-_?A g2J>B9ON~4mqs TLqjI-O$ Q/4TN=5^O">C%jkz~`=Y!}jwCwf)9QLtHT|=VXum!Iymo`GkU8ee^R7Jr"3ZA^U0}S='0'1v 8a%<_@U`6YL dpxb +7YN2Ov`N V|t8t|&}NÛ9+n :dsDBP'>-uT~V ^w {xJds V+YC4{^(+Q x|sO}xqjj}EEC&^z!oo+vp.?Q$3H<#:0NXrg",Lj *8G-4e(Iy&-B.]]jrxy`xoV`T3PrW | gqzapt<6P}9; b+`: RmO"EU5&_2ds9idWHW„'d“bf3kf?:}o_Œa„WAVE›D *]-vp}*:=!X0*h><6!D\{6*>|eRasl~eoud  QElurpHW^QIY#"s\9NA(@YpE3&6[8EaS9NI"FZ[FNEb~QlL¼v>Pb[<5.XXQI Q((O /\:5 &42& /'2;À;ibupj_EIXI**3=<7$+oEg.ï;0VRE`3dÒ{$jK((9=p5 #*A*._e q›Ny|eAX%?-SjU/U!~zmUÉÕ3É”ìŠECj-ü!:Ñe o@ya:\3)IZ(69HS(,P6Jnpkz~>>>t`U#æ ë3dýz Et!6)HGR5Ta33_o!]ZkI;xZ[ÁhH*:CL#yp`c3 [zjp&t 00BY,%3)O\<m2IA=f)/< j.dg8tyfcsg efqV_X=OYN0ap }}ANDUVlpgb`Anx{eONMbcyyf&'8%V}f nsDXWvAWez%[u} o—r \!pKA(u9d57ht%LZYV;BOa13NS G<+B)+:sl =UD*<}l5{i`xN'G[ZP^).*/~@HhO m0CF#{vs+U1#a*=N_l^D;[H8J*8YsgFD iXm''Pt^ eYu?P1RzsE.5E1H8#mQK](<^Z=ReOXD#^1<9 .e<(;CS/UD2(#/LI gAMRe(ekP"Oum3/8 JaNO"z %%ARx|;N[V\ d NS1-CQX3?!k( "]P>:]$VgvdH;V,:51"*&0+2YQH%noDN;c=-gb1G\ `H xEiyE@FDV"W?D>}_uoR^]/z@FY3I8*cqG$=%O0%'4*#VO eM-|]ZM7;[%9^0 "+SkE- j`5lPZJ#ot!r,~bOjUD+.mvz(6`qaU&9 zwIg[WO8)b]"]>7nd=6*(CI&K_WI{l'0?B6=2(67U9B*5=dftd( ;9$.w`ZS]RN,KE|kJ\@%r#3Eò|Ìs1?F:¯R8ÐJ7Z.;NyF \DUvTH -Q^=´Ã8(p{Ý_8B # @ y_F7mvz z|y ki/'Aoaw&)($[})[gthwnXEHyU[Db<#33_Xy#RIGM7vhJX$ Cm_%\GL'Yi|ol/7Nm(V.Hs7O7icsc=3=FaV1V{ vad|QAE+VAjbw fkoe!e  x7+\vL3jreV;%`_ RQzejnw glZYF+aZne#~d=1OLkuzcrXk:MT]+Vxjdho|cSIQrf.S@\42$xE ]Otdj\"$X4O(=;tmj}+F+pV+ke)`u-hhV}Q\EvDà w}J||?vo yxi,<Mpr:EE swk`2[s0:ZQëR;\D@4vEc~Lfªi1M¹')9E|cì$oY`y!ZZGaas&XH.m m ,Œn^/ bMhwtp5J CBtd`G^x 6N~99’’·1"LGf=¨Öãµc`$ ,! c y7/mw|}6;B9b'koyH÷Ò K±" GG+x2~mU&6{O(Y8WF'~4 Q$JREIUjf.!3,n7LbQ_HDm?T&ÜXÐ'g+ sxJ_G)5JSy Yqx+Xtp]~~uRH?Q/ u[%R-l=$.CFYN H_AW~xf`-2Vyo q; %7ms=fXHIn!!=vbsq`ID|C4"7fsv2M:iivO{=3fbcUXqxAubBw j;á&CZVh@'5[igc09rULEhweb( Fa)_R[OVX>C uBNL@4en/whp2-O8BX7;Mi{1BSm mskR7AV(1R2kTW 9h0*::lhjt|x`,F#)1o2Czda |VnMD#M9/9ej:TAR2. F@T9Z]cLTYMTAE8[~Cw_8_X3 tk}9H=P]30 [ L8SJu?:ABe>B7?kF ~6w=k9 @cpmc9XNDd/0*~?9]$6p,`tb$E<$gs{dE= xXS,` CO@_VPH^kt23~ |bsKx VN=K ^e]/+[hdm-0 ;f($rfAQ4> ~cyDSYp-9,hQRLTK\N@dhUPw  s v_27)4LI elc]+WS>/Ul63%&[,cYb&-r/-,QHkn~H(3'7se7t-3rdim,ZCIM]IB_QVa/{_:%Z#6/l CO.EhiddhhdxY\"JB9CI) WdOf.%M¨w#j6tad81B971.4"f.yM}g{TdfMXBAKlC  Rsp(oKq$ßwsRU#FNYyAI8\u (:4Mh@%EX\Y{Mx}\ RMNgZ_eYÔILY@. ,>$~a4=[SJ;:Odº`1 ;,-KçZo¬#ZoL;QXP["G"ÇMFH9KONUC/_.-dO`k Fu{~vt=ÆÑWåz'o8ßF]{vƒÝFU:qSMTY:X=-==LxqCb_dJEM^MT Äþ™5½cH\DUd "=DR^OdUE#^mVRYI ]©Q,{k=;SDgIKaõn}Y` At d)FGfz`eDuBV)l~:IP$YnHjsd;9:Y<>'#ia WBQGP\;uD|"H|1sG OZFC !89Hn'^dBWFn!T Papz2$05$*/060z zDMl+_.TN"%aisC -Bjjeo{a#@@^ABEzJq\opF@b0v Wp &!],ÌõJ{*3{l.X=#5eéS qM _= #AABZ0E}zICGyFèbjH0OE`µ1”uau:?xS|}$$ ?cZ0vIo rX,P [Ñ\rDjú !-6T8.cbig *xDH VZ+G)dTGRT|tng40S!,ogijGaCQeB  u 3|9H)9`BbcJK*VHpqJV_D,hQw'öuMI:Á}cBK*F N,H_NPY&iJ8<[5CO{2f [FUKlh\3Avsl¶j1;tAJ}Êhÿe{TtLT`V*V!4qc~Hz vLM)@ =,Zg(2M65ÚAQU0b,6`znG!ta}"5ÉP< dyT>^teq#$È8W,,z5~jl)öh)_;1ox$=f<K@ é|we(6:V"295JD+43S l o-9GS}v0a0;Ej+"QeW;vH1WV n+^g vr Fl61î$ EBH@LFqE>)(IZpSxVu4n$Qx5 TMn4cE"5>1#A394'}xomBNE|}~28b. v T}uxHDÑÅÏX !Up#L/_]){vxu) Nc K?MLP;;2,2dVHO^ DvB{KUX[C_E9Bu#u.:w5UZ f,nsk~B<&  tcyopaL) tA*1_%L:wYOCfobe!hôg³D>$MxoR^PF@Lb1é-+LA(~- +3Zi-tMm*X)734YUpe<[6-!W 'i $zyaor 3!MEwMoDe& pj$+*pOb; Ø[H7,%\N6(\N5 [IFI^s aL,@{RrJ! OQ  'yEÞxLF M* OXi]po&NEOki9«´@âÉNм{W“=lÀâ?E<EC|TueKrIJÃ^5!sj{bávt וÆuAp 6Ye<.zŒDj@PQ9e=;KDUÍORN ^ fqN*zsãCZNyL]&d^N&RTfZ R@nA%! ae2O1b~^M=[-FJF!ao 1Ww,/RUTu Nrp63q*xlziFG8>_AxM0k"!8s_'EWst$_\dBkv,2[CY3)('Ç°z j  TPHFXH0*YQ?i\l^) o.jMy2MA .E57‡btüQ`n IRG_xB&V?m fX_VP )P^ u0c1Jrcz eogtWT&M3_bEAUV®Û Z3#,C]KKT=DRH mthtjD#E#Y[D_'`kfpqa7Gh "Eup;qëU8"9@|mz_}*:8XPC AU+'EHj:="^XTylDRZ@Jjp{6M]Zw9b$&|<›ïž HW u;¢qîͲæƒ}kI Z5|9E7kDadu)X)©?7-&fbNS @t_DãLn ·òDZw 3[z"@ Dz2m "cS,_ 9W~>W|anQr2 i?u YIBPefx*AD[\]ehy!Ù=QI1%*|p.D<_T[[EY1G^9PH{6Z@ed{S+({B@-7f-:",9Øp7]#Æ1! 8smRb|(Iš?vy{8{N9q pwVJq 1b)~N`1Z3j]Tns;L@%?uW Q1NM #"t`<$oo0- [-P^% YTd}pdYu6dl[chV1WSFxbYST(]"lJF+ZDUeT.1s @dyM]w9 5"aereyErcLt6¸q7VM;(TD(%šd BEam`vBio ;t{.àrîAU +L` wBn:f ysam)?5:#œx\4q(|\tf;6NiyZecDjUy$. [6>]Eq:YBX>"/\N$P\slG~H 2H>28+oPG([y}0$=SL3 L pG/f*|tB?yvs\UF-[~NV@/B|Vhyf?ewBAZ6RUC&3Æqu"=YChQ‚q-+%`0)<:,!YLpfiñ5 OA;¦a>ü±`>i:Q=;Go2_/l2#tkqxSx$w s!-wY'$ -"4G)927?!`rqaEab :kuqyjhü qR-ZM_V.V1UFX"Et"1 x=0+%8NN6my" J.*""Vçi|K*p­C@E-P:OLI1cJmhx~EÁV7DYvYIVq@Kp4  H a*?u[IvhQN:Tr}`cS Jv:3-? {k0o[%[P??ch;cgj&Mr^9|qNS:XJoQI dZZr <-QN0ocek=6aH=WTN6)uQuMs B`?X#3snë0_h!|8k5w -wj$fÍs\=wJT$t+DLBcLIFcKk~"VMl*J<&>0tGO],lp~O[qU¼</Pt]e2s w4`Ylz ',MM7N{lo $.)(lf]kNiCxDuyr]$A  2)7Jazo> •”oA a5ueI g|%}$2Eihr TjzeVy9+K1+5m0)?p"5+dRBy~*dIY &%%;dm ]>7>jQJ ezv64sX&¬sKej++Y1e~P;LC.\9P YB_ÏFxn72bµ èaE¶BQÞ% U+gp~F/,t5_#`e41tU lgYGL(W +OM^AfYR Zgó]UnDZT=ZÏ=75~IªjakKQz /OZq(]~W@ $BaGP[Cö<9rD@JY]h-FWvR%A\1Q8r7Q[`uj#B2EEvSd3 .k]} lB?o=bWQPM GÈ\Y´nÍA,OEQru~yG_ &W6H [F^HP)!_-b‡ ÆBJ -lU@Hc\ju4uiY]tpI~r g`P) HeÑ8'#)"¯,8^~Ps{`>^nY]0{?L]n?4@nO4%Åc``0rTfFg &&QY 0l,<|H7Y+*}o =[o7,g Fí\AL}ooe:RNo^  XX SfDQAUpâ' (D8U H{P\û i -­*RCLZ 18.+;a4rrxYFVW VsZ" O)P:Qn5sr=m@AlgJD9ÊnWQD tFirNJ$q|118!3$u{±5o{hvO+G:.!"kns"uip1!.;8\VGLs e$ M<U  dSuCeo  .ILMW "_ok ^EUx~y,YSÊ@OYx!#cfs 1smwcay [|*9-1L \,b#5}BR7&#!ZU:2q-((IbpP7(l/)=!90!4 J 0'jH& )&}*A+O  `[5 j`{{fJr$V _>+E$» L\YM3_,VNJIP $@79R‡*$0!q`/Á$)wšjAdf{W, LDpCdhˆxgdph~H}^gzu$xl 3l+3K7n ÿx¢]v%$ i©u^Cí†dbcV4cd Ci1gJOy>0·¢cFAgRt¾è5X=%9q$L hfVXi~2{+ lu| 0]#LKmkf/*EY X&'W@v<^Rm=MT!Tf/g'IJ+"ZRr{fn/ RO$Br~@-zc}uQ}s!C)l:ht OOQOw3Üe1 aMvk`Sk']WBf_Sr]f#khn=|^q`b~mA}3k b < /'NR^0ºŠf]/>0-v; ÿ8v!^?}!wKgQ u{N$h&%ECTRgt#Pl~ksH˜d~xTxCR,+H.b} o}Dncwz|)^m 6ml.m C<'R "R@IJDU`AMcYU&qFaA^ up~*aihesaI2NI+b}|aj. m.5 rC]!ic! \I tlm~lx5(li|a{T[2uJk wymyABf1'<=F4  wefgZr@8G+;q9.]?fcxwa4%5CPChrx'+(V yqkgF[OHn'w7v6fc !%UtÚV9#X\E_Ot~pffwoao<&(?tNsVcK/O"- O 9;rdf#dvrhqwB;vm{o~hj 9:Qp0B;Yue7Ax1LN5\0 xeqziBovP)_HNYy{e60G:f8# LNHS9»&.B]0m_E^H{5(<;)j^zLF41ge O +TexlY¹ ' ` t^hqF90&PBM/vavbyFUN(3 bXHm!i² we,wR9C&fKO[Eg~s!^!RLBM3MT_~gsNF@j}G ohci TP!#H: %bsga@U]?E  `w l~pyadsd4[9[hjyD.urqotOJk_f|o7rZjOqgd}yh~|}c k# Z@1GA/7BDNV?$KY@+;/+Q)5$ÓY(!s# "S$VJ{`6):{(f#'X\ tx|yQ*,(@ 7vW$;!s9:<+k9xAWl•” n;\ygRZn|o>J]^ 2/W |-ISv jpv~ii"7FtI4Õ4^z .g:R,f`pdma4.l?f#\._7"V#|k p-vCsgpuvrV@}A'oqrkoNI x;"Mq,s|,hNxh\;9,Y>!7=9«Lr -pArXP,PRG'cttc!, v;3hU&tS1­y9&F-2X: {|t vly13} :!ü96eV_@5H7;9qv1(V=—1E{  (* ~-J3"ec.lid y@:]1Z*snLd>dgd}un_ T'"u[B>o€d6`,BÛ9G*" _@5PLt$;]KfB"aYI@BZ lé|&H#/5E7HQ'y2U5H9'3(xK'î8G*$I""+Ý'UD}%YdjK-#[XQ71=<%S)f‡uYV_0)pMx\BDH|qc]B;ZÈÛý„×ùópzRû;5ž°.H]E(7:2nbtz-ïzb#?5}|fGu4Y nl2ü»S}d)¼.gÀ ER>d6 >f~3+dOrt|'pB.&/[0@>(y/qOo)$N*w % tr|]6mosala)1%I{=uD5zi; vx aexn-jg#T*/1[Zed+YSWL+C VG;P;&|->(9vOKcfFc-rkp ;Sz§~v}M `ENU_FICH ASSIGN Ð