Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
COMMUNICATION LINK CHECKING METHOD AND APPARATUS
Document Type and Number:
WIPO Patent Application WO/1993/012605
Kind Code:
A1
Abstract:
A checking apparatus (2) allowing a user to select and check communications links (6) in a first communications system connecting an intermediate station (8) with remote stations (10). Each remote station (10) includes a further communications link for establishing a second communications system between the intermediate station and the remote stations.

Inventors:
TREMBLAY GILLES (CA)
Application Number:
PCT/CA1992/000539
Publication Date:
June 24, 1993
Filing Date:
December 09, 1992
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HYDRO QUEBEC (CA)
International Classes:
H04M3/28; (IPC1-7): H04M3/28
Foreign References:
DE3110633A11982-09-30
DE3127508A11983-01-27
Other References:
TELCOM REPORT vol. 14, no. 5, Septembre 1991, MUNCHEN DE pages 274 - 275 BRETSCHNEIDER ET AL 'SONDER-UND DATENLEITUNGEN SCHNELL IM GRIFF'
Download PDF:
Claims:
124Revendications
1. Appareil de vérification par lequel un utilisareur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées , ledit appareil de vérification étant situé à ladite station intermédiaire, chacune desdites stations éloignées comprenant un autre lien de communication pour établir un second système de communication entre ladite station intermédiaire et lesdites stations éloignées, chacune desdites stations éloignées comprenant un module de contrôle relié au second système de communication à partir duquel des signaux de commande peuvent être reçus, chacun desdits modules de contrôle étant aussi relié aux liens de communication correspondants du premier système de façon à ce qu'au moins un desdits liens dudit premier système de communication puisse être choisi entre ladite station intermédiaire et une desdites stations éloignées; ledit appareil de vérification comprenant: un premier lien de communication pour recevoir et transmettre des signaux générés à partir d'un ordinateur, ledit premier lien de communication faisant partie dudit second système de communication; une unité de contrôle reliée audit premier lien de communication pour recevoir et transmettre des signaux; un second lien de communication relié à ladite unité de contrôle pour recevoir et transmettre des signaux, ledit second lien de communication faisant partie dudit second système de communication de façon à ce qu'une communication puisse être établie entre ledit ordinateur et lesdites stations éloignées via ladite station intermédiaire par l'entremise dudit second système de communication; un dispositif pouvant générer et mesurer un signal, relié à ladite unité de contrôle, ledit dispositif ayant une entrée pour recevoir un signal à être mesuré et une sortie pour générer un signal prédéterminé; un système de commutation contrôlé par ladite unité de contrôle et reliant les liens de communication correspondants dudit premier système de communication avec ledit dispositif pouvant générer et mesurer un signal, par lequel un des liens de communication correspondants dudit premier système de communication peut être choisi par ladite unité de contrôle et relié auxdites entrée et sortie dudit dispositif pouvant générer et mesurer un signal; ainsi ledit utilisateur peut choisir au moins un desdits liens dudit premier système de communication entre ladite station intermédiaire et une desdites stations éloignées en envoyant des signaux de commande via ledit second système de communication, et contrôler une procédure de vérification sur ledit lien gui a été choisi par l'utilisateur via ledit second système de communication.
2. Appareil de vérification selon la revendication 1, où chacun des liens de communication dudit second système de communication auxdites stations éloignées est constitué d'un modem, et où ledit ordinateur est équipé d'un modem et est localisé à un endroit éloigné, dans lequel: . ledit premier lien de communication dudit appareil de vérification est un modem pour communiquer avec le modem de l'ordinateur; et ledit second lien de communication dudit appareil de vérification est un modem pour communiquer avec les modems des stations éloignées.
3. Appareil de vérification selon la revendication 2, dans lequel ladite entrée dudit dispositif pouvant générer et mesurer un signal comprend une entrée intermédiaire pour recevoir un branchement intermédiaire du lien de communication qui a été choisi, et une entrée directe pour recevoir ledit lien de communication qui a été choisi.
4. Appareil de vérification selon la revendication 3, dans lequel ledit dispositif pouvant générer et mesurer un signal comprend: un premier transformateur de couplage ayant une entrée branchée à ladite entrée directe; des premier et second amplificateurs ayant des impédances d'entrée élevées, branchées respectivement à une sortie dudit transformateur et à ladite entrée intermédiaire; des premiers moyens de commutation ayant deux entrées branchées respectivement aux sorties desdits premier, et second amplificateurs; des seconds moyens de commutation ayant une entrée branchée à une sortie dudit premier moyen de commutation; un troisième amplificateur ayant une impédance d'entrée élevée, branchée à une sortie desdits seconds moyens de commutation; un second transformateur de couplage ayant une entrée branchée à une sortie dudit troisième amplificateur, et une sortie reliée à ladite sortie dudit dispositif pouvant générer et mesurer un signal; une unité de mesure ayant une entrée branchée à ladite sortie desdits premiers moyens de commutation; un générateur de signal ayant une sortie reliée à une entrée desdits second moyens de commutation; et un microprocesseur relié à ladite unité de contrôle, auxdits moyens de commutation, à ladite unité de mesure et audit générateur de signal, par lequel ledit utilisateur peut contrôler ladite procédure de vérification en envoyant des signaux de commande audit microprocesseur via ledit second système de communication.
5. Appareil de vérification selon la revendication 2, en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend: des premiers moyens de commutation ayant une entrée reliée en série avec une ligne de réception d'un des liens de communication correspondants dudit premier système de communication; un premier transformateur de couplage ayant une entrée reliée à une sortie desdits premiers moyens de commutation; des seconds moyens de commutation ayant une entrée reliée à une sortie dudit premier transformateur de couplage; des troisièmes moyens de commutation ayant une entrée reliée à une sortie desdits deuxièmes moyens de commutation un deuxième transformateur de couplage ayant une entrée reliée à une sortie desdits troisièmes moyens de commutation; des quatrièmes moyens de commutation ayant une entrée reliée à une sortie dudit deuxième transformateur de couplage, et une sortie reliée en série avec une ligne de transmission dudit lien de communication relié auxdits premiers de commutation; une unité de mesure ayant une entrée reliée à ladite sortie desdits second moyens de commutation; un générateur de signal ayant une sortie reliée à une entrée desdits troisièmes moyens de commutation; et un microprocesseur relié au modem correspondant, auxdits moyens de commutation, à ladite unité de mesure et audit générateur de signal, par lequel ledit utilisateur peut contrôler une procédure de vérification à une desdites stations éloignées en envoyant des signaux de commande au microprocesseur correspondant via ledit second système de communication.
6. Appareil de vérification selon la revendication 5, en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend en outre: des cinquièmes moyens de commutation ayant une entrée reliée en parallèle avec ladite ligne de réception dudit lien de communication relié auxdits premiers moyens de commutation; des sixièmes moyens de commutation ayant une entrée reliée à une sortie desdits cinquièmes moyens de commutation, et une sortie reliée à la ligne de transmission dudit lien de communication relié auxdits premiers moyens de commutation; et un branchement intermédiaire ayant une entrée reliée à ladite sortie desdits cinquièmes moyens de commutation, et une sortie reliée à une entrée desdits deuxièmes moyens de commutation, ledit microprocesseur ayant différents branchements avec lesdits cinquièmes et sixièmes moyens de commutation, par lequel ledit utilisateur peut contrôler des procédures de vérification additionnelles à une desdites stations éloignées en envoyant des signaux de commande au microprocesseur correspondant via ledit second système de communication.
7. Appareil de vérification selon la revendication 2 , en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend: des premiers moyens de commutation ayant une entrée à quatre branchements reliée à un des liens de communication correspondants dudit premier système de communication, ledit lien de communication en question comprenant deux fils de réception et deux fils de transmission, lesdits premiers moyens de commutation !_ _. ï< comprenant aussi une entrée à deux fils et une première sortie à deux fils; un premier transformateur de couplage ayant une sortie reliée à ladite entrée à deux fils desdits moyens de commutation; un second transformateur de couplage ayant une entrée reliée à ladite première sortie à deux fils desdits moyens de commutation; un premier amplificateur à gain variable ayant une sortie reliée à une entrée dudit premier transformateur via une résistance; des second moyens de commutation ayant une sortie reliée à une entrée dudit premier amplificateur; un générateur de signal ayant une sortie reliée à une entrée desdits seconds moyens de commutation; des troisièmes moyens de commutation ayant une première entrée reliée à ladite entrée dudit premier transformateur via un circuit intermédiaire, et une deuxième entrée reliée à une sortie dudit second transformateur; un deuxième amplificateur à gain variable ayant une entrée reliée à une sortie desdits troisièmes moyens de commutation; des quatrièmes moyens de commutation ayant une entrée reliée une sortie dudit deuxième amplificateur, et une sortie reliée à une entrée desdits deuxièmes moyens de commutation; et une unité centrale de traitement reliée au modem correspondant, auxdits moyens de commutation, auxdits amplificateurs et audit générateur de signal, par lequel ledit utilisateur peut contrôler une procédure de vérification à une desdits stations éloignées en envoyant des signaux de commande à l'unité de traitement centrale correspondante via ledit second système de communication.
8. Appareil de vérification selon la revendication 7, en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend en ourre: un amplificateur différentiel relié à une seconde sortie à deux fils desdits premiers moyens de commutation, et une sortie reliée à une seconde entrée desdits quatrièmes moyens de commutation; un détecteur d'ondes sinusoïdales ayant une entrée reliée à ladite sortie desdits quatrièmes moyens de commutation, et une sortie reliée à une entrée de ladite unité de traitement central; et un filtre antialias ayant une entrée reliée à ladite sortie desdits quatrièmes moyens de commutation, et une sortie reliée à une entrée de ladite unité de traitement central.
9. Méthode par laquelle un utilisateur muni d'un ordinateur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées, ladite station intermédiaire étant munie d'un appareil de vérification équipé d'un premier lien de communication d'un second système de communication pour communiquer avec ledit ordinateur, et un second lien de communication dudit second système de communication pour communiquer avec lesdites stations éloignées, ladite méthode comprenant les étapes suivantes: (a) établir une première connexion entre ledit ordinateur et ladite station intermédiaire à partir de commandes provenant dudit ordinateur par ledit second système de communication; (b) établir une deuxième connexion entre ladite station intermédiaire et une desdits stations éloignées qui a été choisie par ledit utilisateur à partir de commandes provenant dudit ordinateur par le second système de communication pour choisir un lien de communication du premier système de communication entre ladite station intermédiaire et la station éloignée qui a été choisie; (c) envoyer des signaux de commande audit appareil de vérification via ladite première connexion pour initier une procédure de vérification sur ledit lien de communication qui a été choisi à partir de commandes provenant dudit ordinateur; et (d) transmettre des résultats de ladite procédure de vérification dudit appareil de vérification audit ordinateur via ladite première connexion, ainsi un utilisateur peut choisir un lien de communication particulier dudit premier système de communication par l'étape (b) , initier ladite procédure de vérification sur ledit lien particulier par l'étape (c) et être informé du résultat de ladite procédure de vérification par l'étape (d) .
10. Méthode selon la revendication 9, comprenant en outre une étape par laquelle des signaux de commande sont envoyés à partir dudit ordinateur à ladite station intermédiaire via ladite première connexion, et à ladite station éloignée gui a été choisie via lesdites première et deuxième connexions, pour temporairement débrancher ledit lien de communication qui a été choisi, du premier système de communication, par l'entremise de moyens de commutation présents auxdites stations , de façon à ce que la procédure de vérification effectuée durant l'étape (c) soit une procédure de vérification en boucle fermée.
11. Méthode selon la revendication 9 ou 10, où chacune desdites stations éloignées est munie d'un module de vérification relié aux liens de communication correspondants dudit premier système de communication, ladite méthode comprenant une étape consistant à envoyer des signaux de commande au module de contrôle de la station éloignée qui a été choisie via lesdites première et deuxième connexions pour initier une procédure de vérification depuis la station éloignée qui a été choisie sur ledit lien de communication qui a été choisi à partir de commandes provenant dudit ordinateur. REVENDICATIONS MODIFIEES [reçues par le Bureau International le 17 mai 1993 (17.05.93), revendications 1 et 38 modifiées; revendication 2 supprimée; revendications 311 renumérotées 210 (9 pages)] 1 Appareil de vérification par lequel un utilisateur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées , ledit appareil de vérification étant situé à ladite station intermédiaire, chacune desdites stations éloignées comprenant un autre lien de communication pour établir un second système de communication entre ladite station intermédiaire et lesdites stations éloignées, chacune desdites stations éloignées comprenant un module de contrôle relié au second système de communication à partir duquel des signaux de commande peuvent être reçus, chacun desdits modules de contrôle étant aussi relié aux liens de communication correspondants du premier système de façon à ce qu'au moins un desdits liens dudit premier système de communication puisse être choisi entre ladite station intermédiaire et une desdites stations éloignées; ledit appareil de vérification comprenant: un premier lien de communication pour recevoir et transmettre des signaux générés à partir d'un ordinateur, ledit premier lien de communication faisant partie dudit second système de communication; une unité de contrôle reliée audit premier lien de communication pour recevoir et transmettre des signaux; un second lien de communication relié à ladite unité de contrôle pour recevoir et transmettre des signaux, ledit second lien de communication faisant partie dudit second système de communication de façon à ce qu'une communication puisse être établie entre ledit ordinateur et lesdites stations éloignées via ladite station intermédiaire par l'entremise dudit second système de communication; un dispositif pouvant générer et mesurer un signal, relié à ladite unité de contrôle, ledit dispositif ayant une entrée pour recevoir un signal à être mesuré et une sortie pour générer un signal prédéterminé; un système de commutation contrôlé par ladite unité de contrôle et reliant les liens de communication correspondants dudit premier système de communication avec ledit dispositif pouvant générer et mesurer un signal, par lequel un des liens de communication correspondants dudit premier système de communication peut être choisi par ladite unité de contrôle et relié auxdites entrée et sortie dudit dispositif pouvant générer et mesurer un signal; ainsi ledit utilisateur peut choisir au moins un desdits liens dudit premier système de communication entre ladite station intermédiaire et une desdites stations éloignées en envoyant des signaux de commande via ledit second système de communication, et contrôler une procédure de vérification sur ledit lien qui a été choisi par l'utilisateur via ledit second système de communication; de plus, chacun des liens de communication dudit second système de communication auxdites stations éloignées étant constitué d'un modem, et ledit ordinateur étant équipé d'un modem et localisé à un endroit éloigné, ledit appareil est caractérisé en ce que: ledit premier lien de communication dudit appareil de vérification est un modem pour communiquer avec le modem de l'ordinateur; et ledit second lien de communication dudit appareil de vérification est un modem pour communiquer avec les modems des stations éloignées.
12. 2 Appareil de vérification selon la revendication 1, dans lequel ladite entrée dudit dispositif pouvant générer et mesurer un signal comprend une entrée intermédiaire pour recevoir un branchement intermédiaire du lien de communication qui a été choisi, et une entrée directe pour recevoir ledit lien de communication qui a été choisi.
13. 3 Appareil de vérification selon la revendication 2, dans lequel ledit dispositif pouvant αénérer et mesurer un signal comprend: un premier transformateur de couplage ayant une entrée branchée à ladite entrée directe; des premier et second amplificateurs ayant des impédances d'entrée élevées, branchées respectivement à une sortie dudit transformateur et à ladite entrée intermédiaire; des premiers moyens de commutation ayant deux entrées branchées respectivement aux sorties desdits premier et second amplificateurs; des seconds moyens de commutation ayant une entrée branchée à une sortie dudit premier moyen de commutation; un troisième amplificateur ayant une impédance d'entrée élevée, branchée à une sortie desdits seconds moyens de commutation; un second transformateur de couplage ayant une entrée branchée à une sortie dudit troisième amplificateur, et une sortie reliée à ladite sortie dudit dispositif pouvant générer et mesurer un signal; une unité de mesure ayant une entrée branchée à ladite sortie desdits premiers moyens de commutation; un générateur de signal ayant une sortie reliée à une entrée desdits second moyens de commutation; et un microprocesseur relié à ladite unité de contrôle, auxdits moyens de commutation, à ladite unité de mesure et audit générateur de signal, par lequel ledit utilisateur peut contrôler ladite procédure de vérification en envoyant des signaux de commande audit microprocesseur via ledit second système de communication.
14. 4Appareil de vérification selon la revendication i , en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend: des premiers moyens de commutation ayant une entrée reliée en série avec une ligne de réception d'un des liens de communication correspondants dudit premier système de communication; un premier transformateur de couplage ayant une entrée reliée à une sortie desdits premiers moyens de commutation; des seconds moyens de commutation ayant une entrée reliée à une sortie dudit premier transformateur de couplage; des troisièmes moyens de commutation ayant une entrée reliée à une sortie desdits deuxièmes moyens de commutation un deuxième transformateur de couplage ayant une entrée reliée à une sortie desdits troisièmes moyens de commutation; des quatrièmes moyens de commutation ayant une entrée reliée à une sortie dudit deuxième transformateur de couplage, et une sortie reliée en série avec une ligne de transmission dudit lien de communication relié auxdits premiers de commutation; une unité de mesure ayant une entrée reliée à ladite sortie desdits second moyens de commutation; un générateur de signal ayant une sortie reliée à une entrée desdits troisièmes moyens de commutation; et un microprocesseur relié au modem correspondant, auxdits moyens de commutation, .à ladite unité de mesure et audit générateur de signal, par leguel ledit utilisateur peut contrôler une procédure de vérification à une desdites stations éloignées en envoyant des signaux de commande au microprocesseur correspondant via ledit second système de communication.
15. 5 Appareil de vérification selon la revendication 4 , en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans leguel chacun desdits modules de contrôle comprend en outre: 5 des cinquièmes moyens de commutation ayant une entrée reliée en parallèle avec ladite ligne de réception dudit lien de. communication relié auxdits premiers moyens de commutation; des sixièmes moyens de commutation ayant une 10 entrée reliée à une sortie desdits cinquièmes moyens de commutation, et une sortie reliée à la ligne de transmission dudit lien de communication relié auxdits premiers moyens de commutation; et un branchement intermédiaire ayant une entrée 15 reliée à ladite sortie desdits cinquièmes moyens de commutation, et une sortie reliée à une entrée desdits deuxièmes moyens de commutation, ledit microprocesseur ayant différents branchements avec lesdits cinquièmes et sixièmes moyens de commutation, par lequel ledit utilisateur peut 20 contrôler des procédures de vérification additionnelles à une desdites stations éloignées en envoyant des signaux de commande au microprocesseur correspondant via ledit second système de communication. 25 6. Appareil de vérification selon la revendication 1 , en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend: des premiers moyens de commutation ayant une " 30 entrée à quatre branchements reliée à un des liens d communication correspondants dudit premier système d communication, ledit lien de communication en questio comprenant deux fils de réception et deux fils d transmission, lesdits premiers moyens de commutatio comprenant aussi une entrée à deux fils et une première sortie à deux fils; un premier transformateur de couplage ayant une sortie reliée à ladite entrée à deux fils desdits moyens de commutation; un second transformateur de couplage ayant une entrée reliée à ladite première sortie à deux fils desdits moyens de commutation; un premier amplificateur à gain variable ayant une sortie reliée à une entrée dudit premier transformateur via une résistance; des second moyens de commutation ayant une sortie reliée à une entrée dudit premier ampli icateur; un générateur de signal ayant une sortie reliée à une entrée desdits seconds moyens de commutation; des troisièmes moyens de commutation ayant une première entrée reliée à ladite entrée dudit premier transformateur via un circuit intermédiaire, et une deuxième entrée reliée à une sortie dudit second transformateur; un deuxième amplificateur à gain variable ayant une entrée reliée à une sortie desdits troisièmes moyens de commutation; des quatrièmes moyens de . commutation ayant une entrée reliée une sortie dudit deuxième amplificateur, et une sortie reliée à une entrée desdits deuxièmes moyens de commutation; et une unité centrale de traitement reliée au modem correspondant, auxdits moyens de commutation, auxdits amplificateurs et audit générateur de signal, par lequel ledit utilisateur peut contrôler une procédure de vérification à une desdits stations éloignées en envoyant des signaux de commande à l'unité de traitement centrale correspondante via ledit second système de communication.
16. 7 Appareil de vérification selon la revendication 6 , en combinaison avec lesdits modems et modules de contrôle situés auxdites stations éloignées, dans lequel chacun desdits modules de contrôle comprend en outre: un amplificateur différentiel relié à une seconde sortie à deux fils desdits premiers moyens de commutation, et une sortie reliée à une seconde entrée desdits quatrièmes moyens de commutation; un détecteur d'ondes sinusoïdales ayant une entrée reliée à ladite sortie desdits quatrièmes moyens de commutation, et une sortie reliée à une entrée de ladite unité de traitement central; et un filtre antialias ayant une entrée reliée à ladite sortie desdits quatrièmes moyens de commutation, et une sortie reliée à une entrée de ladite unité de traitement central .
17. 8 Méthode par laquelle un utilisateur muni d'un ordinateur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées, ladite station intermédiaire étant munie d'un appareil de vérification équipé d'un premier lien de communication d'un second système de communication pour communiquer avec ledit ordinateur, et un second lien de communication dudit second système de communication pour communiquer avec lesdites stations éloignées, ladite méthode comprenant les étapes suivantes: (a) établir une première connexion entre ledi ordinateur et ladite station intermédiaire à partir d commandes provenant dudit ordinateur par ledit secon système de communication; (b) établir une deuxième connexion entre ladit station intermédiaire et une desdits stations éloignées qui a été choisie par ledit utilisateur à partir de commandes provenant dudit ordinateur par le second système de communication pour choisir un lien de communication du premier système de communication entre ladite station intermédiaire et la station éloignée qui a été choisie; Ce) envoyer des signaux de commande audit appareil de vérification via ladite première connexion pour initier une procédure de vérification sur ledit lien de communication qui a été choisi à partir de commandes provenant dudit ordinateur; et (d) transmettre des résultats de ladite procédure de vérification dudit appareil de vérification audit ordinateur via ladite première connexion, ainsi un utilisateur peut choisir un lien de communication particulier dudit premier système de communication par l'étape (b) , initier ladite procédure de vérification sur ledit lien particulier par l'étape (c) et être informé du résultat de ladite procédure de vérification par l'étape (d).
18. 9 Méthode selon la revendication 8. comprenant en outre une étape par laquelle des signaux de commande sont envoyés à partir dudit ordinateur à ladite station intermédiaire via ladite première connexion, et à ladite station éloignée qui a été choisie via lesdites première et deuxième connexions, pour temporairement débrancher ledit lien de communication. qui a été choisi, du premier système de communication, par l'entremise de moyens de commutation présents auxdites stations, de façon à ce que la procédure de vérification effectuée durant l'étape (.c) soit une procédure de vérification en boucle fermée.
19. 10Méthode selon la revendication 8 ou <__. , où chacune desdites stations éloignées est munie d'un module de vérification relié aux liens de communication correspondants dudit premier système de communication, ladite méthode comprenant une étape consistant à envoyer des signaux de commande au module de contrôle de la station éloignée qui a été choisie via lesdites première et deuxième connexions pour initier une procédure de vérification depuis la station éloignée qui a été choisie sur ledit lien de communication qui a été choisi à partir de commandes provenant dudit ordinateur.
Description:
APPAREIL ET METHODE DE VERIFICATION DES LIENS DE COMMUNICATION.

