Brevet FR3125616A1 — publié le 20230127

L’invention concerne un support (1) comportant des informations optiquement discernables par un utilisateur et mémorisant des données numériques et des moyens de décoder les données numériques, les informations optiquement discernables comprennent une succession de : a) un texte explicatif d’un procédé à mettre en œuvre pour décoder les données numériques ; b) un algorithme (110) à transcrire de façon à initialiser une mémoire de travail d’une machine virtuelle et exécuter cette machine virtuelle ; d) une liste de caractères alphanumériques (118, 119, 120) à saisir codant des données de remplissage de la mémoire de travail et un programme de décodage d’une première matrice ; e) des première et deuxième matrices à numériser (122, 123) incluant des symboles binaires en noir et blanc à un emplacement prédéterminé du support, incluant respectivement des données numériques d’un programme de décodage de la deuxième matrice (123) et les données numériques mémorisées à décoder. Figure à publier avec l’abrégé : Fig. 1 Support optiquement discernable par un utilisateur, figurant des données numériques et le moyen de les décoder L’invention concerne l’archivage de données numériques à long terme, et en particulier l’archivage de données numériques sur des périodes où les standards des matériels ou des codages peuvent être amenés à varier dans de grandes proportions. Pour certains dispositifs ou processus de sécurité, par exemple dans le domaine du nucléaire, la durée nécessaire pour assurer le suivi de dispositifs ou de matériaux peut dépasser un ou plusieurs siècles. Pour assurer la sécurité de futurs intervenants, il est important de permettre à ceux-ci de conserver un accès à des données numériques relatives à la sécurité. Par ailleurs, pour des applications culturelles, il est important de garantir l’accès à un héritage culturel numérique pour les générations futures. La plupart des supports accessibles par lecture optique, électronique ou magnétique sont confrontés à des durées de vie insuffisantes ou à une obsolescence trop rapide pour des applications de sécurité à très long terme ou pour garantir la conservation et la consultation du patrimoine culturel. L’invention vise à résoudre un ou plusieurs de ces inconvénients. L’invention porte ainsi sur un support comportant des informations optiquement discernables par un utilisateur, ces informations mémorisant des données numériques et des moyens de décoder les données numériques, les informations optiquement discernables comprennent une succession de : a) un texte explicatif d’un procédé à mettre en œuvre pour décoder les données numériques, le texte explicatif incluant : i) une instruction de numérisation de matrices noir et blanc de symboles binaires à un emplacement déterminé du support ; ii) une instruction de paramétrage d’un programme à réaliser pour convertir les images numérisées en séquence numérique ; iii) une instruction de génération d’une séquence numérique à partir de l’application du programme réalisé et appliqué aux matrices numérisées ; b) un algorithme à transcrire dans un langage de programmation, de façon à initialiser une mémoire de travail d’une machine virtuelle et de façon à exécuter cette machine virtuelle ; d) une liste de caractères alphanumériques à saisir codant notamment des données de remplissage de la mémoire de travail de la machine virtuelle et un programme de décodage d’une première matrice de symboles binaires ; e) des première et deuxième matrices à numériser incluant des symboles binaires en noir et blanc, disposées à un emplacement prédéterminé du support, la première matrice incluant des données numériques d’un programme de décodage de la deuxième matrice, la deuxième matrice contenant les données numériques mémorisées à décoder. L’invention porte également sur les variantes suivantes. L’homme du métier comprendra que chacune des caractéristiques des variantes suivantes peut être combinée indépendamment aux caractéristiques ci-dessus, sans pour autant constituer une généralisation intermédiaire. Selon une variante, les symboles de la première matrice sont des points noirs ou blancs. Selon encore une variante, le support se présente sous la forme d’une succession de pages discernables par un utilisateur et ordonnées par des indices discernables par l’utilisateur sur chaque page du support. Selon une autre variante, le support est sélectionné dans le groupe constitué des feuilles de papier, des microfilms, des microfiches, des films de cinéma, et des plaques en verre, saphir ou céramique. Selon encore une autre variante, le texte explicatif inclut au préalable une synthèse des différentes étapes à mettre en œuvre pour décoder lesdites matrices. Selon une variante, les premières informations optiquement discernables sur le support comprennent un explicatif de la structure des informations présentes sur le support et un explicatif des données numériques stockées. Selon une autre variante, la liste de caractères alphanumériques à saisir est précédée par c) une instruction de saisie de caractères alphanumériques. Support comportant des informations optiquement discernables par un utilisateur tel que défini ci-dessus, dans lequel la première ou la deuxième matrice à numériser comprend l’alternance d’un premier cadre noir , d’un cadre blanc et d’un deuxième cadre noir. Support comportant des informations optiquement discernables par un utilisateur tel que défini ci-dessus, dans lequel la première ou la deuxième matrice à numériser comprend des lignes crénelées incluant chacune un long trait ponctué à intervalle régulier de petits traits perpendiculaires au long trait. Support comportant des informations optiquement discernables par un utilisateur tel que défini ci-dessus, dans lequel l’instruction de génération d’une séquence numérique à partir de l’application du programme réalisé comprend une instruction d’organisation de la séquence numérique en mots machine. D'autres caractéristiques et avantages de l'invention ressortiront clairement de la description qui en est faite ci-après, à titre indicatif et nullement limitatif, en référence aux dessins annexés, dans lesquels : est une représentation schématique d’un support selon un exemple de mise en œuvre de l’invention ; est une représentation schématique d’une page d’introduction du support de la ; , , , , , , , , , , , et sont des représentations schématiques de différentes pages du support de la ; est une représentation grossie d’un exemple de matrice de données numériques mémorisées. L’inventeur est parti du principe que des supports en papier, ou tout autre support comportant des informations optiquement discernables par un utilisateur pour leur lecture, pouvaient présenter une durée de vie très importante dans de bonnes conditions de conservation. Cette durée de vie peut être très supérieure à celle d’un support à lecture optique par laser ou magnétique. Par conséquent, un tel type de support a été choisi en vue de mettre en œuvre l’invention. La est une représentation schématique d’un support 1 selon un exemple de mise en œuvre de l’invention. Le support 1 comporte des informations optiquement discernables par un utilisateur. Ces informations mémorisent des données numériques et des moyens de décoder les données numériques. Dans les exemples illustrés, le support 1 comprend des feuilles de papier 10 à 1n, ordonnées en succession, par exemple au moyen de numéros de page. Chaque à 15 correspond à une page respective du support 1 de cet exemple. Bien que l’exemple ait été décrit en référence à un support 1 comprenant des feuilles de papier, d’autres supports comportant des informations optiquement discernables par un utilisateur peuvent être envisagés selon l’invention, par exemple microfilm, microfiche, film de cinéma, plaque ou disque (en verre, saphir ou céramique par exemple). Les feuilles de papier 10 à 1n comportent avantageusement chacune un indice discernable à l’œil par un utilisateur, permettant de les ordonner. A la , le support comporte dans une page d’introduction, incluant un explicatif 100 de la structure du support et des informations restituées. La page d’introduction peut comprendre un indice dissocié du reste des pages, par exemple un caractère alphabétique ou une valeur 0, afin de pouvoir traiter cette page indépendamment du reste du support 1. Un exemple d’un tel explicatif 100 est fourni dans le tableau suivant à titre d’exemple : INTRODUCTION La présente partie liminaire est réservée à des informations définies par l’utilisateur, par exemple : Un fichier numérique est transcrit dans les pages qui suivent, après un descriptif de la procédure qui en permet la restitution au moyen d’un quelconque dispositif informatique actuel ou futur et d’un scanner. Les 12 pages du descriptif (incluant les deux premiers codes-barres, dénommés « emblèmes » dans le descriptif) constituent une amorce complète de restitution, entièrement autosuffisante, qui ne nécessite aucun matériel, logiciel, outil ou système informatique spécifique. Hyères, le 18 juin 2021 INFORMATIONS RESTITUÉES À l’exécution de l’algorithme, le nom du fichier numérique est restitué dans la séquence de désignation et ses données sont celles de la séquence de sortie (voir sections « Pour démarrer » et « Algorithme de restitution des informations numériques » en pages 1 à 5). Ainsi, dès le symbole 4809 fourni par l’algorithme, celui-ci peut être arrêté. Il convient alors de créer un fichier, nommé selon les octets accumulés dans la séquence de désignation, afin d’y écrire les octets accumulés dans la séquence de sortie. Il est à noter que la création du fichier peut intervenir dès la fourniture du symbole 4808. Ses données peuvent ensuite être écrites progressivement pendant le déroulement de l’algorithme. Le support 1 comporte une partie préalable incluant à la fois des explications et un algorithme de restitution d’une séquence numérique comprenant une machine virtuelle. Une telle partie préalable (figures 2 à 12) peut également être désignée par le terme amorce. Le support 1 comporte un texte explicatif d’un procédé à mettre en œuvre pour décoder des données numériques présentes sur une autre partie du support 1 (figures 13 à 15). La description va tout d’abord donner un exemple de texte explicatif du procédé à mettre en œuvre pour décoder les données numériques. La principale caractéristique de la partie préalable ou amorce est de fournir une succession de moyens techniques permettant de mettre en œuvre et valider progressivement, par étapes, un programme de décodage des données numériques mémorisées sur l’autre partie du support 1. A la , le support comporte en page 1 (indice correspondant au début des informations et instructions pour mettre en œuvre le décodage) une partie du texte explicatif. La page 1 comporte ainsi avantageusement une synthèse 101 du procédé de décodage, une instruction 102 de numérisation de matrices en noir et blanc incluant des symboles binaires à un emplacement déterminé du support, la définition 103 d’un programme de conversion des images à réaliser, une instruction 104 de génération d’une séquence numérique à partir de l’application du programme de conversion réalisé appliqué aux images numérisées, et une illustration 105 d’un exemple de séquence numérique obtenue à partir du programme de conversion. Un exemple de synthèse du procédé de décodage 101 est reproduite ci-dessous. Cette synthèse 101 récapitule les différentes étapes à mettre en œuvre pour décoder des informations optiquement discernables. Un exemple d’une telle synthèse 101 est fourni dans le tableau suivant à titre d’exemple : POUR DEMARRER Les pages directement lisibles à partir de la présente page 1 et jusqu’à la page 10 décrivent la procédure à suivre pour restituer les informations numériques contenues dans le document. Les pages suivantes figurent ces informations numériques transcrites sous forme d’emblèmes (grilles noir et blanc de points ou lignes crénelées). Celles-ci peuvent être automatiquement restituées au moyen d’un quelconque ordinateur en suivant la procédure décrite. Les sept étapes de la procédure à réaliser successivement, détaillées ci-après, sont les suivantes : 1. numériser chaque emblème vers une image ; 2. réaliser un programme de conversion des données numériques d’image ; 3. générer une séquence d’entrée unique à partir des données ainsi converties de toutes les images ; 4. adapter l’algorithme présenté en pages 2 à 5 dans le langage informatique que le programmeur maîtrise le mieux ; 5. saisir toutes les lettres listées des pages 8 à 10 ; 6. exécuter l’algorithme pour restituer les informations numériques en séquences de désignation et de sortie ; 7. en cas de succès, optionnellement adapter le supplément accélérateur de l’algorithme présenté en pages 5 à 7, puis exécuter l’algorithme ainsi amélioré qui nécessite de saisir seulement les lettres listées en pages 8 et 9. Les données numériques manipulées lors de ces différentes étapes sont des entiers naturels, c’est-à-dire les nombres positifs 0, 1, 2, 3, etc. Une donnée numérique dont la valeur est limitée à 255 est appelée « octet ». Un octet peut ainsi prendre n’importe quelle valeur de 0 à 255. De même un « seizet », de capacité double et dont la valeur est limitée à 65535, peut prendre n’importe quelle valeur de 0 à 65535. La séquence d’entrée est définie comme un ensemble de seizets ordonnés successivement du premier au dernier, tandis que la séquence de sortie, et la séquence de désignation qui l’identifie, sont définies chacune comme un ensemble d’octets ordonnés successivement du premier au dernier. Une instruction 102 de numérisation de matrices en noir et blanc de symboles binaires à un emplacement déterminé du support est fournie. L’instruction 102 peut comprendre des recommandations sur la numérisation et/ou le traitement de l’image numérisée d’une matrice de symboles binaires. Un exemple d’une telle instruction 102 est fourni dans le tableau suivant à titre d’exemple : EMBLEMES NUMERISES À partir de la page 11, chaque page contient un emblème (grille noir et blanc) qui doit être numérisé (on dit aussi « scanné ») vers des données d’image matricielle, c’est-à-dire représentant l’espace de l’image par un ensemble de points juxtaposés. Le processus de numérisation ne doit engendrer aucune déformation géométrique (conservation des bordures rectilignes du cadre de l’emblème) et il est recommandé de ne faire intervenir aucun traitement des points (lissage des contours, diffusion d’erreur, etc.). L’espace de l’image doit dépasser la superficie de l’emblème de quelques points au-delà de son cadre, sans toutefois dépasser la surface de la page. Si l’espace de l’image mesure par exemple 19 x 29 centimètres, la taille de la matrice d’image doit être au minimum de 4488 x 6850 points. L’orientation de l’image n’est pas importante, de même à ce stade que la composition des données numériques représentant les points de l’image (représentation couleur ou noir et blanc, positive ou négative, précision des nuances), pourvu que la distinction entre un point noir et un point blanc soit nette. Une définition ou paramétrage 103 d’un programme à réaliser pour convertir les images numérisées en séquence numérique est fourni. Cette définition peut comprendre l’ordonnancement de mots ou bits dans l’image numérisée. Ces mots peuvent définir d’une part la géométrie de l’image numérisée, et d’autre part une représentation linéaire de la luminance de chaque point de l’image numérisée. Ces instructions, telles que celles contenues dans le tableau ci-dessous et illustrées dans une illustration graphique 105, sont ensuite destinées à permettre de générer une séquence numérique à partir du programme réalisé. PROGRAMME DE CONVERSION DES IMAGES Une fois les emblèmes numérisés vers des images, il est nécessaire de concevoir un programme pour convertir les données de chacune des images vers une séquence de seizets composée comme suit : - premier seizet de la séquence : largeur de la matrice d’image en nombre de points - deuxième seizet de la séquence : hauteur de la matrice d’image en nombre de points - chaque seizet suivant dans la séquence : représentation linéaire de la luminance d’un point de l’image, la valeur 0 représentant le noir le plus sombre et la valeur 65535 représentant le blanc le plus clair, ou inversement ; il est possible de représenter la luminance des points sur un intervalle plus restreint de valeurs, par exemple de 5 à 253, une différence d’au moins 3 devant cependant séparer les valeurs limites minimale et maximale de l’intervalle ; les points de l’image sont ordonnés par ligne de gauche à droite ; les lignes sont ordonnées du haut en bas de l’image. Une instruction 104 de génération d’une séquence numérique à partir de l’application du programme de conversion réalisé, appliqué aux matrices numérisées, est fournie sur le support. Un exemple de définition de la séquence numérique est fourni en référence au tableau suivant : SÉQUENCE D’ENTRÉE L’algorithme qui suit accède aux données converties de toutes les images sous la forme d’une unique séquence de seizets qualifiée de « séquence d’entrée ». Dans cette séquence, les données converties de l’image correspondant à l’emblème de la page 12 suivent directement les données converties de l’image correspondant à l’emblème de la page 11, et ainsi de suite. Un seizet de valeur 0 termine la séquence. Plus précisément, le seizet représentant la largeur de la matrice d’image de l’emblème de la page 12 suit directement en séquence le seizet représentant la valeur de luminance du point tout en bas et à droite de l’image de l’emblème de la page 11. De même, la valeur 0 finale suit directement le dernier seizet de l’image du dernier emblème. La génération de la séquence d’entrée peut se faire intégralement préalablement à l’exécution du programme adapté de l’algorithme, ou bien progressivement au moment de chaque accès de ce programme au seizet suivant dans la séquence. A la , le support comporte en page 2, une instruction 106 d’adaptation d’un algorithme dans un langage de programmation. L’instruction 106 explique également le début du déroulement de l’exécution de l’algorithme. Un exemple d’instruction est donné dans le tableau suivant : ALGORITHME DE RESTITUTION DES INFORMATIONS NUMÉRIQUES L’étape suivante à réaliser pour restituer les informations numériques contenues dans le document est l’adaptation par un programmeur d’un algorithme simple dans le langage informatique généraliste et efficace de son choix. Le fonctionnement des instructions de l’algorithme doit être strictement respecté lors de l’adaptation, mais les instructions du programme informatique résultant peuvent prendre si besoin une forme très différente. Une fois l’algorithme adapté, le programmeur peut vérifier que l’exécution de son programme est correcte si celui-ci affiche très rapidement après le démarrage la valeur 1000, invitant l’utilisateur à saisir les lettres listées à partir de la page 8. Si cette valeur ne s’affiche pas, il convient d’étudier en détail le déroulement du programme et sa conformité avec l’algorithme décrit. La première affectation de la variable ordre à la valeur 8 indique la bonne saisie des valeurs du tableau de mémoire au début de l’algorithme (voir page 3). Dès lors, la valeur 1000 doit s’afficher après 10 itérations de la boucle « Tant que » A la , le support comporte avantageusement en page 2, un explicatif 107 sur des résultats renvoyés à l’affichage durant l’exécution du programme correspondant à l’algorithme. Un exemple d’explicatif 107 est donné dans le tableau suivant : Dans un deuxième temps, le programmeur peut vérifier que la saisie de lettres quelconques aboutit à l’affichage du message « Erreur sur la ligne ! Veuillez la saisir à nouveau. » (symbole 32800), suivi du réaffichage du numéro de ligne. À l’inverse, la saisie des lettres correctes de la ligne doit afficher directement le numéro de la ligne suivante sans message d’erreur. Une fois toutes les lettres nécessaires saisies, l’exécution de l’algorithme se poursuit par le déchiffrage des emblèmes numérisés. À ce stade de l’exécution de l’algorithme, des symboles de résultat sont fournis à l’utilisateur. Ces symboles permettent de vérifier le bon déroulement du déchiffrage et de la restitution des informations. Le tableau ci-dessous les présente dans leur ordre de survenance lors du déroulement de l’algorithme. La suite de symboles jusqu’au symbole 4806 se répète pour chaque image, le symbole 4401 n’étant fourni qu’à partir de la troisième image. Symbole Signification 4801 nombre de points de l’image courante déterminé, démarrage de la réception de ces points 4802 seuil entre noir et blanc évalué dans l’image courante 4803 détection en cours du cadre de l’emblème (répétition éventuelle) 4804 configuration géométrique de l’emblème détectée 4401 emblème version 1 détecté, démarrage de sa binarisation 5001 et plus binarisation de la ligne numéro (symbole – 5000) de l’emblème (numéros 1 à 381, initialement) 4805 démarrage du déchiffrage des données contenues dans l’emblème (veuillez patienter) 4806 données contenues dans l’emblème déchiffrées correctement 4807 restitution d’informations dorénavant correctes 4808 séquence de désignation complètement restituée, restitution à venir de la séquence de sortie 4809 séquence de sortie complètement restituée (voir page i, section « Informations restituées ») Avantageusement, le support comporte un explicatif 108 de messages d’erreur potentiellement renvoyés par le programme durant son exécution. Un exemple d’explicatif 108 est donné dans le tableau suivant : L’algorithme peut aussi fournir à l’utilisateur des symboles d’erreur, listés dans le tableau ci-dessous avec les causes possibles d’erreur. Symbole Signification Causes possibles d’erreur 32800 Erreur sur la ligne ! Veuillez la saisir à nouveau. L’utilisateur a saisi de façon incorrecte les lettres de la ligne demandée par le programme, ou bien l’algorithme a été mal adapté. 32801 taille de la matrice de l’image courante très faible ou erronée La taille de la matrice d’image est peut-être trop faible. Sinon, la conversion vers la séquence d’entrée ou son accès par le programme adapté de l’algorithme pourraient être erronés (comme lorsque la valeur 0 finale est insérée prématurément). 32802 hauteur de la matrice de l’image courante trop élevée La hauteur de la matrice d’image ne doit pas dépasser 49152 points (une hauteur de 6850 points est cependant suffisante). 32803 cadre de l’emblème non détecté dans l’image courante Idem symboles 32801 ci-dessus ou 32806 ci-dessous. 32804 configuration géométrique de l’emblème incorrecte Idem symboles 32801 ci-dessus ou 32400 ci-dessous, ou bien l’image a peut-être été numérisée en miroir s’il s’agit de l’une des deux premières images. 32805 signature de l’emblème incorrecte Les deux premières images sont peut-être interverties dans la séquence d’entrée. Sinon, idem symbole 32806 ci-dessous. 32806 données déchiffrées de l’emblème contenant des altérations La taille de la matrice ou le contraste de l’image sont peut-être trop faibles. Sinon, l’emblème est peut-être détérioré, mal centré ou mal orienté dans l’image. L’épaisseur des quatre lignes extérieures du cadre de l’emblème doit être la même que celle de l’espace entre les deux lignes d’une bordure de ce cadre. 32807 restitution d’informations dorénavant altérées La séquence d’entrée contient trop peu d’emblèmes dont les données ont pu être déchiffrées correctement. 32808 tableau de mémoire trop petit La taille du tableau de mémoire en seizets doit être au minimum de 3 702 784 + (taille de la matrice d’image). Par exemple, si chaque image est numérisée avec une taille de 4488 x 6850 points, la taille du tableau de mémoire ne doit pas être inférieure à 34 445 584 seizets. 32400 type d’emblème incorrect Idem symbole 32806 ci-dessus, ou bien l’image pourrait être la répétition de l’une des deux premières images de la séquence d’entrée. 32401 version non détectée Idem symbole 32806 ci-dessus. 32402 à 32431 version non prise en charge Un emblème de version plus récente (2 à 31, correspondant respectivement aux symboles 32402 à 32431) a été détecté mais n’est pas pris en charge. autre grave dysfonctionnement du programme L’algorithme a été mal adapté. Pour corriger les erreurs, le programmeur doit étudier en détail le déroulement de son programme et vérifier sa conformité avec l’algorithme décrit. A la , le support 1 comporte avantageusement en page 3 un explicatif 109 des notations utilisées dans un algorithme détaillé dans la suite du support 1. Un exemple d’explicatif 109 est donné dans le tableau suivant : Notation Signification ( ) L’expression spécifiée entre les parenthèses est évaluée prioritairement par rapport aux expressions situées à gauche et à droite des parenthèses. ← Affectation : copie du résultat de l’évaluation de l’expression située à droite dans le terme situé à gauche + Addition : somme des expressions situées à gauche et à droite – Soustraction : différence entre l’expression située à gauche et celle située à droite * Multiplication : produit des expressions situées à gauche et à droite = Comparaison d’égalité entre les expressions situées à gauche et à droite Comparaison d’infériorité stricte de l’expression située à gauche par rapport à celle située à droite > Comparaison de supériorité stricte de l’expression située à gauche par rapport à celle située à droite contenu[i] Seizet contenu dans le tableau de mémoire à l’indice i contenu[i..k] Seizets contenus dans le tableau de mémoire de l’indice i à l’indice k. Les valeurs affectées respectivement des indices i à k sont listées à droite, séparées par des virgules. Le support 1 comporte (ici en page 3 et suivantes) un algorithme à adapter dans un langage de programmation. L’algorithme est basé sur un nombre réduit d’opérations d’une machine virtuelle. La page 3 comporte ici une première partie 110 de l’algorithme, une deuxième partie 111 de l’algorithme est illustrée en page 4. Une troisième partie 112 de l’algorithme est illustrée en page 5. Un exemple d’algorithme à adapter est illustré dans le tableau suivant : Début de l’algorithme : ► Allouer une variable nommée lettre pouvant contenir le symbole numérique d’un caractère alphabétique (On considère que les symboles des caractères sont rangés dans l’ordre alphabétique de A à Z sur un intervalle) ► Allouer 8 variables pouvant chacune contenir un seizet, nommées : argument, bas, grade, haut, indice, nombre, ordre et retenue ► Si l’adaptation du supplément accélérateur de l’algorithme est réalisée (voir page 5) alors ▪ Allouer 6 variables pouvant chacune contenir un seizet, nommées : fort, pointeur, translation, usuel, vecteur et zone (Les 15 variables ci-dessus peuvent être initialisées à 0 ou toute autre valeur) ► Allouer la séquence de désignation initialement vide (sa taille finale restera inférieure à 256 octets) ► Allouer la séquence de sortie initialement vide (sa taille finale n’a pas de limite prédéfinie) ► Allouer un ensemble de seizets sous la forme d’un tableau de mémoire nommé contenu allant des indices 0 à maximum ; sa taille (maximum + 1) doit être au moins égale à (3 702 784 + t) seizets, avec t la taille d’une matrice d’image (taille maximale si elles ne sont pas toutes de mêmes dimensions), c’est-à-dire sa largeur multipliée par sa hauteur ► contenu[0..10] ← 25, 73, 16521, 122, 16384, 20, 16522, 138, 137, 16409, 26 ► contenu[11..21] ← 16524, 140, 16523, 37, 16387, 65521, 16, 16387, 49, 138, 16524 ► contenu[22..32] ← 140, 28, 16387, 64497, 64242, 64527, 65413, 31, 27, 16387, 29 ► contenu[33..43] ← 25, 16409, 16386, 40, 65504, 49025, 25, 73, 16409, 25, 65484 ► contenu[44..54] ← 121, 16525, 43, 127, 16526, 18, 16524, 140, 32799, 73, 16524 ► contenu[55..65] ← 140, 140, 140, 73, 65464, 32861, 142, 73, 16526, 142, 142 ► contenu[66..76] ← 16526, 142, 59, 16387, 5, 16387, 133, 0, 140, 73, 65447 ► contenu[77..87] ← 40458, 141, 73, 16525, 141, 141, 16525, 141, 76, 16387, 36 ► contenu[88..98] ← 16387, 134, 139, 16523, 16387, 44444, 33333, 33333, 33333, 33333, 33333 ► contenu[99..109] ← 33333, 33333, 33333, 33333, 33333, 33333, 33333, 33333, 33333, 33333, 33333 ► contenu[110..120] ← 138, 73, 16522, 138, 139, 135, 17, 16523, 139, 136, 16387 ► contenu[121..131] ← 4, 38, 3, 16387, 60, 16384, 52, 137, 73, 16409, 25 ► contenu[132..136] ← 16387, 56, 65530, 65427, 65517 (Les seizets des indices 137 à maximum du tableau de mémoire peuvent être initialisés à 0 ou toute autre valeur) ► indice ← 0 ► nombre ← 0 ► retenue ← 0 ► ordre ← 5 ► Tant que ordre ▪ Si ordre > 15 alors ◊ ordre ← ordre – 14 ◊ Si nombre > argument alors ● nombre ← (nombre – argument) – retenue ● retenue ← 0 ◊ Sinon si nombre = argument alors ● nombre ← retenue * 65535 ◊ Sinon ● nombre ← ((nombre + 1) – retenue) + (65535 – argument) ● retenue ← 1 ▪ Sinon si ordre ◊ argument ← contenu[indice] ◊ Si indice = 65535 alors ● indice ← 0 ◊ Sinon ● indice ← indice + 1 ◊ Si argument = 0 alors ● ordre ← ordre + 8 ◊ Sinon si argument ● argument ← contenu[argument] ● ordre ← ordre + 14 ◊ Sinon si argument = 16384 alors ● ordre ← ordre + 11 ◊ Sinon si argument = 16385 alors ● Si nombre o grade ← nombre ● Sinon o ordre ← ordre + 3 ◊ Sinon si argument = 16386 alors ● Si grade = 0 alors o bas ← nombre ● Sinon o haut ← nombre ● Si ((haut * 65536) + bas) > maximum alors o ordre ← ordre + 3 ◊ Sinon si argument = 16387 alors ● indice ← nombre ◊ Sinon si argument ● contenu[argument – 16384] ← nombre ◊ Sinon si argument ● argument ← contenu[(haut * 65536) + bas] ● ordre ← ordre + 14 ◊ Sinon ● contenu[(haut * 65536) + bas] ← nombre ▪ Sinon si ordre = 5 alors ◊ Si indice = 137 alors ● Si nombre = 0 alors o indice ← 0 o ordre ← 8 ● Sinon o Afficher à la ligne le message « Erreur(s) dans les valeurs au début de l’algorithme ! Veuillez les vérifier. » o ordre ← 20 ◊ Sinon ● argument ← contenu[indice] ● indice ← indice + 1 ● ordre ← 19 ▪ Sinon si ordre = 6 alors ◊ Afficher à la ligne le message « Erreur dans l’adaptation de l’algorithme ou tableau de mémoire trop petit ! » ◊ ordre ← 20 ▪ Sinon si ordre = 7 alors ◊ indice ← 8192 ◊ ordre ← 9 ▪ Sinon si ordre ◊ grade ← 0 ◊ haut ← 0 ◊ bas ← 0 ◊ ordre ← ordre – 5 ▪ Sinon si ordre = 11 alors ◊ lettre ← symbole numérique d’un caractère saisi par l’utilisateur ◊ Si lettre ● Si (lettre + 1) > (symbole numérique du caractère « A ») alors o Afficher le caractère saisi par l’utilisateur o argument ← lettre – (symbole numérique du caractère « A ») o ordre ← 17 ▪ Sinon si ordre ◊ argument ← seizet suivant dans la séquence d’entrée dans l’ordre du premier au dernier ◊ ordre ← (ordre – 10) * 9 ▪ Sinon ◊ ordre ← ordre – 11 ◊ Si nombre ● Ajouter l’octet contenu dans nombre à la suite dans la séquence de sortie ◊ Sinon si nombre ● Ajouter un octet de valeur (nombre – 256) à la suite dans la séquence de désignation ◊ Sinon si nombre = 512 alors ● ordre ← 20 ◊ Sinon si nombre = 2000 alors ● Si l’adaptation du supplément accélérateur de l’algorithme est réalisée (voir ci-dessous) alors o ordre ← 1 ◊ Sinon si nombre ● Afficher à la ligne la valeur contenue dans nombre ◊ Sinon si nombre = 4152 alors ● ordre ← 4 ◊ Sinon si nombre ● Afficher à la ligne la signification correspondant à la valeur du symbole (voir page 2) contenu dans nombre ▪ Si l’adaptation du supplément accélérateur de l’algorithme est réalisée (voir ci-dessous) alors ◊ Poursuivre l’exécution de l’algorithme à partir de la ligne « Tant que » en bas de la présente page 5 ► Fin Tant que (c’est-à-dire poursuivre l’exécution de l’algorithme à partir de la ligne « Tant que » en page 3) ► Terminer l’exécution de l’algorithme. Pour synthétiser, cet algorithme comprend : -la validation de 137 valeurs du code initial d’une machine virtuelle par l’exécution d’une fonction numéro 5 (11 lignes) faisant appel à une fonction de soustraction avec emprunt (9 lignes). Cette étape se déroule après initialisation de l’algorithme et dans son cadre général : boucle « tant que » et aiguillage par test de la variable « ordre ». L’affichage d’un message est prévu en cas d’erreur à cette étape. Pour en vérifier le succès, il est précisé dans la partie rédigée de la partie préalable ou amorce que « La première affectation de la variable ordre à la valeur 8 indique la bonne saisie des valeurs du tableau de mémoire au début de l’algorithme » ; -l’affichage de la valeur « 1000 » : à la suite de la précédente étape, il est indiqué que « Dès lors, la valeur 1000 doit s’afficher après 10 itérations de la boucle « Tant que ». » Ces 10 itérations font appel à l’essentiel de l’algorithme (en particulier le moteur d’exécution d’une machine virtuelle), à l’exception des fonctions d’entrée et de la plupart des fonctions de sortie (seule la valeur 1000 est sortie). Le faible nombre d’itérations permet au programmeur reprenant l’algorithme d’envisager l’étude détaillée du fonctionnement de son programme (mode dit «debug ») si celui-ci ne fonctionne pas comme attendu. Il est même envisageable de l’étudier « à la main », sur papier. -la saisie d’une ligne de lettres : pour l’étape suivante, il est précisé que : « le programmeur peut vérifier que la saisie de lettres quelconques aboutit à l’affichage du message « Erreur sur la ligne ! Veuillez la saisir à nouveau. » (symbole 32800), suivi du réaffichage du numéro de ligne. À l’inverse, la saisie des lettres correctes de la ligne doit afficher directement le numéro de la ligne suivante sans message d’erreur. Cette étape fait intervenir la fonction d’entrée de caractères, la sortie d’un symbole d’erreur, ainsi que la quasi-totalité du code initial de la machine virtuelle. S’agissant d’une seule ligne, la saisie peut se faire directement par l’utilisateur, très rapidement. -la saisie de l’ensemble des lettres : cette étape ne présente pas de difficulté algorithmique si les étapes précédentes fonctionnent. L’utilisateur devra cependant trouver le moyen le plus efficace (par exemple la reconnaissance de caractères) pour effectuer la saisie. La vérification automatique de chaque ligne permet à l’utilisateur d’identifier et de corriger rapidement toute erreur de saisie. -l’affichage du premier symbole de succès (ou d’erreur) : la sortie du symbole n°4801 valide le principe du fonctionnement de l’entrée de données d’images scannées (2 valeurs entrées à ce stade) ; –l’affichage du deuxième symbole de succès (ou d’erreur) : la sortie du symbole n°4802 vient renforcer la validation du principe du fonctionnement de l’entrée de données d’images scannées (données d’une image complète entrées à ce stade) ; -l’affichage d’un quatrième symbole de succès (ou d’erreur) : la sortie du symbole n°4804 achève de valider la fonction d’entrée de données d’images scannées et le bon formatage d’une image dans la séquence numérique. La sortie du symbole 4804 commence de plus à valider qu’une matrice a été correctement scannée (superficie, définition, contraste suffisants) ; -l’affichage du symbole n°4806 confirme qu’une matrice a été correctement scannée ; -le nouvel affichage du symbole n°4801 valide la bonne succession des images dans la séquence numérique ; -la validation de la sortie des données d’une séquence numérique dans un fichier, qui interviendra plus tard, après le décodage d’une matrice de données mémorisées, dans le cas d’un petit fichier test stocké dans une seule matrice de données numériques mémorisées à décoder. La compaction de l’ensemble des éléments de la solution permet d’atteindre cette étape en un temps raisonnable, l’exécution s’accélérant très significativement après le décodage de la première matrice système détaillé par la suite. -l’ajout d’un supplément optionnel d’algorithme, la bonne restitution du fichier test en un temps nettement plus court (facteur d’accélération supérieur à 50) permettant d’en valider la bonne implémentation. En cas de difficulté importante (jamais observée lors de plusieurs tests effectués avec des techniciens utilisés comme utilisateurs de référence), il est bien sûr toujours possible de conserver uniquement l’algorithme principal qui précède en autonomie. Dans l’algorithme qui précède, les lignes relatives aux attributions de valeurs jusqu’à l’initialisation des paramètres d’indice, de nombre, de retenue et d’ordre sont destinées à initialiser le tableau de la mémoire de travail d’une machine virtuelle. Ces lignes ont pour fonction de lancer des appels aux fonctions ultérieures du programme réalisé selon l’algorithme. La partie de l’algorithme exécutée si la condition ordre=5 est vérifiée correspond à une fonction de vérification des valeurs attribuées au tableau de la mémoire de travail d’une machine virtuelle, afin de pouvoir gérer l’affichage d’un éventuel message d’erreur de saisie de ces valeurs. La partie de l’algorithme exécutée si la condition ordre La partie de l’algorithme exécutée si la condition ordre=6, si ordre =7 ou si ordre Les valeurs 10 et 12 permettent l’entrée d’une donnée d’image scannée; l’existence des deux valeurs permet de distinguer les deux modes d’exécution « exécution courante en autonomie » et « exécution courante avec un supplément optionnel accélérateur d’algorithme» : en effet, l’instruction « ordre ← (ordre – 10) * 9 » donne, pour la valeur 10, (10 – 10) * 9 = 0 (retour à l’algorithme d’entrée rapide de données d’une machine virtuelle d’accélération), et pour la valeur 12, (12 – 10) * 9 = 18 (soustraction puis retour à la valeur 4 : moteur d’interprétation des instructions de la machine virtuelle). La partie de l’algorithme exécutée si la condition ordre=11 est vérifiée correspond à la gestion d’une saisie de lettres ou de caractères alphanumériques par l’utilisateur. La partie finale de l’algorithme correspondant aux autres conditions sur les valeurs d’ordre (valeurs 13, 14 et 15) correspond à la gestion des sorties de la machine virtuelle. Cette partie comprend notamment une fonction d’arrêt, la gestion d’une option pour une fonction d’accélération, la gestion de l’affichage d’un numéro de ligne de saisie, la gestion d’un changement de mode de fonctionnement, ainsi que l’affichage d’un explicatif 107 sur des résultats renvoyés à l’affichage ou d’un explicatif 108 de messages d’erreurs, le cas échéant ; l’existence des trois valeurs permet de distinguer les trois modes d’exécution. Les valeurs 16 à 19 : opération de soustraction avec emprunt ; l’existence des quatre valeurs permet de distinguer les trois modes d’exécution ainsi que la fonction de vérification du code initial de la machine virtuelle (valeurs 2 à 5 respectivement), qui ont recours à cette opération. La valeur 20 permet de terminer l’exécution de l’algorithme. Le code initial, installé avec le remplissage préalable de la mémoire de travail de la machine virtuelle avec 137 valeurs de 16 bits : -affiche un numéro de ligne ; - commande l’entrée des lettres, chaque lettre étant convertie par la fonction numéro 11 de l’algorithme principal en une valeur de 0 à 15 (4 bits) ; - concatène quatre valeurs 4 bits afin de constituer une valeur 16 bits qui est stockée à la bonne adresse dans la mémoire de travail d’une machine virtuelle (c’est-à-dire dans le tableau « contenu » de l’algorithme) ; - calcule une somme de contrôle par ligne (16 valeurs 16 bits), chaque valeur ayant un poids différent dans la somme afin de détecter les éventuelles permutations, et intègre encore la 17ème et dernière valeur prévue pour annuler la somme de contrôle ; - affiche un message d’erreur et boucle à la première opération si la somme de contrôle complète est différente de 0 ; - passe au numéro de ligne suivant et boucle à la première opération dans le cas contraire ; - après quelques lignes saisies, transfère l’exécution au code ainsi chargé en mémoire, à savoir l’extension du code initial de la machine virtuelle. Le support 1 comporte avantageusement en page 5 un explicatif 113 d’une notation utilisée dans un supplément optionnel de l’algorithme 110. Cet explicatif 113 détaille également l’utilité du supplément optionnel de l’algorithme ainsi que le principe de l’opération booléenne de et logique, appuyé par un exemple. Un exemple d’explicatif 113 est donné dans le tableau suivant : SUPPLÉMENT ACCÉLÉRATEUR DE L’ALGORITHME Le supplément à l’algorithme de restitution des informations numériques présenté ci-après permet d’en accélérer l’exécution par un facteur d’environ cent. Son adaptation étant optionnelle, le programmeur peut d’abord pleinement mettre en œuvre l’algorithme principal en passant directement à l’étape de saisie de la liste de lettres (voir page 7). La notation supplémentaire présentée ci-dessous est utilisée pour expliciter le fonctionnement d’une opération effectuée par certaines instructions de l’algorithme. Notation Signification & ET logique bit à bit entre les expressions situées à gauche et à droite Un « bit », contraction de l’anglais binary digit (chiffre binaire), vaut soit 0, soit 1. Le résultat d’un ET logique entre deux bits prend la valeur 1 si les deux bits valent chacun 1 (le premier bit et le deuxième bit valent 1). Il prend la valeur 0 dans les autres cas. Chacune des valeurs 0 à 65535 d’un seizet peut se représenter par un ensemble de 16 bits dans le système de numération binaire positionnelle. Ci-dessous est donné en exemple le ET logique entre deux seizets de valeurs décimales 28501 et 51687 : premier seizet (28501) : 0 1 1 0 1 1 1 1 0 1 0 1 0 1 0 1 deuxième seizet (51687) : 1 1 0 0 1 0 0 1 1 1 1 0 0 1 1 1 résultat du ET logique bit à bit : 0 1 0 0 1 0 0 1 0 1 0 0 0 1 0 1 valeur décimale du résultat : 16384 + 2048 + 256 + 64 + 4+1 = 18757 Le support 1 comporte (ici en page 5 et suivantes) un supplément optionnel d’algorithme à adapter dans un langage de programmation. Le supplément optionnel d’algorithme peut notamment rajouter un ou plusieurs opérateurs arithmétiques ou logiques pour accélérer les calculs réalisés par un programme correspondant à l’algorithme. La page 5 comporte ici une première partie 114 du supplément optionnel d’algorithme, une deuxième partie 115 du supplément optionnel d’algorithme est illustrée en page 6. Une troisième partie 116 du supplément optionnel d’algorithme est illustrée en page 7. Un exemple d’algorithme à adapter est illustré dans le tableau suivant Début du supplément accélérateur de l’algorithme : ► Tant que ordre ▪ Si ordre = 2 alors ◊ usuel ← indice ◊ Si ((fort * 65536) + indice) > maximum alors ● ordre ← 1 ◊ Sinon ● argument ← contenu[(fort * 65536) + indice] ● Si indice = 65535 alors o indice ← 0 ● Sinon o indice ← indice + 1 ● pointeur ← argument & 8191 ● Si argument > 32767 alors o Si pointeur ■ pointeur ← (pointeur + 1) + (65535 – translation) o Sinon ■ pointeur ← pointeur – translation o pointeur ← pointeur & bas o Si argument ■ argument ← contenu[(haut * 65536) + pointeur] ■ ordre ← 16 o Sinon si argument ■ nombre ← nombre & contenu[(haut * 65536) + pointeur] ■ retenue ← 0 o Sinon si argument ■ contenu[(haut * 65536) + pointeur] ← nombre o Sinon ■ nombre ← contenu[(haut * 65536) + pointeur] ● Sinon si argument o ordre ← 16 o Si argument = 0 alors ■ argument ← nombre o Sinon ■ argument ← contenu[pointeur] ● Sinon si argument o retenue ← 0 o Si argument > 8192 alors ■ nombre ← nombre & contenu[pointeur] ● Sinon si pointeur = 0 alors o Si argument ■ ordre ← 13 o Sinon ■ pointeur ← contenu[3072] ■ ordre ← 10 ● Sinon si pointeur = 1 alors o Si argument ■ Si nombre □ grade ← nombre ■ Sinon □ ordre ← 1 o Sinon ■ nombre ← grade ● Sinon si pointeur = 2 alors o Si argument ■ bas ← contenu[nombre & 4095] ■ Si grade = 1 alors □ haut ← contenu[(nombre & 4095) + 1] ■ Si ((haut * 65536) + bas) > maximum alors □ ordre ← 1 ■ Sinon □ vecteur ← nombre & 4095 □ translation ← contenu[vecteur + 2] o Sinon ■ bas ← contenu[vecteur] ■ Si grade = 1 alors □ haut ← contenu[vecteur + 1] ■ Si ((haut * 65536) + bas) > maximum alors □ ordre ← 1 ■ Sinon □ nombre ← vecteur ● Sinon si pointeur = 3 alors o Si argument ■ indice ← nombre ■ Si ((fort * 65536) + indice) > maximum alors □ ordre ← 1 o Sinon ■ nombre ← indice ● Sinon si pointeur = 4 alors o Si argument ■ indice ← contenu[nombre & 4095] ■ Si grade = 1 alors □ fort ← contenu[(nombre & 4095) + 1] ■ Si ((fort * 65536) + indice) > maximum alors □ ordre ← 1 ■ Sinon □ zone ← nombre & 4095 o Sinon ■ indice ← contenu[zone] ■ Si grade = 1 alors □ fort ← contenu[zone + 1] ■ Si ((fort * 65536) + indice) > maximum alors □ ordre ← 1 ■ Sinon □ nombre ← zone ● Sinon si argument o contenu[pointeur] ← nombre ● Sinon o nombre ← contenu[pointeur] ▪ Sinon si ordre = 1 alors ◊ contenu[1] ← grade ◊ grade ← 0 ◊ contenu[2] ← vecteur ◊ vecteur ← 0 ◊ haut ← 0 ◊ bas ← 0 ◊ translation ← 0 ◊ contenu[3] ← usuel ◊ contenu[4] ← zone ◊ zone ← 0 ◊ fort ← 1 ◊ indice ← 0 ◊ ordre ← 2 ▪ Sinon ◊ ordre ← contenu[3073] ◊ Si (maximum + 1) > ((ordre * 65536) + pointeur) alors ● contenu[(ordre * 65536) + pointeur] ← argument ◊ Si pointeur = 65535 alors ● pointeur ← 0 ◊ Sinon ● pointeur ← pointeur + 1 ◊ Si nombre > 0 alors ● nombre ← nombre – 1 ● ordre ← 10 ◊ Si nombre = 0 alors ● ordre ← 2 ► Fin Tant que (c’est-à-dire poursuivre l’exécution du supplément accélérateur à partir de la ligne « Tant que » en page 5) Fin du supplément accélérateur de l’algorithme (c’est-à-dire reprendre l’exécution de l’algorithme principal à partir de la ligne « Tant que » en page 3) La variable ‘ordre’ permet encore d’aiguiller l’exécution du supplément optionnel d’algorithme vers la bonne fonction : - valeurs 0 à 2 : réservées au supplément optionnel d’algorithme ; ; valeur 0 : entrée rapide de données (fonction assurée par le logiciel interprété avec l’algorithme principal en autonomie) ; valeur 1 : (ré)initialisation du processeur virtuel de supplément optionnel d’algorithme ; valeur 2 : moteur d’interprétation des instructions du processeur virtuel de supplément optionnel d’algorithme. L’extension du code initial chargée par ce dernier : -charge un gros bloc de données (jusqu’à la fin d’un ensemble de caractères à saisir du support 1, détaillé par la suite) au moyen du code initial de la machine virtuelle ; -décompresse le code initial d’une machine virtuelle de deuxième niveau (celle du supplément optionnel d’algorithme) compressé selon une méthode spécifique à ce code ; -transmet le code de valeur 2000 à l’algorithme principal, activant ainsi le moteur d’exécution du supplément optionnel d’algorithme, si celui-ci est implémenté, au lieu du moteur d’exécution de la machine virtuelle, ce qui a pour effet d’abandonner immédiatement l’exécution du code initial de la machine virtuelle ; -si le supplément optionnel d’algorithme n’est pas implémenté, l’exécution du code initial de la machine virtuelle se poursuit avec le chargement des lettres restantes (dernière partie des caractères à saisir) au moyen du code initial de la machine virtuelle ; -décompresse les valeurs chargées, qui contiennent l’interpréteur d’une machine virtuelle de deuxième niveau (par ailleurs implémenté dans le supplément optionnel d’algorithme) compressé selon une méthode spécifique à ce code ; il s’agit d’un interpréteur simplifié ne contenant que les fonctionnalités strictement nécessaires à l’exécution du code à ce stade ; -transfère l’exécution à cet interpréteur simplifié. Le code initial d’une machine virtuelle de deuxième niveau décompresse la suite d’un gros bloc de données, compressée selon un algorithme générique tiers. Ce code de décompression est utilisé pour la suite du processus, une version adaptée aux grandes tailles de données (> 64 ko) étant utilisée ultérieurement pour décompresser si besoin le fichier utilisateur. Les données décompressées contiennent le programme de décodage des deux matrices système 121 et 122 détaillées par la suite écrit dans un langage spécifique avec son interpréteur simplifié ne contenant que les fonctionnalités strictement nécessaires à ce programme de décodage. Comme illustré à la , le support 1 comporte avantageusement en page 7 des instructions 117 de saisies de lettres ou caractères alphanumériques. Le programme réalisé selon l’algorithme précédent peut contenir une vérification des saisies au moyen de sommes de contrôle, afin de vérifier que les caractères saisis sont satisfaisants. Un exemple d’instructions 117 est donné dans le tableau suivant : LISTE DES LETTRES À SAISIR Les trois pages qui suivent contiennent une liste de lettres à saisir séquentiellement en totalité ou en majeure partie au début de l’exécution de l’algorithme. Le numéro figurant au début de chaque ligne est affiché par l’algorithme avant la saisie de la ligne. Les numéros de ligne croissent linéairement de 16 en 16 depuis la valeur arbitraire 1000 jusqu’à la valeur soit 3560, si l’adaptation du supplément accélérateur de l’algorithme est réalisée (voir ci-avant), soit 4136 dans le cas contraire. L’algorithme contient un mécanisme de détection d’erreurs de saisie de ces lettres. En cas d’erreur de saisie sur une ligne, l’algorithme en avertit l’utilisateur qui est invité à ressaisir la ligne erronée. Pour faciliter le processus, il est recommandé d’effectuer préalablement la saisie de l’ensemble des lettres au moyen d’un programme spécialisé, puis de transférer (principe de « copier-coller ») les lettres ainsi saisies vers le programme adapté de l’algorithme. La saisie peut se faire manuellement ou à l’aide d’un procédé informatique de reconnaissance optique de caractères. La détection d’erreurs de l’algorithme facilite alors la correction des éventuels défauts. L’algorithme accepte aussi la saisie de caractères superflus tels que les chiffres et l’espace : ils sont simplement éliminés sans perturbation. Le support 1 comporte ensuite une liste de lettres ou caractères alphanumériques à saisir. La saisie de ces caractères par l’utilisateur sert : -d’une part à remplir le tableau de la mémoire de travail de la machine virtuelle, considérée comme une machine virtuelle de premier niveau. Cette partie comprend également un décompresseur du code compressé d’une machine virtuelle de deuxième niveau. Cette partie comprend également un programme de décodage d’au moins une première matrice prédéfinie de symboles binaires. Les caractères saisis correspondant sont ceux jusqu’à la ligne 3560 dans l’exemple qui suit ; -d’autre part à gérer l’absence de mise en œuvre du supplément optionnel d’algorithme. Le support 1 comporte (ici aux figures 10 à 12) ainsi une liste de lettres ou caractères alphanumériques à saisir. Une première partie 118 de cette liste est fournie en page 8 du support 1, une deuxième partie 119 de cette liste est fournie en page 9 du support 1, et une troisième partie 120 de cette liste est fournie en page 10 du support 1. Un exemple de liste de caractères à saisir est illustré dans le tableau suivant 1000 OLON PLAF LPOG PLLO LPOF PLOD LPOE PLKC LPHA PLIP LPPN PLIJ LPIE PPLG AFBI PLAE CCOC 1016 LPGP PPND LPPO LPPN PLEF LPPO PPOG LPHG PLGC LPPM PLED LPOG PLKG LPOF PLHG LPOE KPJK 1032 PLFO LPHA PLJM LPPP PLIG LPGP PPND LPPO PLEF LPPN LPPO LPPM PLAD LKPB PLKI LLCF LCEK 1048 PLAC LLAG LHAA PHAA PLAI PPLG LLAI PLAI PLAI LLAI PLAI PLFG LPPM PLEA LPPM PLAB MCFP 1064 LLAI PLDL PLAK PPLG LLAK PLAK PLAK LLAK LPPN PPPI LNMB PNMB HPPP LLCH PPLG AAKD MMIK 1080 HPPP PLAJ LPPN PPLG LDCJ PDCJ PLCH LIKJ PPLG LKPA PLCH LLCH PLCH PPLG LLCI PLCI ODLA 1096 HPPP PPLG AEBJ HPPP PLCI HPPP HPPP PPLG AAIM HPPP PKPA PIKJ LLCH PPLG LHHL PHHL APHD 1112 PKPB PPLG LKPB PKPB PKPB LKPB PKPB PLBP LPPM PLHI HPPP AAID PLBK LPPM PPKK LPPM FOBN 1128 PLCF LPPM PLBI LPPM PLGN LKPB PLAA LLCF PKPP LLAG PKPO LPPM PLGF LPDJ HPPP PPDJ NONA 1144 LLAH PPHH PLEF DJAA HPPP PKPN LPPM PKPM PKPL LPPM PLCG AEEM PKPK LKPB PPNL LLCF KKLL 1160 PKPJ LPPM PKPI LPPM PKPH LKPB PKPG LLCF PLBP LPPM PLNN LKPB PPPO JJDJ NJDJ HPPP DDDM 1176 PPLG AABF HPPP HPPP HPPP PPLG AABA HPPP PKPB PPLG LKPB PKPB PKPB LKPB PKPB PKPF AACB 1192 LPPM PPPK LPPM PLHB LKPB PKPE LLCF PLBP LPPM PLIC LPGP PLFI LPOF PLFH PLAJ LLAJ EEPI 1208 LPPN PPLG AEIN HPPP PLAJ LLAJ PPLG AELB HPPP AABH PLAH PPLG LLAH PLAH PLAH LLAH JNNE 1224 PLAH PLAG LPPM PKPD HPPP PKPC LPPM PPCO EIIK PPPP PPPP AEDJ PLBP PPOK PLMB PLHK CFOD 1240 PLKD AAAH PLLP AIHK AEKH AAHE PLGE PPPN AEGK AACK PLDO PPMC AENA PPLM PLAP CEIK DIKD 1256 JBPP AAAD AKFP BMAJ HPPP AKMO NPPP EPPJ AKAO PLPP MAJN ABIO OEAI EAAP HPMI ACFE BMHA 1272 PPHP EIAA IBAH ABNP IAJH AABP AJIA AAGL PBAP ABPK PLPP ADPP PPPM BHLP BGLL AADO BCEP 1288 PEIE OAEE POPP APPK EBHA LBAD MABK IAHH BAAP OACJ AEAK DIAG MBAB KOAB AAEH ADHP BFAK 1304 IIAP DCNP CBFL AMPP KEAK MAJF AKDP JOAI APPL AJFP BGAI AALK HPPM OFPN PPPP CMPP PABJ 1320 HICK AAHH CFAB KFPO ACFH CEDP DACE IAFH CEAC ENPO PJAH AGAA IAML ABIO IBAE MABN IACN 1336 IAAP AMAK OAKL AJHG PMAK GAIP PPLP JGAA GALC HPPM KACO ACLP AADA NAAG MMKP AHLP GIJP 1352 DAEC AFDN AGFA PAEA AFAD EFPK PACL BDCP AEBH MBHD BCLP JECH HABD CILP KAIA EDGA FBIE 1368 PODP KJPA MBJD CJED JEBA EBFD BDMA HJMM BBBK NCHO JAND AAAP EHAD JACB GPOP GBMD HEMN 1384 BAAD PPPM AEDG DPPO ILAM OAAA ACHL KAPP FICF NPPO PIAI EAJJ AAGB IAPO MCIC HPIP CPJH 1400 AOAA IPOL ABIO GBAG MABN AJAP AMAI DHPI AANP BIPN MABH OPIP OEAA PABL EIOH DMEH KJOB 1416 HEID ABFP ILHO PMFL GAPP FICB NPPO PIAJ BAAD AIOA IAPP MBIF EIAC GEEH GABH POLP ACMK 1432 BIPC JAKD ABOP AAAJ EAIJ AAFP KAAH IPPL AJPP AEAH OEIA AACP HIDF EEHP IDAP AJHP JBNL 1448 ANIC PKPP GDJP EFGP AHNP GFKA ANLO PGCC LAGA IAFH CKNO PPHF BIAO PEBH GABH POLP PNJB 1464 BJHA AJDD ABOA CMAI HAAL BCPA CMAA DPPO ICHA BAGA BJHP MAIO BIDP BEIH CDAB DMFA KINK 1480 AAFH CCNO PPGF BEAO PMBD GBCH POMA CIAI GABH POLP BJAN IPOL ABJI BHPO AAFP FKPP PPNC 1496 GEHN DHKP AFPP BAFK IAGC PHAB ACCO AAGC PKPP GEGF DJCP AHLP BBMM IMBA MPHP GDCA HGNG 1512 AAHH DIPP HJMF BMKP FLHP GDPH EAAP PIJF MABO AAAG CMAH KAAF HCHP ILHO MHCN HBIG EFGG 1528 CMBF OABH PODP IAJN MABN PPIG CEAH HPPP HCLP JOHB AAIL HCCP AIAI JPPP AJLG PJAC KJFE 1544 JHOL AEHO KFIA AAHO PMEC NBMG MADA MLBL JIAF DPIP DIEF LAAG JMID AFBL PIAF DPKP BFEI 1560 AGEO IDPK AAHI MODP PPPP MBOD CDBL HMBO BMIF AADF APNL AOAM BMAA OHDK HPJL BIPP DCCG 1576 EBGO AHIG CMAI OABD NACC JMOJ AADN JBCA NCAP AFPJ AIHP JMHC MDAA IDOP AAPO MHDF EMFD 1592 HDJB POHC APPL HDHO OJAN MHBO AAMG CMHB GABH PODP OBDJ MABO AAIG CEAH KAAF HCPP FBGH 1608 IMHC GPOI AALD MIAA IEKP CCBL PAEK MEKP AFCD AJFP IMBB OABF AJDG PPPO IEKC PPAD JIKG 1624 LJML EABA MNHP GDPK AAGC EMEB NAAF IABO BIFO PAFI LPIP FHOA PADG LMBA MHNO PBMI ABBC 1640 IAGC LPAC JMAC BMLI MGBL LAFJ GAAC NIPN EAHP OLLP BOPP AHCL AIJP AGHB IAIL HCIG CJEB 1656 CGAA IPOL ABIP KIPN MABN AODP BIPN MABI FJJA FEAA PBCL ABGG CLHO POBH EKDO NAEK MHCJ 1672 LPMP FLPA GFPM AFJK PHAE HOAO ADHH AGEB NACA MFKP AFEL AIKH AAHP MAKF AILG PIDE JDOG 1688 EBIG BIDP BEEP CLID GNPN AEGO AMBH GABD NACE IEIJ AADN LBCA NCAP AFEB AJDG PIDF ACOA 1704 EALF BBKH AAPJ MEIF ABED MDNP NJAB HCBP JCHP APMD EIFP BEIP CEIB JAKA MKAP AFCD NFIE 1720 ALNP JCAJ MCIF ABEO ACEM POAM FAGA ICGH CJAJ BIAE DADE EANF AJJP KMCH GAAP AACG FKKI 1736 PPMI ACHH CMIB JAKA IAFC MAKB IAAO MEEH GALB AKMB IGAA EHAB LNCA AAFJ AAJO PPDD GHNG 1752 ALFP JCHP APMD EIFP BGHP KHPO MJAC BMGA AAEH ABNO OJPO PIDP IPPP BAAD AMNP KIAI LKPC 1768 EAIP PPPP MHPP EAMN AKDG PIDE EBIF ABGC GCHO PNOP CHPP AEAA ACLH CEAB JACH PPPP DFJI 1784 CJPP BACK IDEP GBHP EIAA NPOI PPPO EANF ALJP AAAK BPPP AMJP AAAL BPPP AKJP AAAM KEMF 1800 BPPP AJLP JJPP GDHH AKGC HAAI OABH POLP BIOM APOL ABNP ILHO IBGD BIFP BEMP CFIB LGJC 1816 CJPP AFHA CBNB BAAE OKAI CANL AIOC HIAJ EDHN DGPP JMDG GBBP AKEA CGBA IAJL BBIC MOKK 1832 GGAA IPOL ABJB DAMI EABO IEBG PAAH MAIK HPIA GEBH GABD NACE ICCJ AAAE HBCA NCAP KCIB 1848 AFLJ AJBP NMAH IAAD AIPP IMAH OAKD BCFP JMBA JPPP DGFP BIPN MABI CDAM LEAA OBCB INGP 1864 IAAO MEEH GABD LACG INOJ AADO BBCA IAFD MAKG BADP BGDF MABH PJMC GOAP APPD BAEN EJCN 1880 NPNP NJAB LIAF DOGP AGEA HANK CCHP APMD EIHD IEAA ENAB LIEH NPNP NFAF BMGA AAFB OAGB 1896 JHPD BCGA BIDE EBIF ABEJ ICGP EHIM MANE AGBH AFDB AKEC HGDG LHPH DFEA IGAA EIIB GNLC 1912 LANN IABL FKPP EPPP ILHO PMHL ACAB FICA AAGF EENH HPPP NNPP OOAJ LMBN HJII OFCD OPEF 1928 CAEP CJOH GAAD NPBG FBBF GNGB JBOA AEKD AGAM KCCJ PBHM GICB NADN PKGC FGCJ ICME ILKN 1944 OPBD OFJG PMBG EPCI PFIH AEIO BBHD LDPE EOHK GAKD EPFH BNEL IDKL OKHF CHPE DFHC OGLA 1960 MANA HHPG LFBF CGBB CBFI JJNC EPIN AFFO OMLG CHJH LEJE KLGN GGOB KLKG BMHH FONA JDCH 1976 EHPC INAF AJNK IFOA NEEG DNGG AIDE KFJI PGIL CBHF IGGB DGLF NGCM JKDK GOEK EHEF HPHO 1992 FAPJ BOEP AAHO HCEH GGIB DFKE MPFM BIOP OFOA IIAE AKEN GILA MPCD LNDF DIKJ DCPA BPII 2008 KOCN HGEE OPNK ABPD ECEE DANC IIDP BBGI COPI NJNF EFIP GNAI NHLN JOFL DNDO HPOK ABGG 2024 AFAO BMFP LINN HDBD DEKL LHOE ELJA HNLO EBPN DIPL LBIN JODE PAOJ JJHH FNIO NHOE CCAM 2040 IMBO PGOM DDBK GIKL PDAG OODP GMPG LDPB MHNB GDEI LBMD IKDH DOHF GMOI JIPL EKJI MJJB 2056 MBDG BBGE FFCO CKCE HBNH LNJJ DPNO EBGB MHIO PABF LLDF MFAE HFGB PHGC FMFN CDHL EEEP 2072 DKGP KBMP GFLE EKGK AIFN HLHK GCKE AOFL BNKC LNJH PKGB PDFH BEMA NJCL EBPH CBBC EFBK 2088 DOCA KCJI ALHD CAJM EGND DGJE ANHL DKHI CJED OCMP LDAI DAMI EIKG CNEE FNFB NIHB JNGC 2104 EEEM OFLK JPON DHDM GPOI GPFA DFOB EIMG AIEF HPAI IAMI OCDH GFEF OEIL OABF HBHI OAHL 2120 MCOB AFIM ANON OBJK BJAF OGEK KIPN OLFE BEJF JIPJ LGFP HANC CKIN LLJP EIHC KPCG LOON 2136 BFLC NOAP IFOL COPG KGFJ NIIL AIKA ONAC DJFO OFID FOAP AKEB BJLL GHPK PAAI KAAJ CJJO 2152 LGJP JHKE IKJK IHCO CPNF PLDB HNBL MOEM MCCJ JNDA GDKA NODK BBNB JDPM NHKP HKID KENJ 2168 PNHK JCCL DDPE AIPL BELE LHIJ LCBN FIBD PDLH KEEK BIBN KDOE ODGJ PELP KNCO HDMC BPKB 2184 JBHC FLPE KPAA NJBC OOBO HKNF MLHF JBFP DFDM EFKP JGHH NCMK CJAF GJHL KJOO OPLF DCKH 2200 BNOJ NGKI OCAE JCHL AOGC JKFJ HKIE GJFP ICBI BMLG BIID HOBD IBCE AFEK DBLO OHGL PKDG 2216 PDEP OHHJ AGPL DOJD GCCD AHCD PBJG NJMN EFLA HLPG PKKK BGIJ LKCN JAMN OBHC HHCO NICG 2232 CEEP PBOC BJGI DMBN LJGM NMKO NAHF NFAA AKIN CKBI AJEL MCEI MOHH NNCE FFCE BDBG KFEJ 2248 NOLC MJFI HNCB ECMG EDMI NCLA OCJN HIOD IJHE DHHJ KFHI PDMJ DOLI GNIO LHLA GAOO LPCI 2264 AIOJ GPAF IHLM PHPM IINP HCME HGOE KDDM HKMA MPNA JFOD DPDA KIBO BGHJ GDKK BMOH FOLM 2280 KCCP CKEF GDPM NFHB LMPJ PMOA BOLH MNBM ABNC OLEP MIAL JCEF DCBG EHMH NMBO MCFJ PPCA 2296 LIOE KLPP DBOC GCAF BIMO HHPK KLMI HADK ELBP PJHH MIMO LHHF OCOK LPNG GGHA FFBC ENCF 2312 JLHJ POKI NGCN ECLP GBFI AJOA KAON LEKD FCEN HPDE ODLO ECGF NIDK LCOE JEBP FJLD FFBF 2328 IPJD CCLD GONO EKDE MPDB ODIF JEML LLMM BJJG FHFP HDFI OHPO EIKA HDEH JMHM PCLD NPJA 2344 PLHI NABH EFEK EGBK LFPK HHEH PEGB POAE HKBJ PMNK OBEE FKJK DKHJ AEDG PLHL NFJB BKDF 2360 KGME EHJM FGBF MFIP CPPE EKBC PBFJ OMJH FFKD KOHF AMOL CCEM EAFH PDGL KPMJ JNLL LGIB 2376 KJFJ OFBD DBNN OKLE BIEI EDGO HNGL IHHA LLFM KIEP KOIH GOKE NOFG CNDF KEKD EIOJ FIED 2392 LIIG OIPH MEOE IEOO BJNJ MNLL KCLK AHBB AKPH ENMP OLFA NEEA MHNM JJPB EKBL LJLC FLKI 2408 MDEP JFEH ILHM OCGH MCKJ INOB HHGE IGNN NGAK GKDB BAPE FDNA OAJF HMFL BAFO PLBD CADP 2424 DKCA NGKI HLIC DJLC HMDD NMHN PHAF KOEL CFBF LGEN OOME CHPN FGLK CHLJ APBM HLAN DOEL 2440 HGIA JGKJ ACPB HOHK DBFE EKEF LJII ECJJ KHFP NGFL GLDL GBLI JMCC JCLL MPCP BODL CHKP 2456 BLMA BGLK NDBK PBHF BHAH GJBA KFJF BDMF GFPO HANF MNDA PBJM HLNN CIAD JDPE HLMN EKJO 2472 DIJK ECKE CLGE OECH KNKO DAJB EEMM OKAH PFFA BPPH LPKF JMHD EGJG DKMO OGFO BFLC NECE 2488 FIIH MEAM MOIL ELNI OFAH CHNF OBPF COOB DIKK GPHK BAIN HICE KJIC HEJM DDOD BGEG LOKK 2504 DMDP LGLK MFFO BPFA NABL NNBA PDHA IDNM EKCI CMMI LCIM CKAL ENHH FIEP KNOG INFC OKGC 2520 FNFN HOIE IJDG PEJA NBIP HDJA JNIB LNKP HOJF GMMP DMEB HGHJ GLMH FHDN MBDN BBMB LEJO 2536 JHNL EIFI JMID JJFK CNEP MJCD JEAI LACO GOFB DDDL GFEB LDAK KCGF HAAE LLGJ NBHL IBIF 2552 KKFH KEKL HMIE EPHK KJPI NPIO LGEJ DCBG DPIE IIMK DKNE PPJH AAKC LLLK MAAL LFLP INCP 2568 IIJI KGNP DBGM BGND PEEF OIGA DNPH DADN KDKJ LCCO DKAG NJDI MJEA CODF IGAF FMJN LIEK 2584 KFGA KHOM DAJP GLPC PEOJ IDMN DCHK PODK AJOE NIEC LAEC INKL NFAP COIJ KHKJ MDBJ CEJF 2600 IAMD OHCF GHAO AKLO GIAA LKLL HHBN NNKK CBHE KPOI FGFI AHNG CGPN PGMO CIFA BDOE GKED 2616 EAGM ELDE GJMI FCPM IBNN KNJP ICAL PCML MEHO LLCJ GGAE BOEK APKL PKNI CKFO MIDB MHOM 2632 LLGM JALC APMF KBLM FFHO JMID GKJO PLKA OBKI KLJC FMGG DAOL IGJC LEAL BHOI PHJP KPHP 2648 EGGB ACDM GNLB ACHA ILMP NGIP DCDG HFNH NDDE FBGB DCCO AOOA AAIG APEK PLMN OACA LMEF 2664 HPNH BGKN CBAA FGFG AOGJ HAGO DCNM GEMD GLHG PGME NPKI ADLH CEDO IKHK OHAM EHFP EAKJ 2680 LDMP JLKI MCDF AOED KFKJ GHFE LODD FDHO ENBH DJHC OFKD ANFG DFEN JPDM GPPJ EPPI JPJG 2696 OIKO JLHM DJJE BMEN HMKI DKFF LOGO AELD FBNJ JIGH CNKK NAEA FGAA GJFK PHDN NKCC CMGD 2712 DJJK BNMH IJOP LDMB FPOK OFLM NBNP NJJM IGHC IMGG OICP MGOE LEEB AEMA JCBH MFGD IPFE 2728 EMEJ MJNA FPJL DDII BIDN BHPC KPLM FBNO HABM MCNF JHPE OPMJ GOCC AEAA LCHI JNCC PPPJ 2744 EOCD NCLK EJAH PNDH NGKB JPPI KAGE FLJO GNGN ELFL OAMH FEKG KKDD OICB FAGK IEKK JOBH 2760 DCNB CBLC KNOA CDLB DDDI MOFJ DCHN CIGC ILBP DBBI LCAL OMBJ ANGP OMHI CNFE DNDL LDIM 2776 LFNK MJJI MHAP APDG APHH AJJO OFOA FNEP BLCJ AGAG CEPH NKME NBLH GFKF PEFJ AMFB DMOP 2792 JCKJ AFNH GIEM IENI IHIP HFAN KJIE DNFN OPHA HDGP AMLP IIPD LDAN DNIO IGHK PCNL FPAH 2808 KBGO MPOB KDMI ELPF MMNL MOGP CNMM NHBG KBEK AOJP IKLL BMDF ANED KIOP LHKN PAGD FGEM 2824 BOEI IOEG CGAA PCKO KAIA MOPK HGAP FGHL PMDN LBGI KCAK DLGH HMMK PDHN JCGB EOLD LKCE 2840 JAMI EDLJ JKCN LMJF HEDD MABG JMDC ADCM CCDJ DICD HDLG FANM HKNB HCFM IAKN PLBA JDKG 2856 CJIG PAPD HDLB ODOF BNCF BIAJ BCKL NPFB JGPP FOBB IKIN MBLA AAGK PDFP OBGK EBCK KDHE 2872 MPFK PLOI LEIO NFDD ONJI GGKL DHGD JKIN MFEF OCNO KPLJ KIII IOCJ IIEK NGGB GIBP HDOJ 2888 DBCL KPGH GCDA PBPF CFFN FGKL PDLE EBAG HJHL EIEC MEHH PPDP IIDI HGKK GKBL FGMH KNBH 2904 DOPI HOPE ELPP BKFM CMAE OGBA PIPM IJJJ BGKB PIBK CBEO DMAN FJPO ACJM GNFH PGIK GDNP 2920 NAIJ AIFD PNAG IMBH JBNB FCPE FLPJ PJKH EAKI CDAA EGOC PNGI AFIP CBFK IBBN HHOP HNIL 2936 EHOA DHKA POHA CPGA LEEJ PELJ LCCH COJA BCEJ KEAK MKDG LNNG JOFG EIBN IKFC GFGM IECC 2952 CENI ADFD PBAL GFJM CGHF GIBO OICB DLPE MPIE NABC EPAK CEKI KHCA IDJN ELLL FAGH PHNK 2968 LNPF DGFI IEOJ HGNG OABM CFEO OHFO NGID CGMJ OGHM IBKE BNCH PEBI IPMH BIHK FJGD DFGE 2984 IIGE ICOG LKOC FLNN JKJO FKED EEEB NIMB ANLL DLMC OBFJ DKAD NKOI IMBK GAPO LJBH PFFC 3000 NGGF CMCD CLEA IHLK OAGJ IBBL AMLN MIEA MGJI EBPC JMCG BHBO LNNJ FNII KPFK EMBD AGML 3016 PLPD INIG CFCM EPEH LOHC AKOG JLNK GDHH MOIN FLCC DAMD JFCL AMLO NMBD KNEK MHOE MPNP 3032 NBDG ECAP BDFG DHMI FMJA LPIN CKHA DOGE IKJA FJMP KBHD OILK AENA AAFB HEEL ADJL KDKO 3048 NMMG MIPC GDAO FCAC NBAL EDML FJND GAEN LBAE EIDC JDEK EFKO GCAK KFBB BIJB GDLB OBEM 3064 GPIN ADNK DLIO FBHE GJCB NPJL GIEI OGMF MKPE HBGB DNEP IMGN GOMB CBHE MFED PBGF HJGG 3080 EBHI LEAF CNED DKFO BNMJ DJMH PKGK GKPA OOCB AECB FFCI EKKE HMJN DBOI KNIP HBAB HJBB 3096 BGNP OJNG IPAC GAFN KEDD GOCE FLEO NEHJ ONMI NHLO MFIP DHNE MOEI CAOJ BKLG CODC ANKB 3112 NDHF FFPF PBPP AEJF FNPE GAHB HNII JBAO CBFL LPFJ HCAL BDKI OALL CCEC BADM ONFE GNAK 3128 BJLH MENA ODME AONJ MEGG CCEB CENK NJOB KOBM HEAA DOPJ LLFH LFKD KHLG IOIK GJCD APFI 3144 JLHD IIIA MKNJ EFFA HNEJ OPMI CLPG LOPL DNMM AFAO ABGK KBNF IGCP GMAH AOID OMEN BGOG 3160 INHK AAJB GPHF JMKI JKPO BALP HENM GFMG PAGJ EKAN LBMA JOCN GEKF MJPI PBDO BLOL OBDI 3176 PLPO JBAN OOEE KEKO PAOE ELHD OKDF OPNJ MALO MPNC IMKN DJMA OOBL KCLA FFHE EOBF MBIH 3192 BCBH GELL HOLF PBJG PLCC BAPP CFGL JNLP PBFD FNLM PGCO AJPG BDFE FPNC EEIE JMEF ACHD 3208 AFOD PJBI JNHK PGOM PFIE EGOL NNEO FCON NJCB LPKF KODD GALB APBE GLIA MGPH JBFP CCDE 3224 BMEE NNLC GJPM DBIM PJDN DFNM COOP FDBC KAIL DHAG KMND NGOI EAAH DNKP EICO LMHC FILF 3240 PIBC HMJF NLID NODB HGIB FIPF ACFO BOCB LLBC JICB KLCO ILDP NDDE EOEM BOKA JBIE ICOI 3256 MLGJ OAIK GOHG LBLI KGHK OPKJ CJPI DKCJ GKHJ PLKE HACE CFGJ BGBB BNEF NKNG NFEM CAHH 3272 DKFN LCAB HIBO AFGD OILF ALDP JJKG EEEM CLLB HJCH FGGD FJIA MOBK JHPP JOJE CJNK CBKI 3288 BFCP ONAM KLGH GNFL DPOB HNII CJEK IOPB JMNP JHMN APHG BGMC MJDN GMBI EBBO BEKA FGKN 3304 OFOO IANP KHGB ADLJ CNPF LBCP PJDI ANDA MEKL HLDH IIDD GKKL NOMJ OBJA JMNB OGJA NKPL 3320 GACE ILHL GAHC DPHI HNFL KMMN BOAO PMCP FOND JFGG KOGF IBKL DLJA AOCN FAAF DNGH LDBO 3336 HDLC AIOK NDDP KPNF JFFC JODO NFFG KPEI DLBK MNKK IFGC LOGE BNDP LOOL GBAI EHKA KMFK 3352 ADCF KOJD EKLC GPPE LODB IDDF JBHD MLML PIPE LHAD PNNI AJEJ JPNH LNKE OLFG BKHG DLGA 3368 MKBF CGOM LNHM MKHA NMND HPIB FLEB ACAL EOEN NDND FOMI HIPJ MMKE LKFJ APLB CNDJ CFCG 3384 ILIG LOKF DAPG OBDI LPDD DJIF MPJK NADG LJOG PJLE FIAK OPAJ PGII LNNH NEDL HGOD GGMD 3400 CJED KNOF GHCC AEHO DIPK CEOK FLPM PFDO HLAH JJHM OLGG MBKN KFPJ JAGL GBHD PNHC EFDN 3416 CGKP FHML GGNI BHKB MBFN AJIA OAOK OPBB NHDB LHAK NKHJ MEIO CEJH MNOK PNAA GKHE LAKM 3432 AMNK GAIP EDID LPLD HPFE FGLP ABIP PJPE BDKC IIBL DAKJ MGIJ AFME FAPK EIIK AILM EPOD 3448 ENJK NGAG LIMB MKPL KCIP NDPH GMAN DBON PNCK NIIO BAJJ BEPL GBNA GDFD IFCC CAIO MGLL 3464 HLNM JEHE BDMC LHMI JOHG KMBA MKPE JEKF KEAG LIFN IOMI AIGF GFJI DDFO KBCF LMED MJLG 3480 ABHD DABG GPBL KPJP BAFA FKOC MEAK APIP DING DLLA IBEB LBOD CAJC OLMI FJAK KEDL HFFK 3496 LJON DKEL FGDG CKFK LMHL OBCL NCPN ICEB CIDO BEBA PFBL BLPD MBIB PIIL OCKN EDDM MBCE 3512 AEAE CGCF GJAP OBKO GCAC BIGK AKNF NEEK IFGK JOCD NFON KAOJ LDCB EJIB OKCF KCEL LBPH 3528 NCFH JAPI JPJP NDFN PEKK GAGM JBHF JOJI LIBD JHCG BHKG ACLE NKIB AEFD PLOI CPAF EFOF 3544 FFCG HJDB GGBH OGOK GKMC IFAM EFCI MEDI KAGH JLCI KNNC CBBC CKEO CIIA FCMC IPJH FAMN 3560 IJII IAPN NNGD OBFB AKKH MDAO DPPP NHLM NGMN MPMN MONP KJNB LFJA JIIK JGJB AEON PMHG 3576 IFFC KLLK AHLK APHD BAED GPFP EEHC IAHN OMOK AKKA BMNP BAEC LDKL CKID GPFP EBBA LPJB 3592 LNIA AEEF KIBO LGFN MAIB BLCJ LHAJ KKBO LGKF FGHF GFHK ACCC FEAH CBLF IHPJ KMDC FDMC 3608 IEPI AKKJ BBBK NIAP EEGJ IBAD EEHP ABPN JLOA FEBP HPKG FIFE DKHE NOBE EMDA LNIA ANMM 3624 PPFH DMPM JIFE GDKP KKPD JPGO AKKM DFMB KKFF LPGA FFGK MCKI GGBE FIGJ IFFG CANG CKLG 3640 MODE PAAP EBBA KKAD BBBB AAAD HIHG MNNM IFFD FMGA FFCF OOMB KKCN HAKJ GCBN ONFG HEIF 3656 KIEC KDLN PLAJ KGBH NOLP ICDJ MBOG COMB KLMC AMPB LNIA AEDH HGBE ENJG LACA KEDH COIG 3672 EOPF AHPJ KKAD BPOJ PGAG ONKB DHKP CAIM ECKI EHHJ GNIE FDBA PONH IIDO ILAF OBFD LNGC 3688 MEHN KDLM DGMB KJIH IDPF NJEF BLND GPFP EBPN MBBA KKAG PNFP PDJG GBJL HICF HJFN DPOO 3704 MAIB DKMA OHCN MCKK MDAL PCLM IBAM CBMB HHKP CAIG AOMB KLFE IGGP JKKA FEMD EBAN ADLJ 3720 BNIE FEGK AMOA GOBE EMED DEIG AJNN MAIB BKMF FMBL BJGG HLAB BKMC IEJL BJGG HLAC KIII 3736 PMFN BFEJ BNMC EBAG OJIA KPJB GELL CKJE JJGG HLAC PGGH FFCE AGHF GMFN BFEJ NJMG NPFC 3752 CKJH MICA JKOP KKFF GHJM OMAO PBHH FFCK GHBL KKGC CAIL ECKI CMOC JFEL GHPM LLEA MMDE 3768 AHOI IBKO JCGD LMCJ JFJI GHHK ADPF GIFE CFAF HGGA MKJP EBAL NHIE FCLC DMOO GAEA ACBP 3784 BJBL KKGC DPOE FADO ENKM JCMB NOJK GBFE EDPM GGPP ICBF FOFN BLGD KBLM CLNH BAHO PBGG 3800 LJEP PPHD DPGM FLHK HKFG LABP PNCP GPFB KBAG PKLM IBAD CGJF IJGJ BFEI GPEM LAKJ MJPO 3816 KBAD DFIF JGIM DCMB KJEB KJEA JNIF PGAG OMJB GEGE JNOL AICA JCHG LABP IMLB DCDB CLGJ 3832 MOPF AEFK HAKJ KBAJ PGJF KLAL OBCH FFEP IFFE CFFH GHAK HAKJ KAHD HHOL CKJH GDHK EDEM 3848 ACPN AAAB IAAA CDKA CBBF CCDI CAKE AAAH BPPB CADG JPOL CBCN LPPP CBCN PPPD NPNH KCDL 3864 DPPP CADG AAEF PPMI CADO AACE NPMB CAEM CDCF PPPJ NPLD CDEC PPJO CAGJ PPOO NPJG IKMF 3880 DPIF CAIC AAGJ BPIC CAIK ACPG EAAH AAAK AABO AAAJ PPNM CAPL CAAO CAOI PPNO AACN PIDJ 3896 DPBK CAPC ACJP GAAH AACE ABPM POFC PPLE NPAF PPPO NOOL NOOC CACI AAHO NONC BPPP HJJG 3912 CBEB AAAM NOLO CBFN LNGO CBEF CCBC CBJI PPPJ CBGN PPPO CBIC PPPH NOJC PPPL PPPE LIJC 3928 CBKG PPGN CBBE LOFF CBME NPPP CBPF PPON NODL NPPP CBOB LMED CBOF CCBC PPPG NOBO NMAJ 3944 AABD NOAK LLPP CBPJ CCBC AAAN NNNO AABA CCGF NNNC AAAP CCLO PPPD CCGF PPOH NNJK FBKH 3960 CCIE PPPA NNHL PPPK CCLO PPPO CCJJ PPOP NNEB CCMO AAAJ NNDC PPPN CCJJ CCPD PPOK CGOA 3976 NNAM CDAF AAJM CDBL PPPA PPMH CDCN PPOC NMNC AAFP NMKO NMJH CDGE CCLO PPPF NMJL ODCH 3992 CDGN PPOM NMJD CCGF NMII BMIF NMHD NMGA CACI CDLD CDJF EAAC CAND HPPP CDKO CDKP KJIL 4008 CDLA GDJF CDIK GDIK CCPK GCPK CDBE GDBE CEMD EAAB EAAA CDKN CEEK CDLB CDLC CAFM PJPL 4024 GAFM CDEM GDEM CDDH GDDH NLMH GEMD CCOC GCOC CELO GELO CELP GELP CEMA GEMA CEMB MCLH 4040 GEMB CEMC GEMC CCPO GCPO CDBM GDBM DPPP ALPP AMAA NLDB LLAJ NLDA LLAG NLGN LLAK GIKF 4056 PLAK LLAI LLAH NLGD LPPM NLHM LKPB NLDE LLCF NLFM LPPM NMCK LPPM NLCP LKPB NLCO JBHB 4072 LLCF NLEG LPPM NLDH EHBP LPPM NLCN LKPB NLCM LLCF NLCL LPPM NLCK HPPP AENK HPPP KIML 4088 NLJC LPPM NLFP JPCL NLLI AEKD HPPP HPPP NMFA PPLG JLLI NLLI NLGD LPPM NMDD NMFA OBEJ 4104 NMDM NLOA LPPM NLDP LKPB NLCJ LLCF NLCI LPPM NLJM HPPP CEED HPPP NLJI LPPM NLCH BCMO 4120 LPPM NLCG NLEJ NLCF NLOK HPPP PPND JLDI NLDI PPPP AABP PPLG LPJN PPJN NLGD LPPM ICFF 4136 LLIJ PLHM NLHD NPPO NLGI NPPH CEEM NLIE NPNL CEGJ PLEC BPID CAKC LFJA JIIK JGJB MPKH Le support 1 comprend également une matrice 121 dont un exemple est illustré à la (correspondant à la page 11 du support 1), une matrice 122 dont un exemple est illustré à la (correspondant à la page 12 du support 1) et une matrice 123 dont un exemple est illustré à la (correspondant à la page 13 du support 1). Les matrices 121 à 123 incluent des symboles binaires en noir et blanc et peuvent être considérées comme des codes-barres bidimensionnels. Dans le cas présent, les symboles binaires en noir et blanc présentent des configurations de codage différentes dans les matrices 121 à 123. Les matrices 121 et 122 sont des matrices système. La matrice 123 (et potentiellement d’autres matrices suivantes) contiennent les données numériques mémorisées à décoder. Les matrices système 121 et 122 contiennent, de façon compressée : -un interpréteur d’une machine virtuelle de deuxième niveau (par ailleurs implémenté dans le supplément optionnel d’algorithme) complet pour la machine virtuelle de premier niveau ; -un compilateur dynamique quasi complet pour une machine virtuelle de troisième niveau, permettant de multiplier par plus de 15 la vitesse d’exécution à partir du décodage de la deuxième matrice système 122; -le programme complet de décodage des matrices de données 123, incluant la reconstruction du fichier utilisateur en ayant recours, si nécessaire, à deux types de correction d’erreurs Reed-Solomon (méthode très répandue, utilisée par exemple par les QR codes) : correction intra-matrice (15 % de redondance pour corriger jusqu’à 7,5 % d’erreurs dans une même matrice) et correction inter-matrices (3 matrices de redondance par groupe de 17 matrices pour corriger jusqu’à trois blocs de données restées erronées malgré la correction intra-matrice). Par ailleurs, à la place d’un fichier utilisateur, il est prévu que la matrice 123 (et éventuellement suivantes) puisse contenir du code additionnel qui permettra de charger dans le système une version complète d’un compilateur dynamique spécifique, ainsi que tout système d’exploitation ou logiciel utile. Les matrices système 121 et 122 contiennent des informations de correction d’erreur selon la méthode Hamming(8,4), qui est à la fois simple et éprouvée. La matrice 123 des données numériques mémorisées à décoder (illustrée à la ) comprend ici : -un cadre continu noir 124 assez épais ceinturant cette matrice 123 ; -un espace blanc 125 sur les quatre côtés, d’épaisseur égale à celle du cadre 124, délimité par une seconde ligne noire 126. L’épaisseur de la ligne noire 126 n’est pas un paramètre important. La succession cadre noir 124, cadre blanc 125, cadre noir 126 permet de détecter facilement la présence d’un cadrage dans l’image. La continuité du cadrage autour de la matrice 123 permet de discriminer celle-ci d’éventuels autres éléments présents dans l’image (des poussières par exemple), et de détecter la position des quatre coins de la matrice 123. Un même système de cadrage peut également être utilisé pour les matrices 121 et 122 ; -trois coins entièrement noircis 127, et un coin 128 partiellement noirci, ce qui permet de détecter l’orientation de la matrice 123 dans l’image (y compris en miroir) et de le discriminer par rapport à une matrice système 121 ou 122 dont le noircissement des coins peut être différent ; -un noircissement 129 d’un (ou plusieurs) gros points dans l’espace blanc à la suite des coins noircis 127, afin d’éventuellement encoder la version de la matrice 123 ; -un espace blanc 130 dans le cadre interne d’un des côtés long de la matrice 123 (celui du coin 128, qui indique le point de démarrage de la lecture optique). Cet espace 130 est utilisé comme guide optique pour parcourir chaque ligne de l’emblème, en s’adaptant à d’éventuelles déformations géométriques ; -un ensemble de lignes crénelées 131 portant de l’information binaire, chaque ligne étant constituée d’un long trait 132 ponctué à intervalle régulier d’un petit trait perpendiculaire 133, le long trait 132 pouvant se poursuivre à une extrémité ou bien à l’autre de chaque petit trait 133 afin de dénoter une valeur de bit à 0 ou à 1. Les lignes 131 sont alternativement décalées d’un demi-intervalle afin que deux petits traits 133 d’une ligne 131 à l’autre ne soient jamais alignés, pour éviter l’éventuelle jonction des deux petits traits 133 qui pourrait être induite par le débordement de l’encre lorsque trop de pixels noirs sont présents dans une zone ; Chaque ligne crénelée 131 (une zone de lignes crénelées 131 est illustrée à la ) représente optiquement un signal numérique binaire. Les petits traits perpendiculaires 133 constituent l’horloge du signal, à raison d’une marque d’horloge par bit. Cette régularité de l’horloge dans le signal permet de tolérer des déformations optiques importantes, à différentes échelles. Un bit est détecté par le rétrécissement de la largeur de la ligne globale (passage du petit trait 133 au long trait 132 sur le signal). Pour renforcer le contraste de largeur et la position du long trait, l’extrémité du petit trait 133 opposée au long trait 132 (dont la position marque la valeur du bit) est allongée d’un pixel. De plus, l’épaisseur de l’autre extrémité du petit trait qui jouxte le long trait est réduite d’un pixel pour assurer une chute plus brutale du signal vers le long trait, c’est-à-dire compenser le renflement induit par l’assemblage de trop de pixels noirs imprimés. On pourra également considérer que des symboles binaires des matrices 121 à 123 avec un très fort contraste de luminosité correspondent à des symboles en noir et blanc. La distinction entre le noir et le blanc est effectuée par le procédé logiciel de traitement d’image intégré à la partie préalable ou amorce. Selon un aspect indépendant de l’invention, le support 1 peut être dépourvu des matrices systèmes 1 et 2, l’exécution du programme réalisé décodant directement la matrice 123 des données numériques mémorisées à décoder. Support (1) comportant des informations optiquement discernables par un utilisateur, ces informations mémorisant des données numériques et des moyens de décoder les données numériques, caractérisé en ce que les informations optiquement discernables comprennent une succession de : a) un texte explicatif d’un procédé à mettre en œuvre pour décoder les données numériques, le texte explicatif incluant : i) une instruction (102) de numérisation de matrices noir et blanc de symboles binaires à un emplacement déterminé du support ; ii) une instruction (103) de paramétrage d’un programme à réaliser pour convertir les images numérisées en séquence numérique ; iii) une instruction (104) de génération d’une séquence numérique à partir de l’application du programme réalisé et appliqué aux matrices numérisées ; b) un algorithme (110) à transcrire dans un langage de programmation, de façon à initialiser une mémoire de travail d’une machine virtuelle et de façon à exécuter cette machine virtuelle ; d) une liste de caractères alphanumériques (118, 119, 120) à saisir codant des données de remplissage de la mémoire de travail de la machine virtuelle et un programme de décodage d’une première matrice de symboles binaires ; e) des première et deuxième matrices à numériser (122, 123) incluant des symboles binaires en noir et blanc, disposées à un emplacement prédéterminé du support, la première matrice (122) incluant des données numériques d’un programme de décodage de la deuxième matrice (123), la deuxième matrice (123) contenant les données numériques mémorisées à décoder. Support (1) comportant des informations optiquement discernables par un utilisateur, selon la revendication 1, dans lequel les symboles de la première matrice (122) sont des points noirs ou blancs. Support (1) comportant des informations optiquement discernables par un utilisateur, dans lequel le support (1) se présente sous la forme d’une succession de pages discernables par un utilisateur et ordonnées par des indices discernables par l’utilisateur sur chaque page du support (1). Support (1) comportant des informations optiquement discernables par un utilisateur, selon la revendication 3, dans lequel le support est sélectionné dans le groupe constitué des feuilles de papier, des microfilms, des microfiches, des films de cinéma, et des plaques en verre, saphir ou céramique. Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel le texte explicatif (101) inclut au préalable une synthèse des différentes étapes à mettre en œuvre pour décoder lesdites matrices. Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel les premières informations optiquement discernables sur le support (1) comprennent un explicatif (100) de la structure des informations présentes sur le support et un explicatif des données numériques stockées. Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel la liste de caractères alphanumériques (118, 119, 120) à saisir est précédée par c) une instruction de saisie (117) de caractères alphanumériques. Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel la première ou la deuxième matrice à numériser comprend l’alternance d’un premier cadre noir (124), d’un cadre blanc (125) et d’un deuxième cadre noir (126). Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel la première ou la deuxième matrice à numériser comprend des lignes crénelées (131) incluant chacune un long trait (132) ponctué à intervalle régulier de petits traits perpendiculaires au long trait (133). Support (1) comportant des informations optiquement discernables par un utilisateur selon l'une quelconque des revendications précédentes, dans lequel l’instruction (104) de génération d’une séquence numérique à partir de l’application du programme réalisé comprend une instruction d’organisation de la séquence numérique en mots machine.