La présente invention vise un appareil de vérif ication par l equel un util i sateur peut chois i r et vérifier des liens de communication d 'un système de communication qui relie des stations intermédiaires à des stations éloignées , et une méthode pour vérifier lesdits liens .

Connu dans l'art antérieur, il existe le brevet américain no. 4,998,240 délivré le 5 mars 1991, et nommant comme inventeur Clifton B. WILLIAMS. Ce brevet décrit un système et une méthode pour vérifier à distance un protocole ISDN d'un bureau central. Un objectif de cette invention est de vérifier des lignes client ISDN sans avoir besoin d'envoyer du personnel chez le client ou au bureau central.

Dans le système décrit dans ce brevet américain no. 4,998,240, le lien qui relie les équipements, qui doit être vérifié, est aussi utilisé pour envoyer les signaux de commande concernant les procédures de vérification à réaliser. Ainsi, si le lien est brisé ou ne peut transmettre efficacement le signal de données, alors il est impossible d'effectuer une procédure de vérification. Aussi, la nature des procédures de vérification qui sont effectuées est très spécifique et vise à vérifier la transmission de protocoles et l'intégrité des données. Ces procédures de vérification ne procurent aucune information sur la qualité du lien lui- même. De plus, ce système peut seulement être utilisé avec de l'équipement AT&T (marque de commerce) et utilise des fonctions déjà programmées dans le système. Également connu dans l'art antérieur, il existe le brevet américain no. 4,055,808 délivré le 25 octobre 1977, nommant Jerry L. HOLSINGER et al. comme inventeurs. Dans ce brevet, on décrit une unité de vérification de station intermédiaire destinée à être branchée à une unité de

communication située à une station intermédiaire dans un système de communication de données. Le système comprend en outre des premiers moyens de transmission de données pour envoyer des signaux à des ports situés en amont du système de communication à partir d'une station centrale. L'unité de communication comprend en outre un port situé en aval pour envoyer des signaux à d'autres moyens de transmission de données qui sont branchés à des stations éloignées. Les signaux ont des premières caractéristiques au port situé en amont et des secondes caractéristiques au port situé en aval. Le système de communication de données comprend en outre une unité centrale de vérification située à la station centrale pour transmettre un signal de vérification et de contrôle ayant une partie représentative d'une commande et une partie représentative d'une adresse. Le système utilise un protocole de commande par adressage à l'intérieur du signal de vérification et de contrôle circulant à l'intérieur du système de communication de données. Avec un tel système, il n'est pas possible de vérifier les circuits qui sont hors d'usage au point où ils ne peuvent recevoir ou transmettre le signal de vérification et de contrôle. De plus, il n'y a aucune communication directe entre la station centrale et les stations éloignées.

Également connus dans l'art antérieur, il existe les brevets américains suivants qui décrivent différentes méthodes et appareillages de vérification d'un système de communication:

5,027,343 (CHAN et al.) 4,945,554 (KRAUSE et al.) 4,937,851 (LYNCH et al . ' )

4,918,623 (LOCKITT et al.) 4,682,347 (LYNCH) ' 4,611,101 (WALTER et al.) 4,419,751 (CHOLAT-NAMY et al.)

4,076,961 (HOLSINGER er al.)

Un des inconvénients que l'on retrouve dans tous ces appareils et méthodes de vérification réside dans le fait que si un lien de communication du système est complètement hors d'usage ou déficient au point où il ne peut pas transmettre une information, alors il n'est pas possible d'effectuer une procédure de vérification sur le lien.

Ainsi, un objectif de la présente invention est de produire un appareil et une méthode de vérification par lesquelles un utilisateur peut choisir et vérifier des liens de communication d'un système de communication même si le lien de communication choisi est complètement hors d'usage ou très abîmé. Les objets, avantages et autres caractéristiques de la présente invention deviendront plus apparents à la lecture de la description suivante qui ne se veut pas restrictive, d'un mode de réalisation préféré donné à titre d'exemple seulement avec référence aux dessins ci-joints.

RÉSUMÉ DE L'INVENTION

La présente invention vise appareil de vérification par lequel un utilisateur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées , ledit appareil de vérification étant situé à ladite station intermédiaire, chacune desdites stations éloignées comprenant un autre lien de communication pour établir un second système de communication entre ladite station intermédiaire et lesdites stations éloignées, chacune desdites stations éloignées comprenant un module de contrôle relié au second système de communication à partir duquel des signaux de commande peuvent être reçus, chacun

desdits modules de contrôle étant aussi relié aux liens de communication correspondants du premier système de façon à ce qu'au moins un desdits liens dudit premier système de communication puisse être choisi entre ladite station intermédiaire et une desdites stations éloignées; ledit appareil de vérification comprenant:

- un premier lien de communication pour recevoir et transmettre des signaux générés â partir d'un ordinateur, ledit premier lien de communication faisant partie dudit second système de communication;

- une unité de contrôle reliée audit premier lien de communication pour recevoir et transmettre des signaux;

- un second lien de communication relié à ladite unité de contrôle pour recevoir et transmettre des signaux, ledit second lien de communication faisant partie dudit second système de communication de façon à ce qu'une communication puisse être établie entre ledit ordinateur et lesdites stations éloignées via ladite station intermédiaire par l'entremise dudit second système de communication; - un dispositif pouvant générer et mesurer un signal, relié à ladite unité de contrôle, ledit dispositif ayant une entrée pour recevoir un signal à être mesuré et une sortie pour générer un signal prédéterminé;

- un système de commutation contrôlé par ladite unité de contrôle et reliant les liens de communication correspondants dudit premier système de communication avec ledit dispositif pouvant générer et mesurer un signal, par lequel un des liens de communication correspondants dudit premier système de communication peut être choisi par ladite unité de contrôle et relié auxdites entrée et sortie dudit dispositif pouvant générer et mesurer un signal; ainsi ledit utilisateur peut choisir au moins un desdits liens dudit premier système de communication entre ladite station intermédiaire et une desdites stations éloignées en envoyant

des signaux de commande via ledit second système de communication, et contrôler une procédure de vérification sur ledit lien qui a été choisi par l'utilisateur via ledit second système de communication. La présente invention vise aussi une méthode par laquelle un utilisateur muni d'un ordinateur peut choisir et vérifier des liens de communication d'un premier système de communication qui relie une station intermédiaire à des stations éloignées, ladite station intermédiaire étant munie d'un appareil de vérification équipé d'un premier lien de communication d'un second système de communication pour communiquer avec ledit ordinateur, et un second lien de communication dudit second système de communication pour communiquer avec lesdites stations éloignées, ladite méthode comprenant les étapes suivantes:

(a) établir une première connexion entre ledit ordinateur et ladite station intermédiaire à partir de commandes provenant dudit ordinateur par ledit second système de communication; (b) établir une deuxième connexion entre ladite station intermédiaire et une desdits stations éloignées qui a été choisie par ledit utilisateur à partir de commandes provenant dudit ordinateur par le second système de communication pour choisir un lien de communication du premier système de communication entre ladite station intermédiaire et la station éloignée qui a été choisie;

(c) envoyer des signaux de commande audit appareil de vérification via ladite première connexion pour initier une procédure de vérification sur ledit lien de communication qui a été choisi à partir de commandes provenant dudit ordinateur; et

(d) transmettre des résultats de ladite procédure de vérification dudit appareil de vérification audit ordinateur via ladite première connexion, ainsi un utilisateur peut

choisir un lien de communication particulier dudit premier • système de communication par l'étape (b) , initier ladite procédure de vérification sur ledit' lien particulier par l'étape (c) et être informé du résultat de ladite procédure 5 de vérification par l'étape (d) .

j BRÈVE DESCRIPTION DES DESSINS

La figure 1 est un schéma bloc illustrant un 10 système de communication comprenant les moyens nécessaires pour réaliser la méthode selon la présente invention.

La figure 2 est un schéma bloc illustrant avec plus de détails l'appareil de vérification montré à la figure 1. 15 La figure 3 est un schéma bloc illustrant avec plus de détails le dispositif pouvant générer et mesurer un signal, montré à la figure 2. La figure 4 est un schéma bloc illustrant avec plus de détails le module de contrôle d'une des stations 20 éloignées montrées à la figure 1.

La figure 5 est un schéma bloc illustrant avec plus de détails une autre réalisation du module de contrôle d'une des stations éloignées montrées à la figure 1.

25 DESCRIPTION DÉTAIT.T.râ T.V.- DESSINS

En se référant maintenant à la figure 1, on montre un appareil de vérification 2 par lequel un utilisateur situé à un endroit éloigné 4 peut choisir et vérifier des

30 liens de communication 6 d'un * premier système de communication qui relie une station intermédiaire 8 à des stations éloignées 10. Chaque lien de communication est fait de deux fils de transmission et de deux fils de réception. L'appareil de vérification 2 est situé à la station

intermédiaire 8. Chacune des stations éloignées 10 comprend un modem 12 pour établir un second système de communication entre la station intermédiaire 8 et les stations éloignées 10. Chacune des stations éloignées 10 comprend un module de contrôle 14 pour recevoir des signaux de commande de son modem correspondant 12. Les modules de contrôle 14 sont branchés aux liens de communication correspondants 6 de façon à ce qu'au moins un des liens de communication 6 puisse être choisi entre la station intermédiaire 8 et une des stations éloignées 10.

En se référant maintenant aux figures 1 et 2, l'appareil de vérification 2 comprend un premier modem 18 pour recevoir et transmettre des signaux générés à partir d'un ordinateur 22 équipé avec un modem 21 situé à un endroit éloigné 4. Le premier modem 18 fait partie du second système de communication. L'appareil de vérification comprend une unité de contrôle 24 branchée au premier modem 18 pour recevoir et transmettre des signaux. Un second modem 28 est prévu. Il est branché à l'unité de contrôle 24 pour recevoir et transmettre des signaux. Le second modem 28 fait partie du second système de communication de façon à ce qu'une communication puisse être établie entre l'endroit éloigné 4 et les stations éloignées 10 via la station intermédiaire 8 au moyen des modems 12 du second système de communication.

Un dispositif 30 pouvant générer et mesurer un signal est prévu. Il est branché à l'unité de contrôle 24, et comprend des entrées 32 et 33 pour recevoir un signal destiné à être mesuré et une sortie 34 pour générer un signal prédéterminé.

L'appareil de vérification 2 comprend aussi un système de commutation 36 contrôlé par l'unité de contrôle 2.4 pour inter-relier les liens de communication correspondants 6 du premier système de communication avec le

dispositif 30 pouvant générer et mesurer un signal, par lequel un des liens de communication correspondants 6 peut être choisi par l'unité de contrôle 24 et branché aux entrées 32 et 33 et à la sortie 34 du dispositif 30 pouvant générer et mesurer un signal, ainsi l'utilisateur peut choisir au moins un des liens 6 entre la station intermédiaire 8 et une des stations éloignées 10 en envoyant des signaux de commande via le second système de communication, et contrôler une procédure de vérification sur le lien 6 qui a été choisi par l'utilisateur via le second système de communication.

En se référant maintenant plus spécifiquement aux figures 2 et 3, les entrées 32 et 33 du dispositif 30 pouvant générer et mesurer un signal comprennent une entrée intermédiaire 32 pour recevoir un branchement intermédiaire du lien de communication qui a été choisi et une entrée directe 33 pour recevoir le lien de communication qui a été choisi. Le dispositif 30 pouvant générer et mesurer un signal comprend un premier transformateur de couplage 40 ayant une entrée, branchés à l'entrée directe 33, des premier et second amplificateurs 44 et 46 ayant des hautes impédances d'entrées, branchés respectivement à une sortie du transformateur 40 et à l'entrée intermédiaire 32, un premier dispositif de commutation 48 ayant deux entrées branchées respectivement aux sorties des premier et second amplificateurs 44 et 46, un second dispositif de commutation 50 ayant une entrée 52 branchée à une sortie du premier dispositif de commutation 48, et un troisième amplificateur 52 ayant une haute impédance d'entrée, branché à la sortie du second dispositif de commutation 50. Le dispositif 30 pouvant générer et mesurer un signal comprend aussi un second transformateur de couplage 56 ayant une entrée branchée à une sortie du troisième amplificateur 52, et une sortie branchée à la sortie 34 du dispositif 30 pouvant

générer et mesurer un signal; une unité de mesure 60 ayant une entrée branchée à la sortie du premier dispositif de commutation 48; un générateur de signal 62 ayant deux sorties branchées respectivement à des entrées du second dispositif de commutation 50; et un microprocesseur 64 ayant une entrée branchée à l'unité de contrôle 24, et différentes connexions qui ne sont pas montrées sur la figure 3, avec les dispositifs de commutation 48 et 50, l'unité de mesure 60 et le générateur de signal 62. Ainsi, l'utilisateur peut contrôler une procédure de vérification en envoyant des signaux de commande au microprocesseur 64 via le second système de communication.

Il est important de réaliser que le second système de communication est constitué de lignes téléphoniques et de modems. Dans la figure 3, la connexion entre le microprocesseur 64 et l'unité de contrôle 24 est faite par un lien RS 232. La sortie du premier dispositif de commutation 48 est aussi reliée à une entrée du second dispositif de commutation 50 par un amplificateur 49 ayant un gain de 16 db. Le générateur de signal 62 est un générateur programmable d'ondes sinusoïdales ayant une première sortie 61 de 0 db et une second sortie 63 de -8 db. L'unité de mesure 60 comprend un convertisseur analogue à digitale 65 de 8 bits et un convertisseur RMS AC/DC 67. Les transformateurs de couplage 40 et 56 sont des transformateurs 1:1. Le générateur 62 est capable de générer un signal d'onde sinusoïdale ayant une fréquence variant de 300 à 3000 Hz à 0 db et -8 db. Le convertisseur 67 convertit un signal alternatif en signal DC lequel est la valeur RMS du signal alternatif.

En se référant maintenant à la figure 4, on montre un des modules de contrôle qui est situé à chacune des stations éloignées. Ce module de contrôle 14 est branché au modem correspondant 12. Ce module de contrôle 14 comprend un

premier dispositif de commutation 70 ayant une entrée branchée en série à la ligne réceptrice du lien de communication correspondant 6; un premier transformateur de couplage 71 ayant une entrée branchée à une sortie du premier dispositif de commutation 70; un second dispositif de commutation 72 ayant une entrée branchée à une sortie du premier transformateur de couplage 71; un troisième dispositif de commutation 74 ayant une entrée branchée à une sortie du second dispositif de commutation 72; un second transformateur de couplage 76 ayant une entrée branchée à une sortie du troisième dispositif de commutation 74; un quatrième dispositif de commutation 78 ayant une entrée branchée à une sortie du second transformateur de couplage 76, et une sortie branchée en série avec la ligne de transmission du lien de communication correspondant 6; une unité de mesure 80 ayant une entrée branchée à la sortie du second dispositif de commutation 72; et un générateur de signal 82 ayant une sortie branchée à une entrée du troisième dispositif de commutation 74. Le module de contrôle 14 comprend aussi un microprocesseur 84 branchée au modem correspondant 12, et différentes connexions qui ne sont pas montrées sur cette figure 4, avec les dispositifs de commutation 70, 72, 74 et 78; l'unité de mesure 80 et le générateur de signal 82, par lequel 1,utilisateur peut contrôler une procédure de vérification à une des stations éloignées 10 en envoyant des signaux de commande au microprocesseur correspondant 84 via le second système de communication.

Le module de contrôle 14 comprend aussi un cinquième dispositif de commutation 86 ayant une entrée branchée en parallèle avec la ligne de réception du lien de communication correspondant 6; un sixième dispositif de commutation 88 ayant une entrée branchée à une sortie du cinquième dispositif de commutation 86, et une sortie

branchée à la ligne de transmission du lien de communication correspondant 6; et un branchement intermédiaire 90 ayant une entrée branchée à la sortie du cinquième dispositif de commutation 86, et une sortie branchée à une entrée du second dispositif de commutation 72. Le microprocesseur 84 a aussi différentes connexions qui ne sont pas montrées sur cette figure 4, avec les cinquième et sixième dispositifs de commutation 86 et 88, par lequel l'utilisateur peut contrôler des procédures de vérification additionnelles aux stations éloignées 10 en envoyant des signaux de commande au microprocesseur correspondant 84 via le second système de communication.

En se référant maintenant à la figure 5, on peut voir un autre mode de réalisation d'un des modules de contrôle qui sont disposés dans les stations éloignées. Il est à noter que la portion de ce circuit qui se situe entre le dispositif de commutation 100 et le modem 12 peut aussi être utilisé pour remplacer le dispositif pouvant générer et mesurer un signal montré à la figure 3. Ce module de contrôle 14 est branché au modem correspondant 12. Ce module de contrôle 14 comprend un premier dispositif de commutation 100 ayant une entrée à quatre fils branchée avec un des liens de communication correspondants 6. Chaque lien de communication 6 comprend deux fils de réception et deux fils de transmission. Le dispositif de commutation 100 comprend aussi une entrée à deux fils 102, et une première sortie à deux fils 104. Un premier transformateur de couplage 108 a une sortie branchée à l'entrée à deux fils 102. Un second transformateur de couplage 110 a une entrée branchée à la première sortie à deux fils 104. Un amplificateur à gain variable 112 a une sortie branchée à une entrée du premier transformateur 108 via une résistance 114 de 600 ohms. Un second dispositif de commutation 116 a une sortie branchée

à une entrée de l'amplificateur a gain variable 112. Un générateur de signal 118 a une sortie branchée à une entrée d'un second dispositif de commutation 116. Un troisième dispositif de commutation 120 à une première entrée branchée à l'entrée du premier transformateur 108 via un circuit tampon 122, et une seconde entrée branchée à une sortie du second transformateur 110. Un second amplificateur à gain variable 124 a une entrée branchée à une sortie du troisième dispositif de commutation 120. Un quatrième dispositif de commutation 126 a une entrée branchée à une sortie du second amplificateur 124, et une sortie branchée à une entrée du second dispositif de commutation 116.

Le module de contrôle 14 comprend aussi une unité centrale de traitement 128 branchée au modem correspondant 12, et différentes connexions qui ne sont pas montrées sur cette figure 5, avec les dispositifs de commutation 100, 116, 120 et 126, les amplificateur 112 et 124, et le générateur de signal 118, par lequel l'utilisateur peut contrôler une procédure de vérification à une des stations éloignées en envoyant des signaux de commande à l'unité centrale de traitement correspondante 128 via le second système de communication.

Le module de contrôle 14 comprend en outre un amplificateur différentiel 130 branché à une seconde sortie 106 du premier dispositif de commutation 100, et une sortie branchée à une seconde entrée du quatrième dispositif de commutation 126; un détecteur d'onde sinusoïdale 132 ayant une entrée branchée à la sortie du quatrième dispositif de commutation 126, et une sortie branchée à une entrée de l'unité centrale de traitement 128; et un filtre anti-alias 134 ayant une entrée branchée à une sortie du quatrième dispositif de commutation 126, et une sortie branchée à une entrée de l'unité centrale de traitement 128.

Une résistance 140 de 600 ohms est branchée à la

sortie du transformateur 110. Les amplificateurs à gain variable 112 et 124 ont des gains qui sont contrôlés par l'unité centrale de traitement 128. Au moyen du dispositif de commutation 126, l'unité centrale de traitement 128 peut choisir différents types d'entrées de signal. Au moyen du dispositif de commutation 120, l'unité centrale de traitement 128 peut effectuer une mesure normale du lien ou une mesure de bruit dudit lien. Le filtre 134 est requis pour effectuer un échantillonnage qui est réalisé par l'unité centrale de traitement. Le détecteur d'onde sinusoïdale 132 est requis pour convertir son signal d'entrée en un signal d'onde carrée. Le circuit tampon 122 est requis pour mesurer le bruit sur le lien choisi. L'amplificateur 130 est requis pour effectuer une mesure en pont sur le lien choisi.

Avec l'équipement montré dans ces figures 1 à 5, une méthode selon la présente invention peut être réalisée, par laquelle un utilisateur muni d'un ordinateur 22 équipé d'un modem 21, situé à un endroit éloigné 4, peut choisir et vérifier des liens de communication 6 d'un premier système de communication qui relie une station intermédiaire 8 à des stations éloignées 10. La station intermédiaire 8 est munie d'un appareil de mesure 2 équipé d'un premier modem 18 pour communiquer avec l'endroit éloigné 4, et d'un second modem 28 pour communiquer avec les modems 12 situés aux stations éloignées 10. La méthode comprend les étapes qui consistent à (a) établir une première connexion entre le modem 21 situé à l'endroit éloigné 4 et le premier modem 18 de la station intermédiaire 8, à partir de commandes provenant de l'ordinateur 22; (b) établir une seconde connexion entre le second modem 28 de la station intermédiaire 8 et le modem 12 d'une des stations éloignées 10 qui aura été choisie par l'utilisateur, à partir de commandes provenant de l'ordinateur 22 pour choisir un lien de communication du

premier système de communication entre la station intermédiaire 8 et la station éloignée qui aura été choisie; (c) envoyer des signaux de commande à l'appareil de vérification 2 via la première connexion pour initier une procédure de vérification sur le lien de communication qui a été choisi, à partir de commandes provenant de l'ordinateur 22; et (d) transmettre les résultats de la procédure de vérification depuis l'appareil de vérification 2 à l'ordinateur 22 via la première connexion. Ainsi, un utilisateur peut choisir un lien de communication particulier du premier système de communication au moyen de. l'étape (b) , initier une procédure de vérification sur le lien particulier qui a été choisi au moyen de l'étape (c) et être informé des résultats de la procédure de vérification au moyen de l'étape (d) .

La méthode peut comprendre en outre une étape consistant à envoyer des signaux de commande à partir de l'ordinateur 22 à la station intermédiaire 8 via la première connexion,et à la station éloignée qui a été choisie via les première et seconde connexions, pour temporairement débrancher le lien de communication qui a été choisi, du premier système de communication au moyen de dispositifs de commutation présents aux stations, de manière à ce que la procédure de vérification effectuée durant l'étape (c) puisse être une procédure en circuit fermé.

Chacune des stations éloignées 10 est munie d'un module de contrôle 14 branché entre le modem correspondant 12 et les liens de communication correspondants 6. La méthode peut comprendre en outre une étape consistant à envoyer des signaux de commande au module de contrôle 14 de la station éloignée qui a été choisie par l'entremise des première et seconde connexions pour initier une procédure de vérification à partir de la station- éloignée qui a été choisie sur le lien de communication qui a été choisi, à

1 <~ partir de commandes provenant de l'ordinateur 22.

Le présent système et la méthode peuvent être spécifiquement adaptés pour vérifier les systèmes de communication à quatre fils qui sont généralement utilisés pour transmettre la voix humaine et des données. Avec le présent système, il est possible de vérifier les liens d'un système de communication en mesurant le niveau de décibels d'un signal sur chacun des liens, en générant différents signaux de tonalité sur chacun des liens, et en formant un circuit en boucle fermée avec un lien pour réaliser une procédure de vérification en boucle fermée. Toutes ces. opérations peuvent être initiées à partir d'un micro¬ ordinateur situé à un endroit où une ligne téléphonique à tonalité est disponible et avec les dispositifs nécessaires pour brancher le micro-ordinateur à la ligne téléphonique à tonalité.

Le micro-ordinateur peut être un micro-ordinateur IBM (marque de commerce) ou un micro-ordinateur IBM compatible muni d'un microprocesseur 80286 et d'un moniteur monochrome ou couleur de type V.G.A. Il s'est avéré qu'un moniteur couleur est préférable. Un modem intégré ou externe capable de communiquer à une vitesse de 2400 bauds par seconde et qui est compatible avec HAYES est recommandé. Un chargeur de disquettes 3 1/2 ou 5 1/4 doit être fourni pour charger le logiciel. L'ordinateur devrait être aussi muni d'un adapteur graphique.

La station intermédiaire est munie de deux modems ayant des caractéristiques similaires à celui mentionné ci- dessus. Ces modems sont branchés respectivement à des lignes téléphoniques différentes. L'appareil de vérification de la station intermédiaire est branché à un système de commutation fait de plusieurs banques de circuits, qui sont respectivement équipées d'un adapteur de ligne et d'un décodeur d'adresse. Les liens qui doivent être vérifiés

* i i~ passent à travers chacune des banques au moyen de branchements appropriés. Le module de contrôle de chacune des stations éloignées est équipé d'un modem fonctionnant en mode réponse et de plusieurs interfaces de lignes branchées aux liens qui doivent être vérifiés.

En opération, à partir d'un menu de communication, l'utilisateur peut choisir le lien à vérifier. Un annuaire contenant des liens pré-programmés permet cette option. En utilisant l'option téléphone, l'utilisateur entre des commandes dans le micro-ordinateur de façon à effectuer un appel via son modem à l'appareil de vérification de la station intermédiaire. Cette appareil de vérification qui est normalement réglé dans un mode attente reçoit l'appel et confirme la réception au micro-ordinateur. Alors, le micro- ordinateur envoie des signaux de commande à l'appareil de vérification de façon à ce qu'il sélectionne les liens choisis par l'utilisateur et appelle, via son second modem 28 et une autre ligne téléphonique, la station éloignée correspondant au lien qui a été choisi. Le module de contrôle de la station éloignée répond à l'appel, sélectionne le lien à être vérifié et confirme le tout. L'appareil de vérification de la station intermédiaire confirme alors à l'ordinateur que tout est prêt pour une procédure de vérification. L'utilisateur peut alors effectuer différentes opérations pour identifier un problème sur la ligne qui a été choisie ou simplement prendre des mesures sur le lien de communication qui a été choisi de façon à évaluer la qualité de ce lien de communication. L'utilisateur peut aussi effectuer un balayage en fréquence sur le lien de communication choisi pour obtenir une courbe représentative de la réponse en fréquence du lien choisi à des intervalles de 100 Hz entre 300 et 3000 Hz. Lorsque les procédures de vérification sont complétées, l'utilisateur, au moyen d'un menu de communication, met fin aux différentes

communications établies avec l'équipement. Toutes les fonctions qui ont été activées retournent alors dans leur mode d'opération en attente. Le système est alors prêt pour effectuer une vérification d'un autre lien de communication. Tel que mentionné précédemment, l'utilisateur peut choisir et effectuer une procédure de vérification d'un lien de communication au moyen d'un menu de communication produit par un logiciel emmagasiné dans le micro-ordinateur, ce logiciel ayant été écrit pour réaliser ce menu de communication.

Un relevé de chacune des commandes de ce logiciel suit.

Sinclude <stdio-h> Sinclude <stdlib.h> Sinclude <ctype.h> Sinclude <dos.h> Sinclude <graph.h> void fblank(int.int.int) ; union REGS regsr unsigned char *map = (char*) OxBOOOOOOO; int page = Or char stak[360001 ; union ( s ruct ( unsigned fore:3; unsigned inte:1; unsigned back:3; unsigned blink:l;

) b; unsigned i; 1 attr;

void fblank (int x.int y,int len) [ int ctr; att_reverse() ; c_move (x.y) ; for (ctr=0;ctr<=len-l;ctr++)

( c_move (x.y+ctr) ; put_car (' ') ;

J reset_att() ;

unsigned mode = 2; unsigned colon = 1; unsigned ligne = 1; int fore = 7; int back = 0; int index = 0r int indexl = 1; int attc = 7; int curseur = 1; char buf[80] .- set_mode (mod) char mod [2] ; l switch( mod[0] ) [

FEUILLE DE REMPLACEMENT-

case 'H' case 'h' map = (char*) OxBOOOOOOO; break; case 'C case 'c' map = (char*) 0xB8000000; break; case 'E * case 'e' map = (char*) OxBBOOOOOO; brea ; erase() ; reset at () ;

c_move(line,col) int line,col; regs.h.ah = 2; regs.h.dh = line-1; regs.h.dl = col-1; int86( 0x10 , ®s ®s ) ligne = line; colon = col; index = (colon-l)*2 + (ligne-1) *160; index1= index + 1;

) clr_c() { union REGS r; r.h.ah =1; r.h.ch = -1; r.h.cl =-1; int86(0xl0,&r,t-r) ;

FEUILLE DE REMPLACEMENT

put_car(c) int c; { map[ index ] = c; map[ indexl 1 = attr. i; attc = attr. i; } lit_car() l retur ( ma [ index ] ) ; 1 put_cars (lign. col, car, n) int lign, col, car, n; t int l.c. j ; for(l=lign,c=col,j=0 ; j<n ; j++,c++) ( c_move(l,c) ; put_car(car) ; } ) put_cart(c) int c; ( put_car(c) ; c_move(ligne,colon+1) ; ] erase ( ) { int ci; for(i=0 ;i<4096i=i+2) { map(i] = ' ' ; map[i+l] = attr.i;

)

} reset_att ( ) ( set_fore(7) ; set_back(0) ; attr.b.blink =0;

) att_bold() ( attr.b.in e = 1; 1

FEUILLE DE REMPLACEMENT

att_soul() { attr.b.fore = 1; attr.b.back = 0;

att_blink() { attr.b.blink = 1; ) att_reverse() ( se _fore(0) ; set_back(7) ;

) set_fore(i) int i; ( if (i>7) { attr.b.inte = 1; i -=8; } else attr.b.inte≈O; attr.b.fore = i;

) set_back(i) int i;

{ attr.b.back = i;

} c_print(line,col.str) int line,col; char str[) ; { int i,ce- index = (col-l)*2 + (line-l)*160; for(i=0,co-=col; str[i]!=*\0' ; i++,co++) ( mapl index ] = str[il ; mapï index+l]= attr.i; index = index +2; ) )

FEUILLE DE REMPLACEMENT

c_box(yl, xl, y2. x2, type) int yl,xl,y2,x2. type ; ( int x. y, line. col, index; int nx. ny.nxl. πyl; nx = x2-xl ; ny = y2-yl; nxl = πx-1; nyl = ny-1; if( type == 1) goto B0X2; for( index = (xl)*2 + (yl-l)*160. x=0; x<nxl ; x++,index = index+2)

{ map[index) = OxCD; map[index-i-1] = attr.i;

} for( index = (xl)*2 + (y2-l)*160, x=0; x<πxl ; x++,index = index+2)

{ map [index] = OxCD; map [index+l] = attr.i ;

) for(y=yl+l ; y<y2 ; y++)

( index = (xl-l)*2 + (y-l)*160; map[index] = Oxba ; index++; map[index] = attr.i; index++; or(x=xl+l ; x<x2 ; x++)

[ map[index] = ' ' ; index++; map[index] = 7; index++;

) map[index] = Oxba; index++; map[index] = attr.i; J index = (xl-1) *2 + (yl-1) *160; map[index] = Oxfe; map[index*1] = attr.i; index = (x2-l) *2 + (yl-l)*160; map[index] ≈ Oxfe; map[index+l] = attr.i; index = (xl-l)*2 + (y2-l)*160; map[index] = Oxfe; map[index+ll = attr.i; index = (x2-l)*2 + (y2-l)*160; map[index] ≈ Oxfe; map[index+l] = attr.i;

FEUILLE DE REMPLACEMENT

return(O) ;

BOX2 : ; for(y=yl ; y<≈y2 ; y++) ( index = (xl-l)*2 + (y-l)*160; for(x=xl ; x<=x2 ; x++)

{ map [index] = ' ',- index++; map [index] = attr.i; index++;

) )

int point, nfen=0; int poin(40) ; f _box ( ) { hile (nfen) recu_box ( ) ; } save_box (y 1 , l , y 2 , x2 ) int yl,xl,y2,x2; l int i, j .index, nx; stak[point] = xl; staklpoint+1] = yl; stak(point+2] = x2; staklpoint+3] = y2; poinînfen] = point; nfen++; point = point+4; nx ≈ (x2-xl+l) *2; for(i=yl ; i<=y2 ; i++)

( index = (xl-l)*2 + (i-l)*160; memcpy(&stak[point] ,&map[index] ,nx) point = point+nx;

) ) recu_box() { int i,j .index,nx; int xl.yl,x2,y2; n en—;

FEUILLE DE REMPLACEMENT

if (nfen < 0 ) printf ("\007"); eraseO ; c_move(l,l) ,- printf ("Erreur de recu_box code=%d" .nfen) ; exit(nfeπ) ; point = poin[nfen] ; xl = stak[point] ; yl = stak[point+l] ; x2 = stakïpoint+2] ; y2 = stak[polnt+3Ï .- point = point+ ; nx = (x2-xl+l) *2; for(i=yl ; i<=y2 r i++)

[ index = (xl-l)*2 + (i-l)*160; memcpy(sma [index] ,&sta [point] ,nx) ; point ≈ point+nx;

] point ≈ poin[nfen] ;

) scroll (int xl.int yl.int x2,int y2, int nb.int sen) l union REGS r; r.h.ah = ( 5 + sen) ; r.h.al = nb; r.h.bh = attr.i; r.h.ch = xl; r.h.cl = yl; r.h.dh = x2; r.h.dl = y2; int86(0x10.fir.sr) ; )

vlinednt xl r int x2,int col. int t) [ int a.br int Cl,c2.c3.c4.c5.c6; if (t == 1)

( cl = 196; c2=179; c3=218; c4=191; c5=192; c6=217; ) else ( cl = 205; c2=186; c3=201; c4=187 ; c5=200; c6=188; 1 for (a≈(xl-l) *160;a<=(x2-l) *160;a+=160) [ map[a+(col-l) *2] = c2;

FEUILLE DE REMPLACEMENT

map[a+l+(col-l) *2] = attr.i; ) ) hline(int xl.int x2,int col, int t) { int a,b; int Cl,c2,c3,c4,c5,c6; if (t = * = 1) l cl = 196; c2=179; c3=218; c4=191; c5=192; c6=217; ) else l cl = 205; c2=186; c3=201; c4=187; c5=200; c6=188; ) for (a=(xl-l)*2;a<=(x2-l) *2;a+=2) map[a+(col-l) *160] = cl; map[a+l+(col-l) *160] = attr.i; )

indow (yl,xl,y2,x2,nom,db) int yl,xl,y2,x2,db; char nom[] ;

int x,y,line,col,index; int nx.ny.nxl.nyl; int Cl,c2,c3,c4.c5,c6; if (db == 1) ( cl = 196; c2=179; c3=218; c4=191; c5=192; c6=217;

) else

( cl = 205; c2=186; c3=201; c4=187; c5=200; c6=188; )

nx = x2-xl; ny = y2-yl; nxl = nx-1; nyl = ny-1; if (nyl == 999)

(

)

for( index = (xl)*2 + (yl-l)*160, x=0; x<nxl ; x++,index = index+2)

FEUILLE DE REMPLACEMENT

( map[index] = cl; map[index+l] = attr.i;

1 for( index = (xl)*2 + (y2-l)*160, x=0; x<nxl ; x++,index = index+2)

( map[index] = cl; map[index+l] = attr.i; ) for(y=yl+l ; y<y2 ; y++) ( index = (xl-l)*2 + (y-l)*160; map[index] = c2 index++; maptindexl = a tr.i; index++; for(x=xH-l ; x<x2 ; x++)

[ map[index] = ' * ; index++; map[index] = attr.i; index++;

1 map[index] = c2; index++; map[index] = attr.i; ] index = (xl-1) *2 + (yl-l) *160; map [index] = c3 ; map[index+l] = attr.i; index = (x2-l) *2 + (yl-l) *160; map [index] = c4 ; map[index+l] = attr.i; index = (xl-l) *2 + (y2-l) *160; map [index] = c5; map [index-*- 1] = attr. i; index = (x2-l) *2 + Cy2-1) *160; map [index] = c6; map[index+l] = attr.i; att_bold() ; c_print (yl, (xl+( (x2-xl) /2) ) -(strlen(nom) /2) .nom) ; reset_att() ; ]

title(int y, int x .char *message,char *message2.int pos.int pos2,int pos3, int pos4,int deçà) l

FEUILLE DE REMPLACEMENT

int car; int ctr; int px,py; px = ( (x+pos-U-1) *2; py = (y-i) *160; c_prin (y, ,message) ; c_print(y+l,x+deca,message2) ; for (ctr=pos;ctr<=pos2;ctr++)

{ px=((x+ctr-l)-l) *2; py=(y-D *160; map[px+py+l] = OxF; ) if (pos3!=0) for (ctr=pos3;ctr<=pos4;ctr++)

( px≈( (x+ctr-l)-l) *2; py=(y)*i60; map[px+py+1]=0xF; } c_move(y-1,x+strlen(message) ) ; if ( (car = lit_car())==196) /* - */ { c_move(y-1.x+strlen(message) ) ; put_car(194) ; ) c_move(y,x+strlen(message) ) ; put_car(179) ; c_move(y+1,x+strlen(message) ) ; put_car(179) ; if ( (x+strlen(message) ) !=80) { c_move(y+2,x+strlen(message) ) ; put_car(193) ; ]

) clean_ed (y1,xl,y2,x2) { int x,y; for (y=yl-l;y<=y2-l;y++) for (x=xl-l;x<=x2-l;x++) { map [y*160+x*2] = ' ' ; map [y* 160+x* 2+l] = attr . i ; ]

} rev_line (int line,int deb.int fin,int cl,int c2) I int att;

FEUILLE DE REMPLACEMENT

if (cl==15) cl=7; set_fore(c2) ; set_back(cl) ; for (att = (line-1) *160+(deb-l) *2;att-=(line-l)*160+(fin-l) *2;att+=2)

( map[att+l] = attr.i; )

int init_gcard() ( union REGS reg; int colorcard; reg.h.ah = 15; int86(0xl0,®,®) ; colorcard = (reg.h.al != 7); map = (char far *) (colorcard ? OxB8000000L : OxBOOOOOOOL) return (colorcard) ; ) void _cursoroff{) [ union REGS regs; regs.h.ah≈l; regs.x.ex = 0x2000; int86(0xl0,sregs.sregs) ; regs.h.ch = -1; regs.h.cl = -1; int86(0x10,sregs,®s) ;

void _cursoron() ( union REGS regs; regs.h.ah≈l; regs.h.ch = 7; regs. .cl = 8; int86(0x10,sregs,sregs) ;

1 infofchar *tltre,char 'data.int col,int co2) { unsigned int color = attr.i; save_box(20,10.25,70) ; set_fore(col) ; set_back(co2) ; indow(20,10.25,70.titre,l) ; c_print (22,12,data) ; attr.i = color;

FEUILLE DE REMPLACEMENT

) info2(char *titre,char *data,int col.int co2) ( unsigned int color = attr.i; save_box(8, 10,13,70) ; set_fore(col) ; set_back(co2) ; window(8,10,13,70,titre,l) ; c_print (10, 12,data) ; attr.i = color; ] menu_top(int y,int x ,char *message,int pos) { int car; int ctr; int px,py; px = ( (x+pos-l)-l) *2; py = (y-1)*160, c_print(y,x,message) ; px = ( (x+pos-l)-l) *2; py = (y - 1) * 160; map[px+py+l] = OxF; } int menu_bar (int yl.int xl.int y2,int x2,char* title.int mode,char * op [] ,int nb cl.int c2,int c3,int cl)

( unsigned color = attr.i; int compteur; int keb; int pos = 0; int search; int lnl; int ln2; set_fore(cl) ; set_back(c2) ; indow (yl,xl,y2,x2. itle.mode) ; set_fore(cl) ; set_back(c2) ; for (compteur≈O:compteur<=nb;compteur++)

{ lnl = strlen(op[compteur) ) ; ln2 = ((x2-xl)/2) + xl; c_print (yl+l+compteur,xl+2,op[compteur] ) ; } set_fore(c2) ; set_back(cl) ; pos = cl; lnl = strlen(op[0] ) ; c_print (yl+l+pos,xl+2,op[pos] ) ;

FEUILLE DE REMPLACEMENT

while ( (keb=clav() ) != 4) [ s ltch(keb) t case 280 : if (pos < nb) [ se _fore(cl) ; set_back(c2) ; lnl = strlen(op[pos] ) ; c_print (yl+l+pos.xl+2.op[posJ ) ; pos++; set_fore(c2) ; set_back(cl) ; lnl = strlen(op[pos]) ; c_print (yl+l+pos,xl+2,op[pos] ) ; ] break; case 272 : if (pos > 0) ( set_fore(cl) ; set_back(c2) ; lnl = strlen(op[pos] ) ; c_print (yl+l+poε.xl+2.op[pos] ) ; pos—; set_fore(c2) ; set_back(cl) ; lnl = strlen(op[pos] ) ; c_print (yl+l+pos.xl+2,op(pos] ) ; } break; case 13 : attr.i = color; return (pos) ;break; case 27 : attr.i≈ color; return(99) ;break;

1

)

) vline2(int xl.int x2,int col,int ch) ( int a.b; for (a= (xl-l) *160 ;a<=(x2-l) * 160 ;a+=160) ( map[a+(col-l) *2] = ch; mapïa+l+fcol-l) *2] = attr.i;

}

] hline2(int xl.int x2.int col, int ch)

FEUILLE DE REMPLACEMENT

( int a.b; for (a=(xl-l) *2;a<=(x2-l) *2;a+=2)

{ map(a+(col-l) *160] = ch; map[a+l+(col-l) *160] = attr.i;

} )

FEUILLE DE REMPLACEMENT

static unsigned Procld = 0; static char MULTI = 0; static char VSet = 0;

BTRV (OP . P0S_BLK. DATA_BUF . DATA_LEN, KEY_BUF , KEY_NUM) int OP ; char P0S_BLK[] ; char DΛTA_BUF [] ; int *DATA_LEN; char KEY_BUF [] ; int KEY_NUM;

[ struct REGVAL ( int ΛX, BX. CX. DX, SI. DI, CY; ) REGS;

Struct SEGREG ( Short ES. CS. SS, DS; ] SREGS;

Struct BTRIEVE_PΛRMS ( char *BUF_0FFSET; «ifndef LMODEL int BUF_SEG; Sendlf int BUF_LEN; char *CUR_0FFSET; ififndef LMODEL int CUR SEG; «endif char *FCB_0FFSET; Sifndef LMODEL int FCB_SEG; Sendif int FUNCTION; char *KEY_0FFSET; Sifndef LMODEL int KEYJSEG; «endif char KEY_LENGTH; char KEYJNUMBER; int *STAT_0FFSET; ttifndef LMODEL int STAT_SEG; «endif

FEUILLE DE REMPLACEMENT

int XFACE_ID; ) XDΛTΛ; int STAT = 0; if (SVSet) {

VSet = 1; REGS.AX = 0x3000; Sifdef WINDOWS int86 (0x21, SREGS. SREGS) ; Selse int86x (0x21, SREGS, SREGS. SSREGS); Sendif if ((REGS.AX S OxOOFF) >= 3) (

REGS.AX = _2FC0DE; Sifdef WINDOWS int86 (BTR2_INT. SREGS, SREGS); Selse intβôx (BTR2_INT, SREGS, SREGS, SSREGS) ; Sendif

MULTI = ((REGS.AX S OxFF) == 'M'); 1 } if (!MULTI) [

REGS.AX = 0x3500 + BTR_INT; Sifdef WINDOWS int86 (0x21, SREGS, SREGS); Selse int86x (0x21, SREGS, SREGS, SSREGS) ; Sendif if (REGS.BX != BTR_0FFSET) return (BTR_ERR) ; )

segread (SSREGS) ;

Sifndef LMODEL

XDATA.BUF_SEG = XDATA.CUR_SEG = XDATΛ.FCB_SEG

XDATA,KEY_SEG = XDATΛ.STAT_SEG = SREGS.SS; Sendif

XDATA.FUNCTION = OP; XDATA.STΛT_θFFSET = SSTΛT;

XDATA.FCB_θFFSET = P0S_BLK;

XDATA.CUR_θFFSET = P0S_BLK + 38;

XDATA.BUF_θFFSET = DATΛ_BUF;

XDATΛ.BUF_LEN . = *DΛTΛ_LEN;

XDATA.KEY OFFSET = KEY BUF;

FEUILLE DE REMPLACEMENT

= 255; XDATA.KEYJL.ENGTH XDATA.KEY_NUMBER = KEY_NUM; XDATA-XFACE ID = VARIABLE ID;

REGS.DX = (int) 6XDΛTA; SREGS.DS = SREGS.SS; if (!MULTI) Sifdef WINDOWS int86 (BTR_INT. SREGS, SREGS); Selse iπt86x (BTR_INT, SREGS, SREGS, SSREGS); Sendif else l while (1) (

REGS.AX = 1; if ((REGS.BX = Procld) != 0)

REGS.AX = 2; REGS.AX += _2FC0DE; Sifdef WINDOWS int86 (BTR2_INT. SREGS. SREGS) ; «else int86x (BTR2_INT. SREGS. SREGS, SSREGS); Sendif if ((REGS.AX S OxOOFF) == 0) break; Sifndef WINDOWS

REGS.AX = 0x0200; int86x (0x7F. SREGS, SREGS, SSREGS); «endif ) if (Procld == 0) Procld ≈ REGS.BX; ]

*DATA_LEN = XDATA.BUF_LEN; return (STΛT) ;

]

FEUILLE DE REMPLACEMENT

/*** MAITRE.C ***/ Sinclude "samdi.h" extern int col, co2, co3, co4, co5, co6, co7, coθ; extern int ONLINE; int MgenO = 0; int Mgenβ = 0; int MloopO = 0; int Mloopl6 ≈ 0; int Mponttx = 0; int Mpontrx = 0; int Madap = 0; char Mrep[2] ; / int Metat = 0; int Mlect = 0; menu_maitre()

( char *option[8] ; int choix; option10] = "Générateur 0 dbm"; option[1] = "Générateur -8 dbm"; option(2) = "Loopback 0 db" ; option[3] = "Loopback 16 db"; option[4] = "Mesure en pont - Tx"; option(5) = "Mesure en pont - Rx"; option[6] ≈ "Mesure terminée"; option[7] = "Reset"; save_box(2,19,11,42) ; set_fore(col) set_back(co2) ; menu_top(1,19," ocal",1) ; reset_att() ; choix = menu_bar(2,19, 11,42,"", 1.option,7,co3.co4,co5,0) recujbox() ; if(!ONLINE) statut("Aucun lien actif!"); else ( switch(choix) ( case 0: gen_maitre(0) ; break; case 1: gen_maitre(-8) ; break; case 2: loopback_maitre(0) ; break; case 3: loopback_maitre(16) ;

FEUILLE DE REMPLACEMENT

break; case 4: pont_maitre_t () ; break; case 5: pont_maitre_rx() ; break; case 6: adapte_maitre() ; break; case 7: reset_maitre() ; break; case 99: break; ) ] set_fore(co6) -set_back(co5) ; menu_top(1,19. "Local"»1) ; reset_att() ; ] gen_maitre(int niveau) ( if(niveau == 0) t if(IMgenO) (

Metat = commande [S0",Mrep) ; if(command_stat(Metat.Mrep,0) ) (

Metat = command(" [M8C",Mrep) ; if{command e s a (Metat,Mrep,0) ) (

Mreset_flags() ; MgenO = 1; Mlect = 1; dessine_maltre() ; dessine_gen_maitre("0 dbm ") ; clean_edt(1 ,11.14.31) ; hline(22.31,14,l) ; windo (19.15.21.27," Signal ",2); vline(14.18.21.2) ; c_print(14,21."X") ; statut("Générateur 0 dbm activé / Local") ; 1 ) } } else

( if(IMgenB)

[

FEUILLE DE REMPLACEMENT

Metat = commande [S0" ,Mrep) ; if(command_stat(Metat,Mrep,0) ) (

Metat = commande (MCC",Mrep) ; i (command_stat(Metat, rep.0) ) l

Mreset_flags() ; Mgenβ = 1; Mlect = 1; dessine_maitre() ; dessine_gen_maitre("-8 dbm"); clean_edt(14, 11, 14.31) ; hline(22,31,14,l) ; window(19.15,21.27," Signal ",2); vline(14,18,21,2) ; c_print(14,21,"X") ; statut("Générateur -8 dbm activé / Local") ) ) ) ) ) dessine_gen_maitre(char *texte) ( clean_edt(8,ll,12,31) ; hline(24.31,10,l) ; window(9,18,11.24,"",l) ; att_bold() ; c_print(10,21." "); reset_att() ; c_print(8,18,"1004 Hz"); c_print(12,19,texte) ; c_print(10,18,"-|") ; c_print(10,24,"|-") ; c_print(10,31.""P") ; ) loopback_maitre(int gain) { if(gain == 0) [ if(IMloopO) l

Metat = command e (S0" . Mrep) ; i (command_stat (Metat , rep, 0) ) l

Metat = command ( " [MOC . Mrep) ; if (command_sta (Metat, Mrep, 0) ) (

Mreset_flags ( ) ; MloopO = 1 ; dessine_maitre ( ) ; dessine_loop_maitre ( "G = 0" ) ;

FEUILLE DE REMPLACEMENT

statut("Loopback 0 db activé / Local") ; ]

else

( if(ÎMlooplδ) (

Metat = commande [S0",Mrep) ; if(command_stat(Metat,Mrep.O) ) (

Metat = command(" [M4C".Mrep) ; if(command_stat(Metat,Mrep,0) ) [

Mreset_flags() ; Mloopl6 = 1; dessine_maitre() ; dessine_loop_maitre("G = 16"); statut("Loopback 16 db activé / Local"); ] ]

) dessine_loop_maitre(char *texte)

( clean_edt(10.11.14.31) ; indo (11.17.13.25."".l) ; att_bold() ; c_prin (12.19,texte) ; reset_at () ; c_print(10.21."r"). c_print(ll,21," J - H ) ; c_print(10.31,"~P"); hline(22.30.10 l) ; c_print(13.21,"~-") ; c_print(14,21." L ") ; hline(22.31.14,l) ;

J

pont_maitre_tx()

[ float signal = 0.0; char text[10] ;

Metat = commande [S0".Mrep) ; if(command_s a (Metat,Mrep,0) )

(

Metat = command(" [M1B".Mrep) ;

FEUILLE DE REMPLACEMENT

if (coπutιand_stat(Metat,Mrep,0) )

(

Mreset_flags() ;

Mponttx = 1;

Mlect = 1; dessine_maitre ( ) ; indow(3,15,5,27," Signal ",2); vline(6, 10,21,2) ; c_print(5,21,"τ f ") ; c_print(10.21,"X") ; statut("Mesure en pont (Tx) activée / Local");

} )

) pont_maitre_rx()

{ float signal = 0.0; char text[10] ;

Metat = command(" [S0",Mrep) ; if(command_stat(Metat,Mrep,0) ) (

Metat = commande [M17",Mrep) , if(command_stat(Metat,Mrep.0) )

{

Mreset_flags() ;

Mpontrx = 1;

Mlect = 1; dessine_maitre() ; indow(19,15,21,27," Signal ",2); vline(14,18,21,2) ; c_print(14.21."X") ; statut("Mesure en pont (Rx) activée / Local") ;

) I ] adapte_maitre()

( float signal = 0.0; char textllO] ;

Metat = command(" [S0".Mrep) ; if(command_stat(Metat,Mrep.0) )

(

Metat = command(" [M0E",Mrep) ; i (coπunand_stat(Me at,Mreρ,0) )

(

Mreset_flags() ;

Madap = 1;

Mlect = 1; dessine_maitre() ; clean_edt(14,ll,14,31) ;

FEUILLE DE REMPLACEMENT

hline(22,31.14,l) ; windo (19,15.21,27," Signal ",2); vline(14,18,21,2) ; c_print(14,21,"X") ; statutCMesure terminée activée / Local");

]

] int reset_maitre() (

Metat = command("[S0",Mrep) ; if(command_stat(Metat,Mrep,0) ) l

Metat = command(" [MOF",Mrep) ; if(command_stat(Metat.Mrep,0) ) (

Mreset_ lags() ; dessine_maitre() ; statutCReset / Local"); } ) i (Metat != 0) statutCReset / Local : pas de réponse") return(Metat) ; ]

FEUILLE DE REMPLACEMENT

/*** LIEN.C ***/ Sinclude "samdi.h"

Sdefine duplicate 1

Sdefine modifiable 2

Sdefine binary 4

Sdefine null 8

Sdefine segmented 16 extern int col, co2, co3, co4, co5, co6, co7, co8; struct btr_file specs; struct Record enr; int STΛ = 0; int len = sizeof(enr); char pos(120], key[21]; creer_fichier() l specs.long_rec = len; specs.page_size = 512; specs.nb_index = 1; specs.va_length = 0; specs.keyl_ρos = 1; specs. eyl_len = 21; specs.keyl_flag = modifiable;

STΛ = BTRV (CREΛTE,pos,sspecs,sien, "liens.dbf",0) ; if(STΛ) erreur(0,0,STΛ) ; ) ecrit_lien(char * data[],char *oldkey,int mode) (

STA = BTRV(OPEN,pos,senr,Sien,"liens.dbf",key,0) ; if(STA == 12) { creer_fichier{) ;

STΛ = BTRV(0PEN,pos,senr, ien, "liens.dbf",key,0) ;

) if(STΛ) erreur(1,0,STΛ) ; switch(mode) ( case nouv: sprintf(enr.nom,"%s".data[01) ; sprintf(enr.desc, "%s" ,data[lj ) ; sprintf(key, "%s",data[0] ) ; sprintf(enr.tel_master, "%s",data[2] ) ; sprintf(enr.banque,"%s".data[3] ) ; sprint (enr.relais, "%s" .data14] ) ; sprintf(enr.tel_slave, "%s".data[5] ) ; sprintf(enr.banque2. "%s",data[6] ) ; sprintf(enr.relais2. "%s".data[7]) ;

STA = BTRV(INSERT,pos,senr,sien,key,0) ;

FEUILLE DE REMPLACEMENT

if(STΛ) erreur(2,0,STΛ) ; break; case edit:

STA = BTRV(EQUΛL, os.Senr.Sien.oldkey.O) ; i (ISTA) ( sprintf(key,"%s",oldkey) ; sprintf(enr.nom, "%s" ,data[0] ) ; sprintf(enr.desc, "%s",data[l] ) ; sprintf(enr.tel_master, "%s".data[2] ) ; sprintf(enr.banque,"%s",data[3] ) ; sprintf(enr.relais, "%s",data[4] ) ; sprintf(enr.tel_slave, "%s",data[5] ) ; sprintf(enr.banque2,"%s",data[6] ) ; sprintf(enr.relais2,"%s",data[7] ) ; STA = BTRV(UPDATE, os,senr.Sien,key,0) ; if(STA) erreur(5,0,STA) ; 1 break; ) STΛ = BTRV(CL0SE.pos,Senr,Slen.key.0) ; if(STA) erreu (3.0.STA) ; 1 int efface_lien(char *clef)

[

STA = BTRV(0PEN.pos. enr.sien."liens.dbf",key,0) ;

STA ≈ BTR (EQUAL. os,Senr,Sien.clef,0) ; i (ÎSTA)

(

STA = BTRV(DELETE.pos,senr,sien,clef,0) ; if(STA) erreur(6,0.STA) ;

)

STA = BTRV(CLOSE,pos, enr, len.key,0) ; if(STA) erreur(3,0,STΛ) ; ] int verlfie_cle(char *clef) t

STA = BTRV(0PEN,pos.senr.Sien,"liens.dbf",key,0) ;

STΛ = BTRV(EQUΛL_KEY,pos, enr,sien,cle .0) ; if(!STΛ)

[

STA = BTR (CLOSE, os, enr,Sien, ey,0) ; return(1) ;

} else

(

FEUILLE DE REMPLACEMENT

STΛ = BTRV(CLOSE,pos,senr,sien.key,0) ; return(0) ;

) erreur(int codel, int code2,int errcode)

{ char mess[70] ; char mess2[78] ; char mess3[12] ; char *textl[7] = I

"Erreur de création du fichier LIENS.DBF", "Erreur d'ouverture du fichier LIENS.DBF", "Erreur d'insertion au fichier LIENS.DBF", "Erreur de fermeture du fichier LIENS.DBF", "Erreur de positionnement, LIENS.DBF", "Erreur de modification" ,

"Erreur d'effacement au fichier LIENS.DBF" ); char *text2[l] * = (

"Appuyer sur une touche..." ); sprintf(mess, " '); sprintf(mess2," '); sprintf(mess3. " "); sprintf(mess, "%s", extl[codel]) ; sprintf(mess2, "%s",text2(code2j ) ; sprintf(mess3, " CODE : %d ".errcode); save_box(9, 18.15.62) ; set_fore(co5) ; set_back(co3) ; window(9.18,15,62,"",2) ; set_fore(co7) ; set_back(co3) ; c_print(ll, (80 strlen(mess) )/2,meεs) ; c_print(12, (80 strlen(mess2) )/2,mess2) c_print(13, (80 strlen(mess3) )/2,mess3) clav() ; εet_fore(col) ; se _back(co2) ; recu_box() ;

)

FEUILLE DE REMPLACEMENT

/*** ESCLAVE.C ***/ Sinclude "samdi.h" extern int col, co2, co3, co4, co5. co6, co7, coβ; extern int ONLINE; int EgenO = 0; int Egenβ = 0; int EloopO = 0; int Elooplδ = 0; int Eponttx = 0; int Epontrx = 0; int Eadap = 0; char Erep[2] ; int Eetat = 0; int Elect = 0; menu_esclave()

( char *optio [81; int choix; option[0] = "Générateur 0 dbm"; option[l] = "Générateur -8 dbm"; option[2] = "Loopback 0 db"; optio [3] = "Loopback 16 db"; option[4] = "Mesure en pont - Tx"; option[5] = "Mesure en pont - Rx"; option[6] = "Mesure terminée"; option[7] = "Reset"; save_box(2,26.11,49) ; set_fore(col) -set_back(co2) ; menu_top(1.26,"Eloigné".1) ; reset_att() ; choix = menu_bar(2,26,ll,49,"".l,option,7,co3,co4.co5,0) ; recujbo () ; if(!ONLINE) statut("Aucun lien actif!"); else ( s itch(choix) ( case 0: gen_esclave(0) ; break; case 1: gen_esclave(-8) ; break; case 2: loopback_esclave(0) ; break; case 3;

FEUILLE DE REMPLACEMENT

loopback_esclave(16) ; brea ; case 4: pont_esclave_tx() ; break; case 5: pont_esclave_rx() ; break; case 6: adapte_esclave() ; break; case 7: reset_esclave() ; break; case 99: break; ) ) set_fore(co6) set_back(co5) ; menu_top(l,26, "Eloigné", 1) ; reset_att() ; ) gen_esclave(int niveau) ( if(niveau == 0) ( if(!Egen0) {

Eetat = commande [SI",Erep) ; i (command_stat(Eetat,Erep,1) ) {

Eetat = commande [M8C",Erep) , if(command_stat(Eetat,Erep,1) ) {

Ereset_flags() ; EgenO = 1; Elect = 1; dessine_esclave() ; dessine_gen_esclave(" 0 dbm"); clean_edt(10,49,10,69) ; hline(49,59,10,l) ; indow(3,53,5,65," Signal ",2); vline(6, 10,59,2) ; c_print(5,59,"r") ; c_print(10,59,"X") ; statut("Générateur 0 dbm activé / Eloigné") ] ] ) ) else {

FEUILLE DE REMPLACEMENT

if(!Egen8)

(

Eetat = commande [SI" .Erep) ; if(command_stat(Eetat,Erep,1) )

(

Eetat = commande [MCC",Erep) ; if(command_stat(Eetat,Erep,1) ) [

Ereset_flags() ;

Egenβ = 1;

Elect = 1; dessine_esclave() ; dessine_gen_esclave("-8 dbm") ; clean_ed (10.49,10,69); hline(49,59.10.1); window(3,53,5.65," Signal ",2); vline(6,10,59.2) ; c_print(5.59,"îr"); c_print(10.59."X"); statut("Générateur -8 dbm activé / Eloigné")

]

J

] dessine_gen_esclave[char *texte)

( clean_ed (12,49,16,69) ; hline(49,56.14.1) ; windo (13,56,15,62,"".l) ; att_bold(); c_print(14,59," ") ; reset_att() ; c_printC12,56,"1004 Hz"); c_print(16,57,texte) ; c_print(14.56."-f") ; c_priπt(14,62,"|-") ; c_print(14,49,"~Q");

] loopback_esclave(int gain) ( if(gain == 0) [ if(tEloopO) (

Eetat = commande" [SI".Erep) ; if(command_sta (Eetat,Erep,1) ) (

Eetat = command(" [MOC",Erep) ; if(command_sta (Eetat,Erep,1) ) ( Ereset_flags() ;

FEUILLE DE REMPLACEMENT

EloopO ≈ 1; dessine_esclave() ; dessine_loop_esclave("G ≈ 0") ; statut("Loopback 0 db activé / Eloigné") ) )

) ) else { if(!Eloopl6) (

Eetat = commande (SI",Erep) ; if(command_stat(Ee a ,Erep, 1) ) (

Eetat = commande [M4C",Erep) ; if(command_stat(Eetat,Erep, 1) ) {

Ereset_flags() ; Elooplβ = 1; dessine_esclave() ; dessine_loop_esclave("G = 16"); statu ("Loopback 16 db activé / Eloigné") } ] ) )

) desεine_loop_esclave(char * exte) ( clean_edt(10,49,14,69) ; wlndow(11.55,13,63,"",l); att_bold() ; c_print(12,57,texte) ; reset_att() ; hline(49,59,10,l) ; c_print(10,59,"- 1 ") ; c_print(ll,59,""_") ; hllne(49,59.14,l) ; c_print(14,49," * "Q") ; c_print(13,59,"-r") ; c_print(14,59," J ") ; ) pont_esclave_tx() l float signal = 0.0; char textllO] ;

Eetat = command(" (SI",Erep) ; if(command εtat(Eetat,Erep,1) )

{

Eetat = command e [M1B" , Erep) ;

FEUILLE DE REMPLACEMENT

i (command_stat(Eetat,Erep,1) )

(

Ereset_ lags() ;

Epoπttx = 1;

Elect = 1; dessine_esclave() ; indow(19,53.21,65," Signal ".2); vline(14,18.59,2) ; c_print(14,59,"X") ; statu CMesure en pont (Tx) activée / Eloigné");

] )

pont_esclave_rx()

{ float signal = 0.0; char text[10] ;

Eetat = commande [SI",Erep) , if(command_stat(Eetat,Erep,1) )

(

Eetat = command(" [M17".Erep) ; if(command_sta (Eetat,Erep,1) )

{

Ereset_flags() ;

Epontrx = 1;

Elect = 1; dessine_esclave() ; window(3,53,5,65," Signal ",2); vline(6,10.59,2) ; c_print(5,59." * jf"); c_print(10,59,"X") ; statut("Mesure en pont (Rx) activée / Eloigné");

] } ] adapte_esclave()

( float signal = 0.0; char text[10] ;

Eetat = command(" [SI",Erep) ; if(command_stat(Eetat,Erep, 1) )

(

Eetat = command ( " [MO E" . Erep) ; if (command_stat(Eetat. Erep, l) )

{

Ereset_flags() ;

Eadap = 1;

Elect = 1; dessine_esclave() ; clean_edt(10,49,10.69) ;

FEUILLE DE REMPLACEMENT

hline(49,59,10,l) ; indow(3,53,5,65," Signal ",2); vline(6, 10,59,2) ; c_print(5,59,"ïf") ; c_print(10,59,"X") ; statutCMesure terminée activée / Eloigné")

J

int reset_esclave() (

Eetat = commande [SI" ,Erep) ; if(command_stat(Eetat,Erep,1) ) l

Eetat = commande IMOF" ,Erep) ; if(command_stat(Eetat,Erep.1) )

(

Ereset_flags() ; dessine esclave() ; statutCReset / Eloigné");

)

1 if(Eetat != 0) statutCReset / Eloigné : pas de réponse") return(Eetat) ; )

Ereset_flags() {

EgenO = 0; Egenβ = 0; EloopO = 0; Elooplô = 0; Eponttx = 0; Epontrx = 0; Eadap = 0; Elect = 0; )

FEUILLE DE REMPLACEMENT

/*** COMM.C « **/ iiinclude "samdi-h" Sinclude "touche.c" extern int col, co2. co3, co4, co5, co6, co7, co8; int port = 1; /* COM1 */ int vitesse = 2400;/* 2400 */ int ONLINE = 0; struct Record rec; char *data[8] = [

J; menu_comm() ( char *optio [7] ; int choix, STAT; option[0] = "Téléphoner"; optionîl] = "Raccrocher"; option[2] = "Configuration"; option[3] = "Nouveau lien"; option[4] = "Editer lien"; option[5] = "Effacer lien"; option[6] ≈ "Quitter"; save_box(2.4,10,20) ; set_fore(col) set_back(co2) ; menu_top(1,4,"Communication",1) ; reset_at () ; choix = menu_bar(2,4,10,20, "",1,option.6.co3,co4,co5,0) ; s ltch(choix) ( case 0: recu_box() ; if(1ONLINE)

{ if(etablir_lien() == 1) statut("Le système est prêt pour les tests") ;

} else statutCUn lien est déjà actif"); c_move(1,1); clr_c() ; break;

FEUILLE DE REMPLACEMENT

case 1: recu_bσx() ; if(ONLINE) l reset_maitre() ; if(reset_esclave() != -1) hang_up() ;

) else statut("Aucun lien actif, opération annulée!"); c_move(1,1) ; clr_c() ; break; case 2: if(!ONLINE) menu_config() ; recu_box() ; c_move(1,1); clr_c() ; break; case 3: creer_lien() ; recu_box() ; c_move(1,1); clr_c() ; break; case 4: editer_lien() ; recu_box() ; c_move(1,1) ; clr_c() ; break; case 5: ef acer_lien() ; recu_box() ; c_move(1,1); clr_c() ; brea ; case 6: recu_box() ; if(ONLINE)

( reset_maitre() ; if(reset_esclave() != -1) hang_up() ;

] c_move(1,1); εet_c() ; erase() ;

STAT = BTRV(STOP) ; if(STAT) print ("Erreur sortie BTRIEVE code = %d ",STΛT); exit(0) ; break; case 99: recu_box() ; c_move(1,1); clr_c() ; brea ; ) set_fore(co6) -set_back(co5) ; menu_top(1,4, "Communication", 1) ; reεet_att() ; I

FEUILLE DE REMPLACEMENT

menu_conf ig ( )

( char *option [4] ; char texte [50] ; int choix; option [0] = "COM1" ; option [1] = "COM2" ; option [2] = "COM3" ; option [3] = "COM4" ; save_box(5,22.10,36) ; choix = menu_bar(5,22,10,36," Port série ",3,option,3,co3,co4,co5,port-l) ; switch(choix) { case 0: /* coml */ port = 1; break; case 1: /* com2 */ port = 2; break; case 2: /* com3 */ port = 3; break; case 3: /* com4 */ port ≈ 4; break; case 99: /* esc */ break; ) init_coml(port.vitesse, 'N* ,1,8) ; sprintf(texte."Configuration: port —> %s, vitesse —> %d".option[port-1] .vitess statu (texte) ; recu_box(> } creer_lie {)

[ int cle, rep; int i = 0; clean_data() ; savejoox(1.1,25.80); set_c() ;

ecran_edlt(" Nouveau lien ".nouv); reset_att() ; cle = lecture(0,data[0]) ; do

(

FEUILLE DE REMPLACEMENT

switch (cle)

{ case ESC : recu_box() ; return(0) ; break; case ENTER: case F_B: if(i <= 6) i++; else i = 0; cle = lecture(i,data[i] ) ; break; case F_H: if(i >= 1) i--; else i = 7; cle = lecture(i,data[i] ) ; break; case K_F1: rep = confirm("Acceptez-vous ces données (O/N) ?") ; switch(rep) ( case O' : case O' : if( verifie_champs() ) ecrit_lien(data, "",nouv) ; else meεs_erreur("Tous les champs (sauf description)' obligatoireε! ") ; break; case 'n' : caεe 'N' : break;

) clean_data() ; att_reverεe() ; affiche_data() ; reset_att() ; i = 0; cle = lecture(i, ata[i] ) ; break; case K_F10: rep = confirm("Entrée de données terminée (O/N) ?"); if(rep == 'o' i ! rep == O')

( recu_box() ; return(0) ;

) else cle = lecture(i,data[i] ) ;

FEUILLE DE REMPLACEMENT

break; default: break; ] ] while(l); ) editer_lien()

( int cle, rep, autre, i; char oldkey[] = " clean_data() ; savejoox(1.1.25,80); while(l)

[ autre = 0; i = 0; windowd,1,25,80," Edition de lien ",1); set_fore(co8) ; set_back(co2) ; c_print(18,14,"Choisissez le lien voulu et"); c_print(19.14."tapez <ENTER> pour l'édition"); set_fore(co6) ; set_back(co5) ; c_print(25,l," "); c_print(25.2."<ESC> Quitter - <"Y> Suiv. - <~X> Préc. - <PgDn> Page suiv. - <p Page préc.") ; reset_att() ; if(choiεir_lien() == -1) l recu_box() ; return(0) ; J ecran_edit(" Edition de lien ".edit); reset_att() ; att_reverse() ; affiche_data() ; reset_att() ; sprintf(oldkey,data[0] ) ; cle = llitf_str(6.40,data[0] ,20) ; do t switch(cle) { case ESC: reçu box() ;

FEUILLE DE REMPLACEMENT

return(0) ; break; case ENTER: case F_B: if(i <= 6) i++; else i = 0; if(i == 0) cle = llitf_str(6,40,data[0] ,20) ; else cle = lecture(i,data[i] ) ; break; case F_H: if(i >= 1) i~; else i = 7; if(i == 0) cle = llitf_str(6,40,data[0] ,20) ; else cle = lecture(i,data[i] ) ; break; case K_F1: rep = confirm("Acceptez-vous ces données (O/N) ?"); if(rep == 'o' ! ! rep == O') ( if( strcmp(oldkey,datalO] ) != 0 ) 1 if( verifie_cle(data[0]) ) ( mess_erreur("Ce nom existe déjà dans le fichier","Utilisez un a nom ! ") ; autre = 0; ) else { if( verifie_champs() ) ecrit_lien(data,oldkey,edit) ; else mess_erreur("Tous les champs (sauf description)"," obligatoiresI ") ; autre = 1; ) ) else ( if( verifie_champs() ) ecrit_lien(data,oldkey,edit) ; else mess_erreur("Tous les champs (sauf description)"," obligatoires! ") ; autre ≈ 0; ) ) else

FEUILLE DE REMPLACEMENT

( autre = 0; i = 0; 1 cle = llitf_str(6,40.data[0] .20) ; break; case K_F2: autre = 1; break; case K_F10: rep = confirmeEdition de données terminée (O/N) ?") ; if(rep == 'o* ! ! rep == 'O') t recu_box() ; return(0) ; J else { if(i == 0) cle = llitf_str(6.40.data[0] ,20) ; else cle = lecture(i,data[i] ) ; ) break; default: break; ] if(autre) break; ) whileU); 1 recu_box() ; 1 effacer_lien()

( int cle, rep, autre; clean_data() ; save_box(1.1.25.80) ; while(l) l autre = 0; indo (l,1.25,80." Effacer un lien ",1) ; εet_fore(co8) ; εet_back(co2) ; c_print(18,14,"Choisiεsez le lien à effacer"); c_print(19,14,"et tapez <ENTER>"); set_fore(co6) ; set_back(co5) ; c_print(25.1." "); c_print(25,2,"<ESC> Quitter - <~Y> Suiv. - <~X> Préc. - cpgDn> Page suiv. - <P Page préc") ;

FEUILLE DE REMPLACEMENT

reset_att ( ) ; if (choisir_lien ( ) == -1)

( recu_box ( ) ; return (0) ;

) ecran_edit ( " Effacer un lien " . efface) ; reset_att ( ) ; att_reverse ( ) ; af f iche_data ( ) ; reset_att ( ) ; do ( cle = clav() ; switch(cle) { case ESC: recujoox() ; return(0) ; break; case _F1: rep = confirm("Effacer ce lien (O/N) ?"); if(rep == O' ! ! rep == O') efface_lien(data[OJ ) ; autre = 1; break; case K_F2: autre = 1; brea ; case K_F10: rep = confirm("Effacement de liens terminé (O/N) ?"); i (rep == 'o' ! ! rep == O') . 1 recu_box() ; return(0) ; ) else autre = 0; break; default: break; ) if(autre) break; ) while(l) ;

} /* fin hile(l) */ recu_box() ; )

FEUILLE DE REMPLACEMENT

intchoisir_lien() ( char noms[21] [21] ; char descr[21] [21] ; char tel_m[21] [21] ; char ban_m[21] [3] ; char rel_m[21] [3] ; char tel_e[21] [21] ; char ban_e[21] [3] ; char rel_e[21] [3] ; char pos_blk[128] . key[21] ; int nbrec = 0; int cle. STΛ. len, i, ligne; len = sizeof(rec); set_fore(co7) * set_back(co3) ; windo (2,55.24,79," Liens ",2); set_fore(col) set_back(co2) ; c_print(3,4,"Description du lien : c_print(5.4,"Téléphone / Local : c_print(7, ."Position / Local:"); c_prin (8,8,"S banque : c_print(9,8."S relais : c_print(11.4,"Téléphone / Eloigné ); c_prin (13,4."Position / Eloigné:" c_print(1 ,8,"S banque : c_print(15.8."ff relais :

STA = BTRV(θPEN,pos_blk,Srec,slen, "liens.dbf". ey,0) ; switch(STA)

[ case 0: break; case 12: mess_erreur("Le fichier LIENS.DBF est inexistant"."Opération annullée"); break; case 20: mess_erreur("BTRIEVE n'est pas en mémoire","Opération annullée"); break; default: erreur(1,0,STΛ) ; break;

) if(STΛ) return(-1) ;

STA = BTRV(FIRST,posjolk,Srec,Sien.key,0) ; if(STA)

( erreur(4.0,STA) ; retur (-1) ;

)

FEUILLE DE REMPLACEMENT

59

ftile

( if (STA ! = 9 ) ( nbrec = 0 ; ligne = 0 ; reset_att ( ) ; clean_edt (3 , 56, 23 , 78) for (i = 0 ; i <= 20 i ++) ( if (STΛ ! = 9 )

( sprintf(noms [i] , "%s" ,rec.nom) ; sprintf(descr(i) , "%s" .rec.desc) sprintf (tel_m[ij 1 "%s* ,rec.tel_master) ; sprintf(ban_m[i] ,"%s' 1 ,re .banque) ; sprintf(rel_m[i] , "%s *1 ,rec.relais) ; sprintf(tel_e[i) "%s" ,rec. tel_slave) ; sprintf (ban_e[i] "%s" ,rec.banque2) ; sprintf (rel_e (i] "%s",rec.relais2) ; c_print(3 + i, 57,noms [i] ) ; STA = BTRV( EXT.pos_blk, rec.sien. ey.0) nbrec++; )

] } if(ligne == 0)

( set_fore(co2) ; set_back(col) ; c_print (3, 57,noms[0] ) c_print(3,26,descr[0] ) c_print(5,26. tel_m(0] ) c_print(8,26,banjm(0] ) c_print(9,26,rel_m[0] ) c_print(ll,26,tel_e[0] ) c~pr±nt(14,26.ban_e[0] ) c_print(15,26,rel_e[0] ) reset_att() ; ) do cle - clav() ; switch(cle)

( case F_B: if (ligne < nbrec - 1)

( set_fore(col) ; set_back(co2) ; c_print (3+ligne, 57,noms[ligne] ) ligne++; set_fore(co2) ; set_back(col) ; c_print (3+ligne, 57 , noms [ligne] ) cjprint (3 , 26 , descr [ligne] ) ;

FEUILLE DE REMPLACEMENT

60

c_print(5,26,tel_m[ligne] ) ; c_print(8,26,ban_m[ligne] ) ; c_print(9,26,rel_m[ligne] ) ; c_print(ll,26,tel_e[ligne] ) c_print(14,26,ban_e[ligne] ) c_print(15.26.rel_e[ligne] ) reset_att() ; ] brea ; caεe F_H: if(ligne > 0) ( set_fore(col) ; set_back(co2) ; c_print (3+ligne.57.noms[ligne] ) ligne—; εet_fore(co2) ; set_back(col) ; c_print (3+ligne,57,noms[ligne] ) , c_print(3,26,descr[ligne] ) c_print(5,26.tel_ [ligne] ) c_print(8.26,ban_m[ligne] ) c_print(9,26,rel_m[ligne] ) c_prin (11,26,tel_e[ligne] ) c_prin (14.26.ban_e[ligne] ) c_print(15.26,rel_e[ligne] ) reset_att() ; } break; case PG_UP: for(i = 0; i < 42; i++)

(

STA = BTR (PREV.posJblk,srec,sien,key,0) J break; case ESC: STΛ = BTRV(CL0SE.pos_blk.srec, ien,key,-1) ; if(STA) erreur(3,0,STΛ) ; return(-1) ; break; case ENTER: STΛ = BTR (EQUAL,pos J lk,srec,sien,noms[ligne] ,0) sprintf(data[0] , "%s' ,rec.nom) ; sprintf(datai1] ,"%s' .rec.desc) ; sprint (data[2] ,"%s' ,rec.tel_master) ; sprintf(data[3] ,"%s* ,rec. anque) ; sprintf(data[4] ,"%s* .rec.relais) ; sprintf(data[5] ,"%s* ,rec.tel_slave) ; sprintf(data[6] ,"%s' ,rec.banque2) ; sprintf(data[7] , "%s* ,rec.relaiε2) ; break;

J if(cle == PG UP)

STA = 0; )

FEUILLE DE REMPLACEMENT

while (cle != PG_DN SS cle != ENTER SS cle != PG_UP) ; if(cle == ENTER) break;

) STΛ = BTRV(CL0SE,pos_blk,srec, ien,key,-1) ; if(STA) erreur(3,O.STA) ; return(1) ; } lecture(int num.char *champ)

{ char tmp[] = " "; char bufferl) = " "; int ligne, col, longueur, touche, rel, bank, stat; int vide = 0; switch(num) ( case 0: ligne ≈ 6; col = 40; longueur = 20; do touche = llitf_str(ligne,col,champ,longueur) ; if(touche == ESC I! touche == K_F10) break; else

( stat = verifie_cle(champ) ; if(stat) mess_erreur("Ce nom existe déjà dans le fichier","Utilisez un autre

O.- if(strcmp(champ," ") == 0)

I vide = 1; mess_erreur("Le nom du lien est obligatoire", "Appuyer sur une touche.. ] else vide = 0; ) ) while(stat ! ! vide) ; break; case 1: ligne = 8; col = 40; longueur = 20; touche ≈ llitf_str(ligne,col,champ,longueur) ; /* lecture des données */ break; case 2: ligne = 10; col = 40; longueur = 20; do

( touche = llitf_int(ligne,col,champ,longueur) ;

FEUILLE DE REMPLACEMENT

if(touche == ESC !! touche == K_F10) break; elεe ( if(strcmp(cham , " ") == 0)

( vide = 1: mess_erreur("Le numéro de téléphone local", "est obligatoire"); ) else vide = 0; ] ) while(vide) ; break; case 3: ligne = 13; col = 40; longueur = 2; do l touche ≈ llitf_int(ligne,col,champ,longueur) ; if(touche == ESC !! touche == K_F10) break; else l if(strcmp(champ," ") == 0) ( vide = 1; mesε_erreur("Le S de banque est obligatoire","Appuyer sur une touche.. ) else vide = 0; ) bank = atoi(champ) ; if(bank > 15 sε lvide) mess_erreur("Le « de banque doit être compris","entre 0 et 15 inclusivemen J while(bank > 15 ! ', vide) ;

if(bank < 10)

{ strcpy(tmp,"0") ; itoa(bank.buffer,10) ; strcat(tmp,buf er) ; εprintf(champ, "%s".t p) ; J att_reverse() ; c_print(ligne.col+1.champ) ; reset_att() ; break; caεe 4: ligne = 14; col = 40; longueur = 2; do

(

FEUILLE DE REMPLACEMENT

touche = llitf_int(ligne,col,champ,longueur) ; if(touche == ESC !! touche == K_F10) break; elεe ( if(εtrcmp(champ," ") == 0) { vide = 1; mess_erreur("Le S de relais est obligatoire", "Appuyer sur une touche.. ) else vide = 0; ) rel = atoi(champ) ; if(rel > 11 ss !vide) mess_erreur("Le S de relais doit être compris","entre 0 et 11 inclusivemen ) while(rel > 11 ! ! vide) ; if(rel < 10) ( εtrcpy(tmp, "0") ; itoa(rel,buffer, 10) ; strcat(tmp.buffer) ; sprintf(champ, "%s",tmp) ; } att_reverse() ; c_print(ligne,col+1,champ) ; reεet_att() ; break; case 5: ligne = 16; col = 40; longueur = 20; do

( touche = llitf_int(ligne,col.champ,longueur) ; if(touche == ESC !! touche == K_F10) brea ; elεe ( if(strcmp(champ, " ") == 0)

{ vide = 1; meεε_erreur("Le numéro de téléphone éloigné", "eεt obligatoire"); ) else vide = 0; ) J while(vide) ; break; caεe 6: ligne = 19; col = 40; longueur = 2; do touche = llitf_int(ligne.col.champ,longueur) ;

FEUILLE DE REMPLACEMENT

i (touche == ESC ! ! touche == K_F10) break; else [ if(strcmp(champ," ") •*•* = 0) ( vide = 1; meεs_erreur("Le S de banque est obligatoire","Appuyer sur une touche.. ) else vide = 0; 1 bank = atoi(champ) ; if(bank > 15 ss Ivide) meεε_erreur("Le « de banque doit être compriε","entre 0 et 15 incluεivemen J while(bank > 15 ! [ vide) ; if(bank < 10)

( strcpy(tmp."0") ; itoa(bank,buffer.10) ; εtrcat(tmp,buffer) ; εprintf(champ,"%s",tmp) ;

) att_reverse() ; c_print(ligne,col+1,champ) ; reset_at () ; break; case 7: ligne = 20; col = 40; longueur = 2; do

( touche = llitf_int(ligne,col,champ,longueur) ; if(touche == * ESC !! touche == K_F10) break; else ( if(strcmp(champ," ") == 0) ( vide = 1; mess_erreur("Le If de relais est obligatoire", "Appuyer sur une touche.. ] else vide = 0; 1 rel = atoi(champ); if(rel > 11 S Ivide) mess_erreur("Le S de relais doit être compris","entre 0 et 11 inclusivemen 1 while(rel > 11 ! ! vide) ; if(rel < 10) ( strcpy(tmp,"0") ; itoa(rel.buffer.lθ) ;

FEUILLE DE REMPLACEMENT

strcat(tmp,buffer) ; sprintf(champ, "%s" , mp) ; ) att_reverse() ; c_print(ligne,col+1,champ) ; reset_att() ; break; ) return(touche) ; ) etablir_lien()

{ char mess[40] ; char out[40] ; char rep[] ≈ " "; int stat, i; clean_data() ; εave_box(1,1,25,80); window(l,l,25,80," Téléphoner ",1); set_fore(co8) set_back(co2) ; c_print(18.14, "Choisissez le lien à établir"); c_print(19,14,"et tapez <ENTER>"); set_fore(co6) set_back(co5) ; c_print(25,l,"

"); c_print(25,2,"<ESC> Quitter - <"Y> Suiv. - <"X> Préc. - <PgDn> Page suiv. - <PgUp> préc . " ) ; reset_att() ;

if(choisir_lien{) == -1)

( recu_box ( ) ; return (-1) ;

] recu_box ( ) ; set_c ( ) ; info_lien() ; reset_modem() ; εtatutCUn moment s.v.p...."); for(i = 0;i < strlen(data[2] ) ;i++) if (data[2) [i] == 'P') data[2] [i] = , ' ; /* pause 2 εeconάeε */ for(i = 0;i < εtrlen(data[5] ) ;i++) if(data[5) [i] == 'P') data[5] [i] = ',*; str_trim(data[2] ) ; /* enlever les blancs a la fin du numéro */

FEUILLE DE REMPLACEMENT

%s\r".data[2] ) ; εprintf(out,"ATD modem comm(out) ; délai(150L) ; stat = modem_stat(rep) ; s itch(stat)

[ caεe 0: analyse_rep_modem(rep,mess) ; statut(mess) ; break; case -1: stat = modem_stat(rep) ; analyse_rep_modem(rep,mess) ; statut(mess) ; recu_box() ; ONLINE = 0; return(-1) ; break; case -2: analyse_rep_modem(rep,mess) ; statut(mess) ; recu_box() ; ONLINE = 0; return(-1) ; break;

] if(rep[0] == '0' !! rep[01 == '1' ϋ rep[0] == '5')

(

ONLINE = 1; set_fore(co2) ; set_back(col) ; c_print(9,59." ");

) else

[

ONLINE = 0; recu_bo () ; return(-1) ;

J flushcO ; c_move(12,59) ; délai(150L) ; stat = commande [SM",rep) ; if(command_stat(stat.rep,0) ) ( if(!set_rel(data[3] .data[4]) )

( recujbox() ; statut("Erreur activation du relais / Local"); hang_up() ; return(-1) ;

FEUILLE DE REMPLACEMENT

)

) else

( recu_box ( ) ; statut ("Erreur sur commande / Local"); hang_up ( ) ; return (-1) ;

) set_fore(co2) set_back(col) ; c_print(12,59," "); c_move(15.59) ; stat = commande [SI" , rep) ; if ( !command_sta (stat, rep, 1) )

( recu_box ( ) ; εtatut("Erreur sur commande / Eloigné") hang_up() ; return(-1) ;

) str_trim(data[5] ) ; reset_modem() ; statut("Un moment s.v.p...."); sprintf(out,"ΛTDT %s\r" ,data[5] ) ; modem_comm(out) ; délai(150L) ; εprintf(rep," "); εtat = modem_stat(rep) ; switch(stat) ( case 0: analyse_rep_modem(rep,mess) ; statu (mess) ; break; caεe -1: εtat = modem_s at(rep) ; analyse_rep_modem(rep,mesε) ; statut(mess) ; recu_box() ; hang_up() ; return(-1) ; break; case -2: analyse_rep_modem(rep,mess) ; εtatut(mess) ; recu_box() ; hang_up() ; return(-1) ; break; J

FEUILLE DE REMPLACEMENT

if(rep * #0]0' !î rep[0] == '1* \ rep[0] == '5') (

ONLINE = 1; set_fore(co2) ; set_back(col) ; c_print(15,59," "); ) else [ hang_up() ; recu_box() ; retur (-1) ; ) flushcO ; c_move(18,59) ; tfifdef RELAIS_ESCLΛVE délai(150L) ; stat = commande [SI",rep) ; if(command_stat(stat,rep,0) ) l if[!set_rel(data(6] ,data[7]) )

( recu_box{) ; statut("Erreur activation du relais / Eloigné"); hang up() ; return(-1) ;

1 } else [ recujbox() ; statut("Erreur sur commande / Eloigné"); hang_up() ; return(-1) ;

J Sendif set_fore(co2) -set_back(col) ; c_print(18.59." ") ; bell() ; délai(150L) ; set_fore(co8) -set_back(co2) ; recujoox() ; str_trim(data[0] ) ; sprintf (mess , " Lien actif : %s " ,data [0] ) ; att_bold() ; c_print(22, (80 - strlen(mess) )/2,mess) ; reset_at () ; return(1) ;

)

FEUILLE DE REMPLACEMENT

reset_modem ( ) ( statut C Reset du modem. . . " ) ; modem_comm( "ATQ0V0El S7=30\r" ) ; 1 hang_up()

( char rep[] = " char mess[40] ; int stat; stat = commande [SM",rep) ; command_stat(stat,rep,0) ; délai(150L) ; εtatutCFin de la communication... ") ; tputεtr("+++") ; εtat = modem_εtat(rep) ; modem_comm("ATH0\r") ; εtat = modem_εtat(rep) ; εwitch(εtat) { case 0: analyse_rep_modem(rep,mess) ; if(rep[0] != '0') statut(mess) ; else

[

ONLINE = 0; statut("La ligne a été raccrochée")

) break; caεe -1: εtat - modem_stat(rep) ; analyse_rep_modem(rep,meεs) ; statu (mess) ; break; caεe -2: analyse_rep_modem(rep,meεε) ; statut(mess) ; break; ) c_print(22,20," '); ) analyse_rep_modem(char *rep, char 'message) ( switch(rep[0] ) { case '0' : sprintf(message,"OK")

FEUILLE DE REMPLACEMENT

break; case 'l' : sprintf(message,"CONNECT 2400") ; break; case '2' : sprintf(message,"RING") ; break; case '3' : sprintf(message."NO CARRIER"); no_carrler() ; break; case '4' : sprintf(message."ERROR") ; break; case '5' : sprintf(message."CONNECT 1200"); break; case ' 6' : sprintf(message."NO DIΛLTONE") ; break; case *7' : sprintf(meεsage,"BUSY") ; break; case '8' : sprintf(message,"NO ΛNS ER") ; break; default: sprintf(message,"REPONSE DU MODEM INVALIDE: *%c*",rep[0]) ; break;

]

] info_lien()

( char bank_hex[] = " char rel_hex[]= " " ; char pos_maitre[] = " " ; char pos_esclave [] = " " ; int nu ; num = atoi(data[3]) ; int2hex(num.bank_hex) ; num = atoi(data[4] ) ; int2hex(num,rel_hex) ; sprintf(pos_maitre,"%c%c",bank_hex[0] ,rel_hex[0] ) ; num = atoi(data[6] ) ; int2hex(num.bank_hex) ; num = atoi(data[7] ) ; . int2hex(num,rel_hex) ; sprintf(pos_esclave,"%c%c".bank_hex[0] ,rel_hex[0]) ; save_box(6,19,20,61) ; εet_fore(co2) set_back(col) ;

FEUILLE DE REMPLACEMENT

CommunicwιilnidDwCl&,2l)9;, 20 , 61 , " set_fore (co2 ) -set_back (col ) ; c_print(8, 21, "Etabliεεement du lien LOCAL"); c_print(9,21,"S ") ; c_print(9, 23,data[2] ) ; c_print(9,44," ") ; c_print(11,21, "Allumage du relais / local"); c_print(12,21, "Position S ") ; c_print(12, 32,poε_maitre) ; c_print(12,44," ") ; c_print(14,21, "Etablissement du lien ELOIGNE") c_print(15,21,"S ") ; ' c_print(15.23.data[5] ) ; c_print(15,44," ") ; c_print(17,21,"Allumage du relaiε / éloigné"); c_print(18,21,"Poεition S "); c_print(18,32,pos_esclave) ; c_print(18,44," ") ; c_move(9, 59) ; ) int set_rel(char *bank,char *relais)

I char bank_hex[] = " "; char rel_hex [ ] = " " ; char comm [ ] = " " ; char ret [J int num, état; num = atoi(bank) ; int2hex(num,bank_hex) ; num = atoi(relais) ; int2hex(num,rel_hex) ; εprintf(comm," [R%c%c",bank_hex[0] ,rel_hex[0] ) ; état = command(comm,ret) ; return( command_εtat(etat.ret,0) );

) clean_data()

( sprintf(data[0] ," ") sprintf(datai1] ," ") sprintf(data12] ," ") sprintf(data[3] ," ") ; εprintf(data[4] ," "); sprintf(data[5] ," "); εprintf(data16] ," "); sprintf(data[7] ," ") ;

) affiche_data()

I c_print(6,41,data[0]) ;

FEUILLE DE REMPLACEMENT

c_print(8.41.data[l] ) ; c_print(10,41,data(2]) c_print(13,41,data(3] ) c_print(14,41,data(4] ) c_print (16,41, data [5 ] ) c_print(19,41,data[6]) c_print(20,41,data[7] ) ] int verif ie_champs ( ) [

FEUILLE DE REMPLACEMENT

FEUILLE DE REMPLACEMENT

/*** MODEM.C: *

Sinclude <STDI0.H> Sinclude <STDLIB.H> Sinclude CCTYPE.H> Sinclude <DOS.H> Sinclude <time.h> Sinclude <sys\types.h> Sinclude <syε\timeb.h> Sinclude "touche.c"

Sdefine DELAI 125L union REGS regε; extern int col, co2, co3, co4, co5. co6, co7, coβ;

union ( struct { unsigned word:2; unsigned stop:l; unsigned parité:1; unsigned even:l; unεigned stick:1; unεigned brea:l; unεigned dlab:1; ] b; int i; ] 1er;

union [ εtructl unsigned dr:l; unεigned or:l; unsigned pe:l; unsigned fe:l; unsigned bi:l; unsigned thre:l; unsigned tsre:l;

1 b; int i;

FEUILLE DE REMPLACEMENT

lεr; )

union l struct ( unsigned dtr:l; unsigned rts: 1; unsigned outl:1 unsigned out2:l unsigned loop:l

} b; int i; ) mer; int offset = 0; bellO { cputε("\007") ;

} init_coml (com.baud.parity,εtop.word) int com.baud.parity,εtop.word;

{ int msb.lεb;

4)

( lεb = 0x80; sb = 0x01; )

( lsb = OxCO; msb = 0x00; )

( lsb = 0x60; msb = 0x00; ) ( lsb = 0x30; msb ≈ 0x00; )

FEUILLE DE REMPLACEMENT

if( baud ≈≈ 4800 ) [ lsb = 0x18; msb = 0x00; ) if( baud == 9600 ) [ lsb = OxOC; mεb = 0x00; ) if(parity == O') ( 1er.b.parité = 1; lcr.b.even = 0; ) else if(parity == 'E') ( 1er.b.parité = 1; lcr.b.even = 1; j else 1er.b. arite = 0; if(εtop == 2) lcr.b.εtop = 1; else 1er.b.stop = 0; if(word == 7) 1er.b.word = 2; else 1er.b.word = 3; lcr.b-dlab = 1; outp( lcr_a + offset , lcr.i ) outp( div_mεb + offset . msb ) outp( div_lsb + offset , lsb ) lcr.b.dlab = 0; outpC lcr_a + offset , lcr.i );

) int claveO ( int kc; if( (kc = getcheO) == 0 ) kc = getche() + 200; return(kc) ; ) int clav() ( int kc; if( (kc = getchO) == 0 ) kc = getchO + 200; return(kc) ; } extern int port; struct timeb timebuf; long timel, time2; long inter = 0; long tl, t2; long inter2 = 0; délai(long hsecondes)

( initime(hsecondes) ; while ( !timeout() )

] initime(long hsecs)

( inter = (hsecs < 12) ? 12 : hsecs; ftime(εtimebuf) ; timel = (long)timebuf.millitm/10 + timebuf.time*100;

)

FEUILLE DE REMPLACEMENT

initime2(longdel) ( inter2 = (del < 12) ? 12 : del; ftime(stimebuf) ; tl = (long) imebuf.millitm/10 + timebuf.time*100; 1 timeout()

{ ftime(stimebuf) ; time2 = (long) imebuf.millitm/10 + timebu . time*100; return( (time2 - timel > inter) ? 1 : 0 );

} timeout2()

( ftime(stimebuf) ; t2 = (long)timebuf.millitm/10 + timebuf.time*100; return( (t2 - tl > inter2) ? 1 : 0 );

) flushcO

( while( tgetc_t(1000L) != 0 ) ; ) int modem_comm(char *comm) l int i = 0; délai(100L) ; while (commli] != '\0') tputc(comm[i++] ) ; return(i) ; J int modem_stat(char *rep)

( char c; int k; flushc() ; initime(18000L) ; do l if( kbhitO ) ( if( (k = clav() ) == ESC) ( tputc(k) ; return(-1) ; ) )

FEUILLE DE REMPLACEMENT

if (timeoutO ) return(-2) ; c = tgetc_t2( DELAI ) if(isdigit(c) )

( rep[0] = c; return(0) ;

) ) while(!isdigit(c) ) ;

) tputstr (εtr) char εtr[] ; l int i; i = 0 ; while (εtrli] != 0) tputc (εtr[i++] ) ; return (i) ; ] tputc(c)

( regε.h.ah = 0x01; εwitch(port) [ case 1: regs.x.dx = 0x00; /* coml */ break; case 2: regs.x.dx = 0x01; /* com2 */ break; case 3: regs.x.dx = 0x02; /* com3 */ break; caεe 4: regs.x.dx = 0x03; /* com4 */ break; ) regs.h.al = c; int86( 0x14 , sregs sregs ) ;

tgetc_t2(long temps)

( int tm_out = 0; iπitime2( emps) ; lεr.b.dr = 0; while { ! (tm_out = timeout2() ) ss llsr.b.dr) {

FEUILLE DE REMPLACEMENT

lsr.i = inp( lsr_a + offset ); if( tm_out ) return(0) ; if( lsr.b.dr ) return( inp( rx_buf + offεet ) ) ;

)

tgetc_t(ii) long ii; ( long i; lεr.b.dr = 0; for(i=0 ; i<ii ss lεr.b.dr==0 i++) lεr.i = inp( lεr a + offεet ) if( i >= ii ) return(0) ; return( inp( rx_buf + offεet ) );

) ready() ( regε.h.ah = 0x03; εwitch(port) l caεe 1: regs.x.dx = 0x00; /* coml */ break; case 2: regs.x.dx = 0x01; /* com2 */ break; caεe 3: regs.x.dx = 0x02; /* com3 */ break; case 4: regs.x.dx = 0x03; /* com4 */ break; ) int86( 0x14 , sregε , sregε ) ; return(regε.x.ax s 0x100) ; ) no_carrier()

( savejbox(9,20, 1 ,61) ; set_fore(co7) set_back(co2) ; window(9,20,14,61," NO CARRIER ",2); εet_fore(col) -set_back(co2) ; c_print(ll,23, "Le modem ne détecte pas le \"carrier\"") c_print(12,26, "La communication eεt coupée !"); bell() ; clav() ; recu_box() ;

)

FEUILLE DE REMPLACEMENT

command(char*in.char *out) ( tputstr(in) ; lit_rep(out) ; J int lit_rep(char *rep) l int i, tm_out = 0, rdy = 0; flushcO ; initime(300L) ; while ( ! (tm_out = timeoutO ) ss I (rdy = readyO) )

if(tm_out)

( if(! (regs.h.al s 0x80) ) return(-1) ; else return(-2) ;

1 if(rdy)

( rep[0] = tgetc_t2( DELAI ); return(0) ;

J ) int command_stat(int état,char *rep,int module) ( switch(état) ( case -1: no_carrier() ; break; case -2: bell() ; εtatut("Timeout... Aucune réponεe reçue"); break; case 0: εwitch(rep[0] ) ( case *] ' : return(1) ; break: default: if(module == 0) statut("Erreur d'exécution de la commande / Local"); elεe statut("Erreur d'exécution de la commande / Eloigné"-); break; )

FEUILLE DE REMPLACEMENT

break; } return(0) ; ] int get_db(float 'signal)

( int i = 0; char valeurt] = " " ; float db = 0.0; tputεtrC [D") ; do

[ valeur[i] = tgetc_t2( DELAI ); if( valeur[i] == 0 ) break; i++;

) while (valeur[i-1] != '\r'); if(Istrcmp(valeur, "") ) return(0) ; εεcanf(valeur, "%f" ,Sdb) ; *εignal = db; return(1) ; ) int2hex(int num,char *conv) l switch (num) { case 15: convlO] = 'F' break; case 14: convlO] = 'E' break; case 13: convlO] = 'D' break; case 12: convlO] = "C break; case 11: conv(0] = 'B' break; case 10: convlO] = 'A' break; case 9 : convlO] = '9' break; case 8 : convlO] = '8' break; case 7 : convlO] = '7' break; caεe 6 : convlO] = '6' break; caεe 5 : convlO] = '5' break; caεe 4 : convlO] = '4' break;

FEUILLE DE REMPLACEMENT

case 3 : convlO] = '3'; break; caεe 2 : conv[0] = '2'; break; case 1 : conv[0] = '1'; break; case 0 : conv[0] = '0' ; break; default: conv[0] = '0'; ]

FEUILLE DE REMPLACEMENT

/*** MAIN.C ***/ Sinclude "samdi.h" int Msignal = 1; int Esignal = 1; extern int ONLINE; int col = 7, co2 = 0, co3 = 0, co4 = 7, co5 = 7, co6 = 0, co7 = 7, co8 = 7; main()

( int cle, start; if(init_gcard() == 1) ( col = 7; co2 = 0; co3 = 0; co4 = 15; co5 = 9; co6 = 7;

start = spawnl(P_ ΛIT, "btrieve.exe", "btrieve",NULL) ; if(start == -1)

{ printf("Erreur avec gestionnaire de base de donnéeε, code = %d\n".εtart) ; printf("Le fichier BTRIEVE.EXE doit être danε le même répertoire que SAMDI.EX bellO; exit(-l) ;

) init_coml(l,2400,'N'.1.8); ecran_id() ; ecranl() ; while(1) ( if( ONLINE && (Msignal !! Eεignαl) ) lit_signal() ; if( kbhitO ) ( cle = clav() ; switch(cle) ( case *c' : caεe 'C : menu_comm() ; break; case '1' : case 'L' : menu_maitre() ; break; case 'e' : caεe *E' :

FEUILLE DE REMPLACEMENT

menu_esclave() ; break; case 'b' : case 'B' : balayage() ; break; case 'i' : case 'I* : inform() ; break; default: break; )

1 lit_εignal()

[ float εignal = 0.0; extern int Mlect, Mponttx, Elect, Eponttx; int état; char réponse[2] ; char texte[10] ; if(Mlect) l état = commande [SO",reponεe) ; if(command_stat(etat,reponεe.O) ) ( état = commande IF1004",réponse) ; if(command_stat(etat,réponse,0) ) l

Msignal = 1; i ( get_db(ssignal) ) (

Msignal = 1; if(Mponttx) ( clean_edt(4,16.4.26) ; if(signal > 0.0) εprintf(texte, "> 0.0 dbm") ; elεe sprintf(texte,"%4.If dbm",signal) c_prin ( ,17,texte) ; ) else

( clean_edt(20,16,20,26) ; if{εignal > 0.0) εprintf(texte,"> 0-0 dbm") ; else

.sprintf(texte, "%4.1f dbm" .signal) ; c_print(20,17,texte) ;

FEUILLE DE REMPLACEMENT

) ) else Msignal = 0; ) else Msignal = 0; ) else Msignal = 0; ) if(!Msignal) statut("Erreur de lecture du signal / Local"); if(Elect) l état = command("[S1",réponse) ; if(command_stat(état,réponse, 1) ) ( état = commande [F1004" .réponse) ; if(command_stat(état.réponse,0) ) (

Esignal = 1; if( get_db(ssignal) ) (

Esignal = 1; if(Eponttx) ( clean_edt(20,54,20,64); if(signal > 0.0) sprint (texte,"> 0.0 dbm"); elεe εprintf(texte, "%4.If dbm",signal) ; c_print(20,55,texte) ; ) else ( clean_edt(4,54,4,64) ; iflsignal > 0.0) sprintf(texte, "> 0.0 dbm"); else sprintf(texte,"%4.If dbm",signal) ; c_print(4,55,texte) ; ) ) else Esignal = 0; ) else Esignal = 0; ) else Esignal = 0; ) if(!Esignal) statu ("Erreur de lecture du signal / Eloigné") }

FEUILLE DE REMPLACEMENT

/*** BALAYAGE.C ***/ Sinclude "samdi.h" Sinclude "touche.c" Sinclude <malloc.h> Sinclude <stdlib.h> Sinclude <bios.h> int v ode = 0; struct videoconfig vc; extern int col, co2, co3, co4. co5, co6, co7, co8, ONLINE; extern char *data[] ; int état, compense = 0; char réponse[2] ; char testinfo[B0] ;

balayage()

( char texte[40] ; if(!_setvideomode(_MΛXRESM0DE) ) l vmode = 0; εtatutC'La carte vidéo ne εupporte paε le mode graphique"); return(-1) ;

) else vmode = 1; _registerfonts("*. on") ; _clearscreen(J3CLEΛRSCREEN) ; _getvideocoπfig(&vc) ; menu_balayage() ;

_unregiεterfonts() ; _setvideomode(_DEFAULTM0DE) ; vmode = 0; eraεe() ; ecranl() ; if(ONLINE)

( εet_fore(co0) ; set_back(co2) ; εprintf(texte, " Lien actif: %ε ",data[0]); att_bold() ; c_print(22. (80 - strlen(texte) )/2,texte) ; reεet_att() ;

] 1 long del = 100L;

menu_balayage() (

FEUILLE DE REMPLACEMENT

inti, cle, direction = -1, gen -1, fin = 0, sauve = 0, ligne 0; char texte[80] ; char originel] = " char dest[] = " " ; float valeur[28] ;

_εettextcolor(15) ; _settextpoεition(l, 1) ; _outtex ("L") ; _settextcolor(7) ; _settextposition(l,2) ; _outtext("ocal->éloigné|") ; _settextcolor(15) ; _settextposition(l, 16) _outtext("E") ; _settextcolor(7) ; _settextposition(1,17) ; _outtex ("loigné->local| ") ; _settextposition(1, 31) ; _outtext("gén") ; _settextcolor(15) _settextpoεition(l, 35) _outtext("0") ; _settextcolor(7) ; _settextposition(l,36) _outtext(" |gén -") ; _settextcolor(15) _settextposition(1,43 _outtext("8") ; _settextcolor(7) ; _settextpoεition(1,44) _outtext("|") ; _settextcolor(15) _settextposition(1,45 _outtext("T") ; _settextcolor(7) ; _settextposition(l,46) _outtext("race| ") ; _settextcolor(15) _settextposition(l, 51 _outtext("I") ; _settextcolor(7) _settextpoεition(1,52) _outtext(" prime| ") ; _settextcolor(15] _εettextpoεition(l,59 _outtext("R") ; _settextcolor(7) ; _settextposition(1,60) _outtex ("écupère| ") ; _settextcolbr(15) _settextposition(l,68 _outtex ("S") ; _settextcolor(7) ; _settextposition(1,69) _outtext("auve| ") ; _settextcolor(15) _settextpoεition(1,74 _outtext("Q") ; _εettextcolor(7) _settextposition(1,75) _outtext("uitte") ; deεsine_grap (0) for(i = 0;i < 28;i++) valeurli] = 0.0; do l cle = clav() ; switch(cle) l case '1' : case 'L' : if(!ONLINE) statut("Aucun lien actif!' else

( _settextcolor(4) ; _settextposition(2, 1) ; _outtext("≈

"); direction = 0; εtatut("Direction: Local -> Eloigné");

) break; caεe 'e' : caεe 'E' : if(!ONLINE) statu ("Aucun lien actif!"); elεe l

_settextcolor(4) ; _settextposition(2, 1) ; _outtext("

=") ;

FEUILLE DE REMPLACEMENT

direction = 1; statut("Direction: Eloigné -> Local"); ) break; case '0* : if(!ONLINE) statut("Aucun lien actif!"); elεe (

_εettextcolor(4) ; _settextposition(2,31) ; _outtext(" ") ; gen = 0; compense = -16; statut("Générateur: 0 db") ; ] break; case '8' : if(!ONLINE) statut("Aucun lien actif!"); elεe (

_settextcolor(4) ; _settextposition(2,31) ; _outtext(" ") ; gen ≈ 8; compenεe = -8; statut("Générateur: -8 db"); ) break; case 't' : case 'T' : if(!ONLINE) statutCΛucun lien actif!"); else ( if(direction == -1) ( sprintf(texte,"Choisir d'abord la direction (Local->Eloigne Eloigne->Local) ") ; statut(texte) ; break; J if(gen == -1) ( sprintf(texte, "Choisir d'abord la fréquence du générateur (0 / -B db statut(texte) ; break; ] if(setup_balayage(direction, gen. origine, dest) ) ( dessine_graph(1) ; statut("Balayage de fréquences en cours..."); if(runjbalayage(direction, svaleur, origine, dest, ligne) ) l bell() ; infos(direction,gen) ; sauve = 1; ) else -

FEUILLE DE REMPLACEMENT

l statut("Opération annulée!") desεine_graph(l) ; sauve = 0;

int xorg, yorg, xfin, yfin, xinter, yinter, xlong, ylong;

desεine_graph(int line) l char texte[40] ; int i, nb, oldcolor;

_settextcolor(14) ;

_settextposition(3, 21) ;

_OUttext("DISTORSION D'AFFAIBLISSEMENT RELATIVE"

_εetfont("t'helv , hl2w7b") ; if(vc.numxpixels == 720)

( xlong = 608; xinter = 18;

) else

(

FEUILLE DE REMPLACEMENT

xlong = vc.numxpixels * 0.85; xinter = xlong / 32;

1 xorg = (vc.numxpixels - xlong) / 2; xfin = xorg + xlong; ylong = vc.numypixels * 0.7; yorg = vc.numypixels - ( (vc.numypixels - ylong) / 2) ; yfin = vc.numypixels - yorg; yinter = ylong / 12; if(line)

{

_setviewport(0.yfin - 5,vc.numxpixels,vc.numypixelε) ; /*yorg + 30);*/

_clearscreen(_GVIEWP0RT) ;

_εetviewport(0,5,vc.numxpixels,vc.numypixels) ;

]

_εetcolor(12) ; _moveto(xorg,yorg) ; _lineto(xfin,yorg) ;/* x */ _moveto(xorg,yorg) ; _lineto(xorg,yfin) ;/* y */

_moveto(xfin,yorg) ;

_lineto(xfin - 10,yorg + 8) ;

_moveto(xfin,yorg) ;

_lineto(xfin - 10,yorg - 8) ; /* x */

_moveto(xorg,yfin) ;

_lineto(xorg - 8, fin + 10) ;

_moveto(xorg,yfin) ;

_lineto(xorg + 8.y in + 10) ; /* y */

_rectangle(_GB0RDER, xorg, yfin + yinter, xfin - xinter, yorg) ;

_setcolor{7) ; for(i = 1, nb = -2;i <= ll;i++,nb++)

(

_moveto(xorg - 5, (yorg - yinter * i) ) ;

_lineto(xfin - xinter, (yorg - yinter * i) ) ;

_moveto(xorg - 25, (yorg - yinter * i) - 5 ) ; lf(nb > 0) sprintf(texte,"+%d",nb) ; else if(πb < 0) sprintf(texte, " %d",nb) ; elεe sprintf(texte," %2d",nb); /* 0 */

_outgtext(texte) ;

} _moveto(3, (yorg - yinter * 3) ) ; _setgtextvector(0,1) ; _εetcolor(14) ;-

_outgtext("Affaiblissement relatif (dB)"); _εetgtextvector(1,0);

FEUILLE DE REMPLACEMENT

= 0, nb = 0;i <ioB2ii++)

( if( ! (i % 5) )

(

_setlinestyle(OxFFFF) ;

_moveto(xorg + (xinter * i) ,yorg + 8); _setcolor(12) ;

) else

{

_setlinestyle(OxCCCC) ;

_moveto(xorg + (xinter * i) ,yorg + 5); _setcolor(7) ;

)

_lineto(xorg + (xinter * i) ,yfin + yinter ) ; if( ! (i % 5) ! ! i == 0 )

{

_setcolor(7) ;

_moveto(xorg + (xinter * i - 10) ,yorg + 12) ; εprintf(texte, "%d".nb) ;

_outgtext( exte) ; nb += 500;

) ) εprintf(texte, "Fréquence (Hz) ") ;

_moveto( (vc.numxpixels - _getgtextextent(texte) ) / 2,yorg + 27); _εetcolor(14) ; _outgtext(texte) ;

_εetlineεtyle(0xFFFF) ; _εetcolor(3) ; /* cyan */ if(vc. ode != _HERCM0N0) l

_rectangle(_GB0RDER, xorg + (xinter * 3), yfin + yinter + 1, xorg + (xinter • yorg - (yinter * 9) ) ;

_rectangle(_GB0RDER, xorg + (xinter * 3) + 1, yfin + yinter + 2, xorg + (xint 30) - 1, yorg - (yinter * 9) - 1) ;

_rectangle(_GB0RDER, xorg + (xinter * 5) , yorg - (yinter * 9) , xorg + (xinter * yorrgg - (yinter * 6) ) ;

_rectangle(_GB0RDER, xorg + (xinter * 5) + 1, yorg - (yinter * 9), xorg + (xi 28) - 1, yorg - (yinter * 6) - 1) ;

_rectangle(_GB0RDER, xorg + (xinter * 5) , yorg - (yinter * 2) , xorg + (xinter * yorg - yinter) ;

_rectangle(_GB0RDER, xorg + (xinter * 5) + 1, yorg - (yinter * 2) + 1, xo (xinter * 28) - 1, yorg - yinter);

_rectangle(_GB0RDER. xorg + (xinter * 3), yorg - yinter, xorg + (xinter * 30), - D:

_rectangle(_GB0RDER, xorg + (xinter * 3) + 1, yorg - yinter + 1, xorg + (xint 30) - 1, yorg - 1) ; oldcolor = _setcolor(0) ;

_floodfill(xorg. + (xinter * 3) + 2, yfin + yinter + 3, oldcolor);

FEUILLE DE REMPLACEMENT

_floodfill(xorg + (xinter * 5) + 2, yorg - (yinter * 9) + 2. oldcolor) _ loodfill(xorg + (xinter * 5) + 2, yorg - (yinter * 2) + 2, oldcolor) _floodfill(xorg + (xinter * 3) + 2, yorg - yinter + 2, oldcolor) ;

I else l

_rectangle(_GFILLINTERI0R, xorg + (xinter * 3) , yfin + yinter + 1, xorg + (xi

* 30), yorg - (yinter * 9) );

_rectangle(_GFILLINTERI0R, xorg + (xinter * 3) + 1, yfin + yinter + 2, xo (xinter * 30) - 1, yorg - (yinter * 9) - 1) ;

_rectangle(_GFILLINTERI0R. xorg + (xinter * 5) , yorg - (yinter * 9) , xorg + (xi

* 28) , yorg - (yinter * 6) ) ;

_rectangle(jGFILLINTERIOR. xorg + (xinter * 5) + 1, yorg - (yinter * 9), xo (xinter * 28) - 1, yorg - (yinter * 6) - 1) ;

_rectangle( GFILLINTERIOR, xorg + (xinter * 5), yorg - (yinter * 2), xorg + (xi

* 28) , yorg - yinter) ;

_rectangle(jGFILLINTERIOR. xorg + (xinter * 5) + 1, yorg - (yinter * 2) + 1, + (xinter * 28) - 1, yorg - yinter) ;

_rectangle(_GFILLINTERI0R, xorg + (xinter * 3) , yorg - yinter, xorg + (xinter * yorg - 1) ;

_rectangle(jGFILLINTERIOR, xorg + (xinter * 3) + 1, yorg - yinter + 1, xo (xinter * 30) - 1, yorg - 1) ; oldcolor = _εetcolor(0) ;

_rectangle(jGFILLINTERIOR. xorg + (xinter * 3) + 2, yfin + yinter + 3, xo (xinter * 30) - 2, yorg - (yinter * 9) - 2) ;

_rectangle(jGFILLINTERIOR. xorg + (xinter * 5) + 2, yorg - (yinter * 9), xo (xinter * 28) - 2, yorg - (yinter * 6) - 2) ;

_rectangle(_GFILLINTERIθR, xorg + (xinter * 5) + 2, yorg - (yinter * 2) + 2, + (xinter * 28) - 2, yorg - yinter - 1) ;

_rectangle(jGFILLINTERIOR, xorg + (xinter * 3) + 2, yorg - yinter + 2, xo (xinter * 30) - 2, yorg - 2) ;

) _moveto(xorg + (xinter * 5) + 1, yorg - (yinter * 9) ) ; _lineto(xorg + (xinter * 28) - 1, yorg - (yinter * 9) ) ; _moveto(xorg + (xinter * 5) + 1, yorg - yinter); _lineto(xorg + (xinter * 28) - 1, yorg - yinter);

_moveto(xorg + (xinter * 5) + 1, yorg - (yinter * 9) - 1) ;

_llneto(xorg + (xinter * 28) - 1, yorg - (yinter * 9) - 1) ;

_moveto(xorg + (xinter * 5) + 1, yorg - yinter + 1);

_lineto(xorg + (xinter * 28) - 1, yorg - yinter + 1) ;

_setcolor(10) ;

_setfont("fhelv'hl8w9b") ; εprintf(texte,"COND. 4B (C2)");

_moveto( (vc.numxpixels - _getgtextextent(texte) ) / 2,yorg - (yinter * 10) );

_outgtext(texte) ;

]

FEUILLE DE REMPLACEMENT

93

intsetup_balayage(int direction, int gen, char *origine, char *deεt) l char générateur[] = " "; char texte[80] ; int stat_origine = 0; int stat_dest = 0; if(direction == 0)

( εprintf(origine, " [S0") ; sprintf(dest," [SI") ;

] else

( sprintf(origine, " [SI") ; sprintf(deεt," ISO") ;

) if(gen == 0) sprintf(générateur, " [M8C") ; else sprint (générateur, " IMCC") ;

état = command(origine,reponεe) ; if(command_εtat(état,réponse,direction) )

( état = command(générateur,réponse) ; if(command_sta (e at,réponse,direction) ) s at_origine = 1;

) état = command(dest,réponse) ;

)

int run_balayage(int direction, float 'valeur, char 'origine, char 'dest, int li

{ float lect = 0.0; int fréquence, i; char tmp[] = " char bufferl] ≈ " char freql] = " for(i = 0,fréquence = 300;fréquence <= 3000;i++, fréquence += 100)

FEUILLE DE REMPLACEMENT

if[kbhit() ) return(0) ; état = command(origine,réponse) ; if(command_stat(état,réponse,0) ) ( if(frequence < 1000) ( strcpy(tmp,"0") ; itoa(frequence.buffer,10) ; εtrcat(tmp.bu fer) ; εprintf(freq." [F%ε",tmp) ; ) else l itoaCfrequence.buffer,10) ; εprintf(freq," [F%s".buffer) ; J état = command(freq.réponse) ; if(command_stat(etat.réponse,0) ) ( délai(del) ; état = command(dest,reponεe) ; if(command_εtat(etat,reponεe.O) ) l if( get_db(slect) ) ( valeur[i] = compenεe - lect; plo (fréquence,svaleur[i] .ligne) ; J else valeur[i] = 255.0;

return(1) ; ) plot(int freq, float 'dbval, int ligne) l εta ic int oldx, oldy, newx, newy;

_εetcolor(15) ; oldx = newx; oldy = newy; newx = xorg + (xinter * (freq/100) ) - 5; newy = yorg - (int) (yinter ('dbval + 3.0)) - 6; jmoveto (newx,newy) ; if(freq > 300) [

_moveto(oldx+5,oldy+5) ; _lineto(newx+5,newy+5) ; _moveto(oldx+5.oldy+6) ; _lineto(newx+5,newy+6) ;

FEUILLE DE REMPLACEMENT

_moveto(oldx+5,oldy+7) ; _lineto(newx+5,newy+7) ; ligne = 1; ) ] infos(int dir, int gen) l char date[9] ; char heure19j ; char hr16] ; char sens[10] ; char type_gen[10] ;

_strdate(date) ; _strtime(heure) ; εtrncp (hr,heure,5) ; hr{5] = '\0'; if(dir == 0) sprintf(εens, "Loc->Eloi") ; elεe sprintf(sens, "Eloi->Loc") ; if(gen == 0) sprintf(type_gen,"Gén 0 db"); elεe sprintf(type_gen, "Gén -8 db"); εprintf(testinfo, "%s %s %s %s %s",data[0] ,date.hr,sens,type_gen) ; statut(testinfo) ; )

sauve_graph(float 'valeur) l int i;

FILE * fie; char nom[] = " if(!lit_nom("Sauver le graphique sous le nom:",nom) ) return(0) ; else ( if( (fie = fopen(nom,"w+")) ≈= NULL ) { box_mess("Erreur d'ouverture du fichier"); return(-1) ; ) for(i = 0;i < 28;i++) fprintf(fie."%3.If,",valeur[i] ) ; fprintf(fie, "%s",testinfo) ; if( fclose(fie) )

FEUILLE DE REMPLACEMENT

box_mess("Erreur de fermeture du fichier"); )

recupere_graph(float 'valeur) l int i, fréquence, nb;

FILE * fie; char nom.il = " "; if(Ilit_nom("Nom du graphique à récupérer:".nom) ) return(O) ; else ( if ( (fie = fopen(nom. "r") ) == NULL ) ( box nesε ("Erreur d'ouverture du fichier") ; return (-1) ; } for (i = 0 ;i < 28 ; i++) l nb = fscanf(fie,"% ,", valeurli] ) ; if(!nb) l box_meεs("Ce fichier est incompatible"); return(-1) ; I J fread(teεtinfo,80,80.fic) ; for(l = 0,fréquence = 300.'fréquence <= 3000;i++,fréquence += 100) if(valeur[i] != 255.0) plot(fréquence,svaleur[i] ,0) ; statut(testinfo) ; if( fcloεe(fic) ) boxj-neεε("Erreur de fermeture du fichier"); ] ) lit_nom(char 'mess, char 'nom)

[ int i, xl, yl, x2, y2, xpix_car, ypix_car, cle, col, line, oldcolor; char 'box; l = (int) (vc.numxpixels * 0.2); yl = (int) (vc.numypixels * 0.35); x2 = (int) (vc.numxpixels * 0.8); y2 = (int) (vc.numypixels * 0.6); xpix_car = vc.numxpixelε/vc.numtextcols; ypix_car = vc.numypixelε/vc.numtextrows; line = (int) (yl/ypix_car) ; col = (80 - strlen(meεs) ) / 2;

FEUILLE DE REMPLACEMENT

= malloc( (unεigned int)_imbgHsize(xl.yl,x2,y2) _getimage( xl,yl,x2,y2, box); if(vc.mode != _HERCM0N0) {

_setcolor(5) ;

_reetangle(_GB0RDER, xl,yl.x2,y2) ; _reetangle(_GB0RDER, xl+l,yl+l,x2-l,y2-l) ; _rectangle(_GB0RDER, xl+4,yl+4,x2-4,y2-4) ; _reetangle(_GB0RDER, xl+5,yl+5.x2-5,y2-5) ; oldcolor = _setcolor(0) ; _floodfill(xl + 6,yl + 6,oldcolor) ; ) else (

_setcolor(5) ;

_rectangle( GFILLINTERIOR, xl,yl.x2,y2) ; _rectangle(jGFILLINTERIOR, xl+l,yl+l,x2-l,y2-l) oldcolor = _setcolor(0) ;

_rectangle(jGFILLINTERIOR. xl+4,y1+4,x2-4,y2-4) _rectangle(jGFILLINTERIOR, xl+5,yl+5,x2-5,y2-5) ) _settextcolor(14) ; _settextpoaition(line + 3, col) ; _outtext(mesε) ; _εettextcolor(7) ; _settextposition(line + 5, col); for(i = 0;i < 40;i++) ( cle = getch() ; ε itch(cle) ( case ESC:

_putimage(xl, yl, box, jGPSET) ; free(box) ; return(0) ; break; caεe ENTER: nom[i] = '\0';

_putimage(xl, yl, box, jGPSET) ; free(box) ; return(1) ; break; caεe BACK: nomli—] ≈ ' ; nomîi—] = ' ' ;

_settextposition(line + 5, col); jouttext(nom) ; break; default: if(i < 39) nomli] = toupper(cle) ; else { nomli) = '\0';

FEUILLE DE REMPLACEMENT

_putimage (xl, yl, box, jGPSET) ; free (box) ; return (1) ;

1 _settextposition(line + 5 , col) ; _outtext (nom) ; break;

) printO

( int x = 0, y = 0, mode, col. mult. ydebut, yfin; unεigned char Ct,ct2.ct3.ct4,ct5,ct6,ct7,ct8; unεigned char res, total; if(vc.numxpixels > 767)

( col = vc.numxpixels - 768; mode = 7; mult = 3;

) else if(vc.numxpixels == 720) t col = vc.numxpixels - 512; mode = 6; mult = 2;

J else l col = vc.numxpixels - 512; mode = 4; mult = 2; ) ydebut = (vc.numypixels / vc.numtextrowε) * 2 + 1; if(vc.numypixels == 350) yfin = 344; /'else yfin = vc.numypixels - 3;*/ if(vc.numypixels == 480) yfin = 464; fprintf (stdprn."%c3%c",27,24) ; f rintf (stdprn."%cU%c",27.1); for(x = 0; x < 5; x++) fprintf(stdprn,"\n") ; for (y = ydebut;y <= yfin;y += 8)

[ fprintf (stdprn, "%c*%c%c%c",27,mode,col.mult) ; for(x = 0 ; x c vc.numxpixels; x++)

( total =0; res = _getpixel(x,y) ; et ≈ ( (res != 0 ) ? 1 : 0) ; res = _getpixel(x,y+l) ; ct2 = ( (res 1= 0 ) 7 1 : 0); res - _getpixel(x,y+2) ; ct3 = ( (res != 0 ) ? 1 : 0); res = _getpixel(x,y+3) ;

FEUILLE DE REMPLACEMENT

total = (ct*128) +(ct2*64) + (ct3*32) +(ct4*16)+(ct5*8)+(ct6*4)+(ct7'2)+ct8; fprintf (stdprn."%c". total) ; } fprintf (stdprn, "\n"); ] fprintf(stdprn, "\014") ; }

int test_printer()

{ unsigned data = 36; unεigned status; status = _bios_printer(_PRINTER_STATUS,0,data) ; /* 0 =LPT1 */ εwitch(status) { case 144: return(0) ; case 24: return(1) ; case 176: return(2) ; case 48: return(3) ; caεe 192: return(4) ;

)

) box ness(char *mesε)

{ int xl, yl, x2. y2, xpix_car, ypix_car, col, line, oldcolor; char 'box; xl = (int) (vc.numxpixels * 0.2); yl = (int) (vc.numypixels * 0.4); x2 = (int) (vc.numxpixels * 0.8); y2 = (int) (vc.numypixels * 0.6); xpix_car = vc.numxpixelε/vc.numtextcols; ypix_car = vc.numypixels/vc.numtextrowε; line = (int) (yl/ypix_car) ;

FEUILLE DE REMPLACEMENT

100

= (80 - strlen (mess) ) c»112 ; box = malloc( (unsigned int)_imagesize(xl,yl,x2,y2) ); _getimage( xl.yl,x2,y2, box); if(vc.mode != _HERCM0N0)

(

_setcolor(5) ;

_rectangle{jGBORDER, xl, l,x2,y2) ;

_rectangle[jGBORDER, xl+l,yl+l.x2-l,y2-l) ;

_rectangle(jGBORDER. xl+4,y1+ ,x2-4,y2-4) ;

_rectaπgle(jGBORDER, xl+5,yl+5,x2-5,y2-5) ; oldcolor = _setcolor(0) ;

_floodfill(xl + 6,yl + 6,oldcolor);

] else

(

_setcolor(5) ;

_rectangle(jGFILLINTERIOR, xl,yl,x2.y2) ;

_rectangle(jGFILLINTERIOR, xl+l,yl+l,x2-l,y2-l) ; oldcolor = _setcolor(0) ;

_rectangle(jGFILLINTERIOR, xl+4,yl+4.x2-4,y2-4) ;

_rectangle(_GFILLINTERI0R. xl+5.yl+5,x2-5,y2-5) ;

) _settextcolor(14) ; _settextposition(line + 3, col); _outtext(mess) ; bellO; clav() ;

_putimage(xl. yl, box, jGPSET) ; free(box) ; }

FEUILLE DE REMPLACEMENT

/*" ECRANS.C *"/ Sinclude "samdi.h" extern int col, co2, co3, co4, co5, co6, co7, co8; extern int vmode; extern struct videoconfig vc; ecranl()

{ eraseO ; c_move(1,1) ; clr_c() ; set_fore(col) set_back(co2) ; window(1, 1.22,80, "", 2) ; set_fore(co7) set_back(co2) ; windo (23,1,25,80, "",2) ; att bold() ; c_print(25,36," Statut "); reεet_att() ; εet_fore(co6) set_back(co5) ; cjprint(1.2,"

"); menu_top(1,4, "Communication",1) ; menu_top(l,19, "Local", 1) ; menu_top(1,26,"Eloigné", 1) ; menu_top(l,35, "Balayage de fréquences" , 1) ; menu_top(l,74,"Info",l) ; reεet_att() ; desεine_maitre() ; deεsine_esclave() ; }

deεεinejmaitre() l clean_ed (3,2,21,31); window(7,10,17,32,"",l) att_bold() ; c_print(7,12," Local ") reset_att() ; hline(11.31.10,l) ; hlinedl.31,14,1) ; c_print(10,10, ' c_print(14,10, c_print(10,32," -") c_print ( 14,32."(-") deεεine_ligneε() ; )

FEUILLE DE REMPLACEMENT

dessine_esclave() [ cleanj3dt(3,48.21.79) ; window(7,48,17,70,"".1) ; att_bold() ; c_print(7,60," Eloigné ") ; reset_att() ; hline(49.69,10.1) ; hline(49,69,14.1) ; c_print(10.48,' ") c_print(14,48,"- ") c_print(10.70." -") c_print(14,70." ") deεεine_lignes() ; J dessine_lignes() ( hline(3.9.10,l) ; hline(33.47,10,l) ; hline(33,47.14,l) ; hline(3,9,14,l) ; hline(71,78,10.1) ; hline(71.78,14.1) ; c_print(10,9,"~P") ; c_print(10,47,"~P") ; c_print(14,33,"~Q"); c_print(14,71,"~Q") ; ] ecranjadit(char 'titre,int mode)

( windowd, 1.25 , 80. titre, 1) ; if (mode ! = efface)

( set_fore(co8) ; εet_back(co2) ; c_print(3,16,"Entrez les informations nécessaires pour le lien"); reset att() ; c_print(6.18. "Nom du lien ") c_print(8,18, "Description c_print(10,18,"S téléphone local c_print(12,18,"Position local:") ; c_print(13,22,"S banque :"); c_print(1 .22,"« relais :") ; cjprint(16.18,"S téléphone éloigné:") ; c_print(18.18,"Position éloigné:") ; c_print(19.22,"S banque :") ; cjprint(20,22," relais :") ; set_fore(co6) set_back(co5) ;

switch(mode)

FEUILLE DE REMPLACEMENT

( caεe nouv: c_print(25.2, " "); c_print(25,4, "<ESC> Annuler - <F1> Sauvegarder - <F10> Quitter"); break; caεe edit: cjprint(25.2, "

"); c_print(25, 3, "<ESC> Annuler - <F1> Sauvegarder - <F2> Choisir autre lien - < Quitter") ; break; case efface: c_print(25,2, "

"); c_print(25,3,"<ESC> Annuler - <F1> Effacer - <F2> Choisir autre lien - < Quitter") ; break;

)

inform() ( set_fore(col) set_back(co2) ; menu_top(1,74, "Info", 1) ; reset att() ; save_box(9,19,15,61) ; set_fore(co7) -set_back(co3) ; window(9,19,15,61,"",2) ; set_fore(co7) set_back(co3) ; c_print(ll,21,"S") ; εet_fore(col) set_back(co2) ; c_print(ll,22,"yεtème d'"); set_fore(co7) -set_back(co3) ; c_print(ll,31,"Λ") ; set_fore(col) -set_back(co2) ; c_print(ll,32, "ccès et de ") ; set_fore(co7) set_back(co3) ; c_print(ll,43,"M") ; set_fore(col) -εe _back(co2) ; c_print(ll,44,"esure à "); set_fore(co7) -set_back(co3) ; c_print(ll,52,"DI") ; set_fore(col) set_back(co2) ; c_print(11,54,"stance") ; c_print(12,24, "Version 1.0 (c) Hydro-Québec 1991"); c_print(13,30, "Conçu par Trioniq Inc"); clav() ; recu_bo () ;

FEUILLE DE REMPLACEMENT

sete^totefi- -rffflcβ )

εtatut(char *meεs)

[ int ligne; i (!vmode) l set_fore(co8) ; εet_back(co2) ; clean_edt(24,3,24,78) ; c_print(24.4,meεε) ; reset_att{) ;

J else

(

_settextcolor(14) ; i (vc.numtextrowε == 30) ligne = 29; else ligne = vc.numtextrowε;

_εettextposition(ligne,1) ; jouttextf" ");

_settextposition(ligne, (80 - strlen(mess) ) / 2) ;

_outtext(mess) ;

_εettextcolor(7) ;

) ]

messjarreur(char *txtl, char *txt2)

[ save_bo (9.20,14,61); set_fore(co7) set_back(co2) ; windo (9,20.14,61," Erreur ",2); set_fore(col) set_back(co2) ; c_print(ll. (80 - strlen(txtl) )/2,txtl) ; c_print(12, (80 - strlen(txt2) )/2,txt2) ; bell(); clav() ; set_fore(col) set_back(co2) ; recu_box() ;

)

FEUILLE DE REMPLACEMENT

confirm(char'message) ( int rep; save_box(21,20,23.60) ; set_fore(co7) * set_back(co2) ; window(21,20,23, 60, " Confirmation ",2) ; set_fore(col) , * set_back(co2) ; c_print(22, (00 - strlen(message) )/2,message) ; do

( rep = clav() ;

) while(rep != 'o' ss rep != O' ss rep != 'n' ss rep != 'N') recu_box() ; return(rep) ; )

str_trim(char *str)

( char tempo[30] ; int i, in; strcpy(tempo,str) ; i = strlen(tempo) ; while(isspace(tempo[—i] ) ) fin = i + 1; for(i = 0;i < fin;i++) l tempo[i] = str[i] ;

) tempo[fin] = '\0'; strcpy(str,tempo) ; )

ecran_id() l int xl, yl, x2, y2, posx, nbypix, dim, i, J, sta_£on; struct xycoord polysidelβ] ; if(!_setvideomode(jMΛXRESMODE) )

( vmode = 0; return(-1) ;

) else vmode = 1;

FEUILLE DE REMPLACEMENT

106

_clearscreen(jGCLEΛRSCREEN) ; _getvideoconfig(εvc) ; sta_fon = _registerfonts("*.fon") ; switch(εta_ on) l case -1:

_settextcolor(15) ; _settextposition(15.22) ;

_outtext("Le fichier HELVB.FON est introuvable"); bell{) ; break; case -3: case -2:

_settextcolor(15) : _settextposition(15,21) ;

_outtext("Le fichier HELVB.FON est endommagé"); bell(); break; default: break;

] nbypix = vc.numypixels / vc.numtextrowε; switch(vc.numypixels)

( case 350: caεe 348: dim = 70; break; caεe 200: dim = 40; break; case 480: default: dim = 100; break;

} xl = (vc.numxpixelε - dim) / 2; yl = (vc.numypixels / 10); x2 = xl + dim; y2 = yl + dim; _setcolor(12) ; _rectangle(jGBORDER. 1, 1, vc.numxpixels - 1, vc.numypixels - 1) setcolor(14) ; -tllipse(jGBORDER,xl - 5, yl - 5, x2 + 5, y2 + 5)

_ellipse(jGBORDER,xl - 4, yl - 4, x2 + 4, y2 + 4) allipse(jGBORDER.xl - 3, yl - 3. x2 + 3, y2 + 3)

_ellipse(jGBORDER.xl - 2, yl - 2, x2 + 2, y2 + 2)

_ellipse(jGBORDER,xl - 1. yl - 1, x2 + 1. y2 + 1) _ellipse(jGBORDER, l, yl, x2, y2) ; allipεe(jGBORDER. l + 1, yl + 1. x2 - 1, y2 - 1)

_ellipse(jGBORDER.xl + 2, yl + 2, x2 - 2, y2 - 2)

_ellipse(jGBORDER,xl + 3. yl + 3. x2 - 3, y2 - 3)

_ellipse(jGBORDER,xl + 4, yl + 4, x2 - 4, y2 - 4)

FEUILLE DE REMPLACEMENT

+ 5, yl + 5, x2 - 5, y2 - 5) ;_ellipse(jGBORDER,xl

.85)

_εetfont("t'helv'hl5w8b") ;

_setcolor(15) ;

_moveto( (vc.numxpixels - _getgtextextent("REGION") ) / 2, y2 + (int) (nbypix * 1.5

/• y2 + 25 */

_outgtext("REGION") ;

_moveto( (vc.numxpixels - _getgtextextent("SΛGUENAY") ) / 2, y2 + (int) (nbypix *

) ;/* y2 + 40 */

_outgtext("SΛGUENAY") ;

_moveto( (vc.numxpixels - _getgtextextent("VERSION 1.01991") ) / 2,vc.numypixels

_setcolor(10) ;

_outgtext("VERSION 1.0 1991");

_setcolor(15) ;

_moveto(vc.numxpixels - 140,vc.numypixels - nbypix * 6)

_OUtgtext("DISTRIBUE PAR");

_moveto(vc.numxpixels - 125,vc.numy ixels - nbypix ' 5)

_outgtext("TRIONIQ INC.");

_moveto(vc.numxpixels - 125,vc,numypixels - nbypix * 4)

_outgtext("CHIC0UTIMI") ;

_moveto(vc.numxpixels - 130,vc.numypixels - nbypix * 3)

_outgtext("(418) 696-0469");

_setfont("t'helv'h28wl6b") ;

_setcolor(12) ;

_moveto(95,vc.numypixelε - nbypix * 6);

_outgtext("S. A. M. DI.");

_setfont("t'helv'hl8w9b") ; if(vc.numypixels != 200) (

_setcolor(3) ; for( i = 65, j = vc.numypixels - nbypix * 7; j < vc.numypixels -nbypix * 4;i—, (

_moveto(i,j) ; _lineto(i + 25,j) ; )

FEUILLE DE REMPLACEMENT

do

(

_moveto(i,j) ; _lineto(300, ) ; i—; j++;

} while(i > 5) ;

) _setcolor(12) ; poεx = 20; jmoveto(posx,vc.numypixels - nbypix * 3); _outgtext("S") ; _setcolor(7) ; poεx += (_getgtextextent("S") + 3) ; jmoveto(poεx,vc.numypixelε - nbypix * 3) ; _outgtext("ystème d' ") ; _setcolor(12) ; posx += _getgtextextent("ystème d' "); jmoveto(poεx.vc.numypixels - nbypix * 3) ; _outgtext("A") ; _εetcolor(7) ; posx += (_getgtextextent("A") + 3); _moveto(posx.vc.numypixels - nbypix * 3); _outgtext("ccès et de "); _setcolor(12) ; poεx += _getgtextexteπt("ccèε et de "); _moveto(poεx,vc. umypixels - nbypix * 3) ; _outgtext("M") ; _setcolor(7) ; posx += (jgetgtextextent CM" ) + 3) ; _moveto (posx, vc . numypixels - nbypix * 3) ; _outgtext("esure à " ) ; _εetcolor(12) ; posx += _getgtextextent("esure à "); jmoveto(posx,vc.numypixels - nbypix * 3) ; _outgtext("DI") ; _setcolor(7) ; posx += (_getgtextextent("DI") + 3); jmoveto(posx,vc.numypixels - nbypix * 3); _outgtext("stance") ;

_εetcolor(14) ;

_moveto( (vc.nu xpixelε - _getgtextextent("Tapez une touche...") ) / 2,vc.numypi

- nbypix * 2 + 2) ;

_outgtext("Tapez une touche...") ; clav() ; unregisterfonts() ;

_setvideomode(_DEFAULTM0DE) ; vmode = 0;

I

FEUILLE DE REMPLACEMENT

Sinclude <doε.h>

Sinclude <bios.h>

Sinclude <stdio.h>

Sinclude " ouche.c"

Sinclude <ctype.h>

Sinclude <math.h> int ins status≈O;

litf_int(lig,col,meεε,idef) int lig.col, 'idef; char messl] ; { int Imess.ldef.coll.i,j ,icol; char str120] ; lng = 0; lmesε = εtrlen(meεs) ; coll = col + lmeεε; sprintf(str," %d ".'idef); kc_form = lit^lf lig,coll,str ); if(strfθ) != '\0' !! kc_£orm == ESC) sεcanf(str, "%d".ide ) ; εprintf(str," %d ",*idef); if( kc_form >= 200 !! kc_form == ESC) return(kc_form) ; return(0) ;

FEUILLE DE REMPLACEMENT

litf_float(lig,col,mess,i 1t) int lig,col; char messl] ; float *iflt; l int Imess.ldef.coll.i, .icol; char str[20] ; lng = 0; reset_att() ; lmeεs = strlen(mesε) ; coll = col + lmesε; sprintf(str," %.2f ",*iflt); kc_form = lit_l( lig,coll.str ); if(str[0] != '\0' !! kc_form == ESC) sscanf(str. "%f",iflt) sprintf(str." %.2f ",'iflt); if( kc_form >= 200 \ kc_form == ESC) return(kc_form) ; return(0) ; ] litf_str(lig.col. ess,stri) int lig,col; char mesε[] ,strl[] ; l int Imess.ldef,coll.i,j ,icol; char str[80] ; lng = 0; reset_att() ; lmess = strlen(mess) ; coll = col + lmesε; εprintf(str." %ε ",strl); kc_form = lit_l( lig,coll.str ) ; if(str[0] != '\0' !! kc_form == ESC) strcpy(strl.str) ; sprint (str,"%s",strl) ; if( kc_form >= 200 i! kc_form == ESC) return(kc_form) ; return(O) ;

llitf_float(lig,col.str.lg) int lig,col,lg; char *str;

( kc_form = llitf_str (lig,col,str,lg) ;

FEUILLE DE REMPLACEMENT

(str,"%10.4f") ; Tr_numb c_print (lig,col+l,εtr) ; return(kc_form) ; ) llitf_str(lig,col,str1,1g,ce) int lig,col,lg; char 'strl; ( set_c() ; att_reverse() ; c_print (lig,col+1,strl) ; kc_form = lit_l( lig,col,strl,lg.ee ); clr_c() ; reεet_att() ; return(kc_form) ; }

Tr_numb (char* ptr.char *fl) ( float temp = 0.0; sscanf (ptr, "%f",Stemp) ; sprintf (ptr,f1,temp) ; ) litf_file(lig,col,mess,strl,exten,11,cl.12,c2) int lig,col.11.cl.12.c2; char mess[) ,strl[j ,exten[] ; l int i, ,flag; char tem [40] ,templ(40] ;

FILE 'i ile; kc_form = litf_str(lig,col,mess,strl) ; if( kc_form > 200 !! kc_form == ESC ) return(-1) ; flag = 0; for( i=0; i<strlen(strl) ; i++) if( strlli] == "' ) flag = 1; εtrcpy( temp,strl ) ; εtreati temp,exten ) ; if( flag )

( if( get_file( 11,cl.12.c2. temp .templ) == -1 ) return(-l); clrjaxt(templ) ; streatf temp , templ ) ; strcpy( strl, emp ) ;

) elεe

(

FEUILLE DE REMPLACEMENT .

ifile = fopen( temp ,"r"); if[ ifile == NULL ) return(0); fclose(ifile) ; clr_ext(temp) ; s rcpy( strl,temp ) ;

] form (lig,col,meεε,14) ; return(1) ;

J form (lig,col,meεε.In) int lig,col.In; char meεε[] ; ( c_print(lig,col-strlen(mess) ,mesε) fblank (lig.col+l.ln) ;

lit_l(lig,coll,εtr,lg,ce) int lig,coll,lg; char *str; l int icol,i,Idef,dep,pt_col; int xxl=lig,yyl=coll; int x_ins=72; int y_ins=24; char push[80] ; set_fore(0) ; set_back(7) ; sprintf (push,"%s".str) ; strnset (push.32,1g) ;

Idef = strlen(str) ; lng = lg; i=0; icol = coll+1; c move(lig.coll+l) ; kc = 0; while( 1 ) l kc = clav() ; εwitch (kc)

( case K_F1 : return(K_F1) ; break; case K_F3 : return(K_F3) ;

FEUILLE DE REMPLACEMENT

break; case _F4 : sprintf (str, "%s",push) ; c_print (xxl.yyl+l.str) ; i=0; icol = col1+1; c_move (lig,icol); break; case F_D : if (i < lng) ( i++; icol++; c_move(lig,icol) ; ) break; case K_F2 : return(kc) ; break; case K_F6 : return(K_F6) ; break; case K_F5 : return(kc) ; break; caεe F_H : return(kc) ; break; case K_F9 : return(K_F9) ; break; case K_F10 : return(kc) ; break; case F_B : return(kc) ; break; case F_G : if (i >0 ) ( i—; icol—; c move(lig,icol) ; ) break; case K_F7 : return(K_F7) ; break; case K_F8 : return(K_FB) ; break; case 273 : /*»***« p g Up * »*.*/ return(273) ; break; caεe 281 : /*" Pg Down *"/ return(281) ;

FEUILLE DE REMPLACEMENT

break; case DEL : if { i < lg-1) ( pt _col=icol ; for (dep=i ; dep < lg-1 ; dep++ ) [ str[dep]=str(dep+l] ; c_move(lig,pt_col) ; put_car(str[dep] ) ; pt_col++ ; ) str [dep] =' ' ; cj ove ( lig , t_col ) ; put_car(str[dep] ) ; cjmove (lig, icol) ; ) else if( i==(lg-l)) ( strlil≈' '; cjmove (lig , icol) ; put_car(εtrli] ) ; ) break; caεe ESC : return(kc) ; break; case RET: return(kc) ; break; case INS: if (ins_status==l) ( reset_att() ; c_prin (y_ins,x_inε," ") ; att_reverse() ; inε_status=0; }

/* else c_print(y_ins,x_ins,"Insert") ; */ break; case BΛCK : i ( i 1= 0) (

1—; icol—; pt_col=icol; for(dep=i;dep<lg-l;dep++) ( str[dep]=str[dep+l] ; cjmove ( lig, pt_col) ; put_car(str [dep] ) ; pt_col++; J st [dep] =' ' ;

FEUILLE DE REMPLACEMENT

cj-nove(lig,pt_col) ; put_car(str[dep] ) ; cjmove(li ,icol) ; ) break; default : if ( (_bios_keybrd (_ EYBRD_SIIIFTSTΛTUS ) s 128 ) ==128 ) l

/* c_print (y_ins , x_ins , "Ecraser" ) ; * / ins_statuε=l ; if ( (kc < 200) SS ( i < lng) ) ( pt_col=coll+lg; for (dep=lg-l;dep>idep—)

{ εtr[dep]=str[dep-1] ; c_move(lig,pt_col) ; put_car(strIdep] ) ; pt_col—; ) ) ) if ((kc <200) ss( i < lng) ) l strli] = toupper(kc) ; c_move(lig,icol) ; if( i < lng ) ( put_car(strli] ) ; i++; icol++; cjmove(lig,icol) ; } ) )

) return(kc) } get_file(ll,cl,12,c2,path,nfich) int 11,cl.12,c2; char pathl) ,nfich[] ; l int i,j .nlig.lig,col.pos,posl,ncol.o£f_lig; εtruct find_t c_file; char εtr180] ; if( jdoε_findfirst(path,_Λ_NθRMAL,sc_file) != 0 ) return(-l); ncol = (c2-cl-l)/15; nlig = 12-11-3; if( ncol <= 0 ! ! nlig <= 0 ) return(-l); strcpy( fillO] ,c_file.name) ;

FEUILLE DE REMPLACEMENT

εize lO] = c_file.εize; nfil = 1; while ( _dos_findnext(sc_file) == 0 ) l strcpy(fil[nfil] ,c_file.name) ; sizelnfil] = c_ ile.size; nfil++; i ( nfil >= 100 )break;

) for( i=0 ; i nfil ; i++)

( poεl[i] = i/ncol ; poεcîi] = cl + 2 + mod(i,ncol) *15;

] save_box(11,c1,12.c2) ; att_reverεe() ;

C_box(ll.cl.l2.c2.0) ; c_print(12.cl+2."0 : <RET> SORTIE:<ESC>") ; sprint (str." FICHIER: %ε ",path); c_print(ll,cl+2,str) ; reεet_att() ; pos = posl = 0; for( i=0 ; Knfil ; i++) if ( εtrcmpi (fil [il .nfich) == 0 ) poε = i; strcpy ( str, fil [pos] ) ; strcpy( filtpos] , fil [0] ) ; strcpy( fillO] ,str ) ; poε = 0; off_lig = 0 ; raf_fil(1,pos.posl.Soff_lig,ncol,nlig,nfil.11,cl) ; kc = 0; while( kc 1= 13 S& kc != ESC ) { kc = clav() ; posl = pos; εwitch{ kc ) [ case F_H: if( pos < ncol )break; pos = pos-ncol; raf_fil(0,pos,pos1,Soff_li ,ncol.nlig,nfil,11,cl) ; break; case F_B: if( pos >= nfil-ncol )break; pos = pos+ncol; raf_fil(0,pos.posl.soff_li .ncol.nlig,nfil,11,cl) ; break; case F_D: i ( pos >= nfil )break; pos++; raf_ il(0,pos, osl,Soff_lig,ncol,nlig,n il,11,cl) ; brea ; case FjG: if( pos == 0 )break;

FEUILLE DE REMPLACEMENT

pos—; raf_fil(0,pos,posl,Soff_lig,ncol,nlig,nfil,11,c1) break;

) ) reset_att() ; recu_box() ; if( kc == ESC ) return(-l); εtrcpy(nfich,fillpoε] ) ; i = εtrlen(path)-l; while( pathli] != 92 ss pathli] != ':' ss i>=0 ) i—; pathli+1] = 0; return(0) ;

) raf_fil(mod,pos,pos1,off_lig,ncol,nlig,n il,11,c1) int mod.pos,posl, *off_lig,ncol,nlig,n il,11,cl;

( int pl,pc,i; pi = posllpos) ; if( pi < *off_lig ! ! pi >= (*off_lig+nlig) !! mod == 1) ( if( pi < *off_lig ss *off_lig > 0) « off_lig = 'off_lig - 1; if( pi >= (*off_lig+nlig) ) *off_lig = *off_lig + 1; c_box( 11+1.cl+l.ll+nlig+l,cl+ncol*15.1) ; for( i=0 ; Knfil ; i++)

( pi = poslli] - *off_lig; i£{ pi < 0 î ! pi >= nlig ) continue; if( i =- pos ) att_reverse() ; c_print( pl+11+2 , poscli] , filli) ); cjmove( pl+11+2 , poscli] ); reset_att() ;

) ) else ( c_print( posllposl) Hl+2-*off_lig , posclposl] , flllposl] ) ; att_reverse() ; c_print( posl[pos]+ll+2-*off_lig , posclpos] , fillpos] ) ; cjmove( posl[poε]+ll+2-*off_lig , posclpos] ); reset_att() ; )

) mod(i.d) int i.d; {

FEUILLE DE REMPLACEMENT

double ff; return ( (int) fmod( (double) i , (double) d ) ) ; 1 clr_ext (str) char str l] ; ( int i; i=0 ; while ( str [i] l= 0 )

[ if ( str [i] == ' . ' ) { str [i] = 0 ; break; ) i++;

) ] llitf_int(lig,col, strl,lg,cc) int lig, col, lg; char 'strl ; l set_c ( ) ; att_reverse() ; c_print (lig.col+l.strl) ; kc_form = lit_2( lig.col.εtrl.lg.cc ) ; clr_c() ; reset_att() ; return(kc_form) ; )

/*** fonction modifiée 31.1.91 pour programme Hydro-Quebec pour accepter « "/

/*** un 'P' ou ',' afin d'indiquer une pauεe dans la commande au modem ***/

/*** pour signaler les numéros de téléphone ***/ lit_2(lig,coll.str,lg,cc) int lig.coll,lg; char *str;

( int flag = 0; int icol.i,Idef.dep,pt_col; int xxl=lig,yyl=coll; int x_ins=72; int y_ins=24; char push[80] ; set_fore(0) ; set_back(7) ; sprintf (push,"%s".str) ; strnset (puεh,32,1g) ;

Idef = εtrlen(str) ; lng = lg; i=0; icol = coll+1; cjmove(lig.coll+1.) ;

FEUILLE DE REMPLACEMENT

119

kc = 0; while( 1 )

{ kc = clav() switch (kc) case _F1 : return(K_F1) ; break; case K_F2 : return(kc) ; brea ; case K_F3 : return(K_F3) ; break; case K_F4 : sprintf (str, "%s" ,push) ; c_print (xxl,yyl+l,str) ; i=0; icol ≈ col1+1; cjmove (lig,icol) ; break; case K_F5 : return(kc) ; break; caεe K_F6 : return(K_F6) ; break; caεe K_F7 : return(K_F7) ; break; case K_F8 : return(K_F8) ; break; case K_F9 : return(K_F9) ; break; case K_F10 : return(kc) ; break; caεe F_D : if (i < lng) ( i++; icol++; c_move(lig,icol) ; ) break; caεe F_H : return(kc) ; break; case F_B : return(kc) ;

FEUILLE DE REMPLACEMENT

break; case FjG : if (i >0 ) ( i—; icol—; cjmove(lig,icol) ; ) break; case 273 : /. - - * - - p g up »* » **/ return(273) ; break; case 281 : /*" Pg Down "*/ return(281) ; break; case DEL : if ( i < lg-1) l pt_col=icol; for(dep=i;dep<lg-1;dep++) ( str [depl =str[dep+l] ; cjτtove (lig, pt_col) ; put_car(str[dep] ) ; pt_col++; ) str [dep] =' ' ; cjmove (lig, pt_col) ; put_car(str[dep] ) ; cjmove (lig, icol) ; ] elεe if ( i== (lg-l) ) ( str[i]=' '; cj-nove(lig,icol) ; put_car(str[i] ) ; ) break; case ESC : return(kc) ; break; case RET: /* manon » / return(kc) ; break; /'case INS: * * * * * enlevé 6.2.91 (problème avec insert) if (ins_status==l) [ reset_att() ; c_print(y_ins. _ins," ") ; att_reverse() ; ins_statuε=0; ) elεe c_print(y_ins,x_inε,"Insert") ; . break; */ case 9 : /* tab */

FEUILLE DE REMPLACEMENT

break; case BΛCK : if( i != 0) l i—; icol—; pt_col=icol; for(dep=i;dep<lg-l;dep++) I str[dep]=strldep+1] ; c move(lig,p jcol) ; put_car(str[dep] ) ; pt_col++; ) str[dep]=' cjmove(lig,pt_col) ; put_car(str[dep] ) ; c_move(lig,icol) ;

)break; default : if ( (_bioε_keybrd(_KEYBRD_SHIFTSTATUS)S 128) ==128) {

/* c_print(y_inε,x_ins, "Ecraεer") ; */ ins_status=l; / » ** modif 31.1.91 "*/ if ( (kc > 47 ss kc < 58 i! kc == 'p' !! kc == 'P' == ', ') ss (i < lng) )

( pt_col=coll+lg; for (dep=lg-l;dep>idep—)

{ strldep]=strldep-1] ; c nove(lig,pt_col) ; put_car(str[dep] ) ; ptjcol—; ) ) ) /* else *** enlevé 6.2.91 (problème avec insert) "* ( if (i == 0 ss flag == 0) ( sprintf (str, "%s",push) ; c_print (xxl.yyl+l.str) ; i=0; icol = col1+1; c_move (lig,icol) ; flag = 1; )'/ /*" modif 31.1.91 "*/ if ( (kc >47 SS kc <58 !! kc == 'p' \ kc == 'P' == ',') SS( i < lng) ) ( εtrli] = toupper(kc); cjmove(li ,icol) ;

FEUILLE DE REMPLACEMENT

if( i < lng ) ( put_car(εtr(i] ) ; i++; icol++; cjmove(lig,icol) ; )

/* } 6.2.91 */

) return(kc)

FEUILLE DE REMPLACEMENT

Même si la présente invention a été expliquée en illustrant un mode de réalisation préféré de celle-ci, il est à noter que toute modification de ce mode de réalisation préférentiel, à l'intérieur de la portée des revendications qui suivent ne doit pas être considérée comme un changement ou une altération de la nature et de la portée de la présente invention.