by FreeWebsiteTranslation.com
|
|
Bienvenue chez
Blady.
Voici réunis ici, les projets en cours et les nouveautés
du mois.
Ce mois ci découvrons :
Et toujours :
Tous les fichiers (tgz) peuvent être décompactés sous :
- Compilateur d'automate
(novembre 2023) :
Voici un projet qui n'est plus tout jeune. Cependant, il
a fait l'objet d'une publication dans le regretté
magazine Pascalissime (numéros 62 et suivants). Le
concept proposé est de modéliser un automate bien réel
ou purement informatique en une suite d'instructions
simples le décrivant sous tous ses aspects et de
transformer cette description en un programme activant
l'automate. Le programme tourne avec Think Pascal 4.0.
Texte de
l'article (PDF).
Sources
du programme (1.0a - Pascal).
Sources
d'un exemple d'automate (Pascal).
Reprise du projet en langage Ada pour le présenter au
concours organisé par Ada
France où il finit troisième au classement en
2001.
Il présente toujours une abstraction des automates à
états finis par un script formé de quelques mots clés.
Ces scripts sont alors convertis en packages Ada avec un
moteur événementiel pour être utilisés au sein d'un
logiciel en faisant l'usage. (Version 2.0a)
Légère modification en début 2002 pour le support des
caractères accentués. Il passe la compilation avec GNAT
sous Mac OS X. (Version 2.1a)
Ajout de la prise en compte des commentaires d'une seule
ligne commençant par --, les unités externes ne sont
plus mises dans l'unité spécification générée, le mode
Debug affiche les éléments chaînés par un +, le status
de terminaison du programme est rendu à l'OS, quelques
fonctions utilitaires sont réécrites avec la nouvelle
bibliothèque Ada 2005. Coloration de la syntaxe propre à
l'automate avec l'utilitaire SubEthaEdit.
(Version 2.2a)
Sources,
texte explicatif et exemple (2.2a - Ada 2005 - 284
Ko - texte accentué en UTF-8).
Ajout d'une section debug activée à chaque lecture d'un
événement, du mode de syntaxe pour BBEdit,
du passage à UXStrings. (Version 3.3.0 - Ada
2012) Source sur Github et Alire.
Retour en haut de la page
- Portage de gpc sur Mac OS
X (février 2003) :
- Mise à jour du projet
de portage du compilateur Pascal gpc sur Mac OS X
10.0 (la public beta a cessé de fonctionner). Gpc
s'appuie sur gcc. Notamment, gpc 2.0 s'appuie sur cc
2.7.2.1
Dans un premier temps suivons les instructions
pour compiler cc avec le package de fichiers à
remplacer : modifs_gcc.
Dans un second temps suivons les instructions
pour compiler gpc avec le package de fichiers à
remplacer : modifs_gpc
(307 Ko).
Son exécution reste sujette à un problème de
compilation. Regardons les résultats.
- Lancement du portage des dernières versions de gpc
- 2.1 en version beta et alpha - sur gcc 2.95.2. Ce
portage s'avère provoquer quelques
dysfonctionnements que je vous soumets. J'ai envoyé
le texte
au site GNU
en Allemagne. Je n'ai pas de réponse pour le moment.
Ceux d'entre vous ayant des idées sur le sujet sont
les bienvenus.
- Adaptation du portage à la version finale de Mac
OS X (10.0), c'est à dire sur Darwin 1.3 et les
sources de gcc (926-3) correspondant à gcc 2.95.2.
Cette version parait plus "propre". La difficulté
revient à intégrer les modifications réalisées par
Apple pour son gcc dans gpc. C'est à dire manipuler
quatre fichiers en même temps :
- celui de gcc 2.95.2,
- celui de gcc 926-3,
- celui de gpc 2.1,
- celui de gpc résultant.
Cela concerne une dizaine de fichiers de plusieurs
dizaines de milliers de lignes de C avec des
dizaines de modifications pas toujours bien
identifiées. Je suis actuellement sur le dixième...
- GPC compile avec GCC sur Mac
OS X ! Dans un premier temps suivons les instructions
pour compiler gpc avec le package de fichiers à
remplacer : modifs_gpc
(462 Ko).
Pourtant, son exécution reste sujette à un problème
de compilation. Regardons les résultats.
- Changeons de stratégie.
La première consistait à suivre celle indiquée par
GPC. La seconde consiste à suivre celle utilisée
pour g77 le compilateur fortran. Cette dernière
démarche nous est donnée par Keisuke Fujii pour g77 (merci à l'indication de
Michael L. Love sur GNU-Darwin). Dans un premier
temps suivons les instructions
pour compiler gpc avec le package de fichiers à
remplacer : modifs_gpc.
Pourtant, son exécution reste sujette à un problème
de compilation. Regardons les résultats.
- Le préprocesseur (gpcpp)
est lui aussi modifié pour prendre en compte les
macros spécifiques du Pascal Mac.
Version modifiée : GNU Pascal Compiler PreProcessor
version 20011202, based on gcc-2.95.2 19991024
(release)
Je l'emploi avec la commande suivante :
gpcpp -ki -C -P -DTARGET_API_MAC_CARBON -DMWERKS=200
-DPOWERPC=TRUE -DMAC68K=FALSE -DPROCTYPE=TRUE
-lang-pascal toto.p
Option -ki : n'expense pas les "includes", mais les
traite,
Option -C : garde les commentaires,
Option -P : ne génère pas les commandes "#line",
Option -D... : définit une macro.
- Utilisons le portage
de gpc-osx proposé par Adriaan van Os. Le site de gpc-osx fourni
un package pour Mac OS X 10.2, 10.3 et 10.4 (PPC et
Intel) avec les bibliothèques Carbon.
Pour ceux qui sont restés sur Mac OS X 10.1, suivons
les instructions
pour compiler gpc.
Retour en haut de la page
- Arbres binaires (décembre
2012)
- La structure d'arbre binaire exposée ci-dessous a
été utilisée pour le compilateur
d'automate, décrit plus haut.
À ce qui a déjà été dit dans l'article consacré au
compilateur d'automate, j'apporte ici un complément
sur l'utilisation de l'arbre binaire pour mémoriser
les identificateurs du langage et son optimisation.
Texte
de l'article. Source
du module (1.0a - Pascal). Exemple
(Pascal).
- Utilisation d'Ada pour généraliser le concept
d'arbres binaires sur des types de données
quelconques sans les contraintes imposées par le
Pascal.
Source
du module initial (2.0b - Ada - texte accentué
en UTF-8)
Cette première idée consistait naturellement à
construire un arbre équilibré au fur à mesure des
ajouts d'éléments supplémentaires. Mais à l'époque
le temps manquait, sans accès à Internet... Je me
suis rabattu sur une solution béton mais brutale :
l'arbre binaire est réalisé par construction
dichotomique. J'ai donc codé une procédure "Balance"
qui reconstruit la dichotomie comme cela est
expliqué précédemment.
- Récemment,je suis tombé coup sur coup sur un livre
traitant des arbres binaires "Arbres, Tables et
Algorithmes" (J. Guyot - Ch. Vial - 1989) et sur une
impressionnante liste de sites sur Internet (ceci
même en ne retenant que les sites de langues
françaises). Les auteurs du livres expliquent la
construction d'un arbre binaire AVL pour G.M.
Andelson-Velskii, E.M. Landis (1962). Cette
construction reprenait mon désir premier de
construire un arbre équilibré à chaque ajout
d'éléments. Pour cela l'astuce est d'ajouter à
chaque noeud un attribut qui indique si les
sous-arbres de chaque noeud penche plutôt à gauche,
à droite ou sont en équilibres. L'action résultante
consiste à rééquilibrer l'arbre chaque fois que
l'écart de chaque sous arbre est supérieur d'un
niveau.
Source
du module AVL (1.0a - Ada - texte accentué en
UTF-8)
- Généralisation de la bibliothèque Arbres Binaires
avec de nombreuses fonctions utilitaires donnant la
hauteur, le minimum, le successeur, etc.
(Source
- Ada 95 - V1.0a - texte accentué en UTF-8, résultats)
Retour en haut de la page
- Application en Java avec
Project Builder : Crypt (novembre 2001) La
première étape consiste à suivre l'exemple donné en Java
dans l'aide de Project Builder. Pour ce faire, lancer
Project Builder, sélectionner dans le menu Help,
l'élément Developper Center. Une fois l'aide lancée,
sélectionner Cocoa puis Java tutorial (PDF). Suivre
ensuite les explications données pour bâtir sa première
application Java avec mac OS X.
La deuxième étape consiste à obtenir de l'aide sur l'API
Java de Cocoa, sélectionner Aide Mac dans le menu d'aide
du Finder, puis cliquer sur le point d'interrogation en
bas à gauche faisant apparaître le centre d'aide puis
cliquez sur Aide Développeurs. Cliquer sur Cocoa puis
sur Application Kit, le document afficher est : PATH
Documentation > Cocoa > Application Kit API
Reference: Java. Vous avez alors tout loisir de
découvrir l'API Java de Cocoa. Avec en particulier les
objets NSView, NSResponder. L'application JavaBrowser
permet de faire la même navigation dans les classes
Java.
La troisième étape consiste à réaliser une petite
application qui va crypter une phrase.
Texte des
explications.
La fenêtre d'affichage des informations de l'application
"A propos" ou "About" se personnalise en modifiant le
fichier "InfoPlist.strings" et en éditant "Active Target
/ Application Settings" dans le menu "Project" de PB.
Source de
Crypt (Java)
Retour en haut de la page
- Calcul d'un thème astral
(V2.0b - janvier 2002)
Pour mettre en pratique nos connaissances récentes sur
Cocoa et Java, Astro est une petite application qui
calcule des thèmes astraux en version 2.0 alpha.
Le fichier astro.java contient le code de gestion de
l'interface utilisateur. Le fichier astrologie.java
contient le code de calcul du thème astral - ce code
provient d'un programme en basic d'où sa structure...
Cet exemple illustre un moyen de transférer des
informations entre deux objets Java ayant des rôles très
différents.
Le transfert des informations en entrée de l'objet du
calcul se réalise classiquement via le constructeur de
l'objet. Dans notre cas, nous avons codifié et regroupé
les informations des divers objets graphiques en une
chaîne de caractères représentant plusieurs champs
séparés par des virgules.
En sortie les informations de l'objet de calcul sont
récupérées par des fonctions spécifiques.
Source et
application Astro (Java).
Retour en haut de la page
- Bibliothèque mathématique et
algorithmique (avril 2013)
- Arbres binaires, voir ci-dessus
§ d).
- Calculs avec des listes d'éléments génériques
construites à partir du container
Doubly_Linked_Lists francisé pour certaines
opérations, transformé par des fonctions pour
d'autres et augmenté des opérations création à
partir d'un tableau, application d'une fonction de
transformation des éléments, partage en sous-liste,
pour un emploi plus naturel comme avec le langage
Caml.
(Sources
- Ada 2005 - V1.0a)
- Calculs avec des matrices de réels : opérations
usuelles +, -, *, puissance, trace, transposée,
déterminant, inverse, ..., utilisation d'unité
générique et du container Vectors.
(Sources
- Ada 2005 - V1.1c, résultats)
- Codage en Ada des exemples et exercices du livre
"Programmation Avancée, Algorithmique et structures
de données" de J.C. Boussard et Robert Mahl
(Eyrolles 1984) : PGCD, SWAP, BubbleSort,
BigFact,Power Xn, N_Uplets, Permutations,
Jeu du Plus Grand Diviseur Premier, Jeu
Crypto-Arithmétique, Optimisation du remplissage
d'un sac à dos avec quatre procédures de parcours
générique d'un arbre (standard, partiel, min-max,
alpha-beta) utilisant des fonctions spécifiques à
l'arbre en paramètres, calcul de factorielle n et du
nombre de combinaison de n objets pris p à p,
coloriage planaire, palindromes.
(Sources
chapitres 1 à 4 - Ada 2005 - V1.7a, résultats)
... suites contiguës bouclée, tris d'une suite par
interclassement, par segmentation, selon une base
"radix sort", simulation de files d'attentes, tables
de hachage, intersection et union de deux ensembles
par adressage dispersé, dérivation formelle,
transformation en expression postfixée, évaluation
d'une expression postfixée, tri arborescent, graphes
à représentation linéaire fonctionnelle, associative
contiguë et non contiguë, matricielle, par plexes,
par adressage dispersé, chemin de longueur donnée.
(Sources
chapitre 5 à 8 - Ada 2005 - V1.17a, résultats).
- Et toujours, les grands nombres sont à l'honneur
avec la classe Java BigIntCombinatoire
(V1.0a - Java).
Essayez donc le calcul de factorielle 1000 !
- Calculs avec des nombres complexes en Java avec la
classe Complexe
(V1.0a - Java).
- Et aussi, Attribution
simple (Pascal et Ada), Attribution croisée
(Pascal et Ada) et Remplissage
optimisé (Pascal).
Sources des programmes en Ada sur Github.
Retour en haut de la page
- Outils Ada GNAT pour macOS (juin
2024)
Le projet GNAT ou "GNU NYU Ada ToolChain" a démarré à
l'université de New York pour développer un compilateur
Ada 95 GNU.
GNAT a été validé sur plusieurs plates-formes et il est
maintenu officiellement par AdaCore.
GNAT est gratuit dans sa
version GPL, conforme à Ada
2012 (manuel du
langage) et intégré au compilateur libre GCC de
la FSF avec sa documentation.
GNAT pour Mac OS X /
Darwin est disponible pour MacOS 10.1 à 12.
Une liste de diffusion existe sur gnat-osx.
- Installation de
GNAT : Voici les instructions de mise en place
et l'utilisation du compilateur GNAT avec le
Terminal, pour :
- MacOS
10.1 : gcc 3-1041 de gnat-osx (août
2003),
- MacOS
10.2 : gcc 3.1-1173 de gnat-osx
(août 2003),
- MacOS
10.3 : gcc 3.3-1495 de gnat-osx
(septembre 2004),
- MacOS
10.4 : gcc 3.3-1650 de gnat-osx
(mai 2005), gcc 4.3 de gnat-fsf (février 2008)
et gcc 4.3 de gnat-gpl avec asis et les
utilitaires associés (mai 2009). Le compilateur
GNAT GPL 2009 (juillet 2009) déjà prêt à
l'emploi est disponible pour Mac OS X PPC sur Source
Forge,
- MacOS
10.5 à 10.7 : gcc 4.5 de GNAT GPL
2012 (juin 2012).
- MacOS
10.8 : gcc 4.7 de GNAT GPL 2013
(juin 2013) et gcc 4.8 de GNAT-FSF (avril 2013)
- MacOS
10.9 : gcc 4.9.3 de GNAT GPL 2015
(juin 2015) et gcc 4.8 de GNAT-FSF (avril 2013)
- MacOS
10.11 : gcc 4.9.4 de GNAT GPL 2016
(juin 2016) avec les correctifs gnatdoc / GPS et
gcc 5.2 de GNAT-FSF (novembre 2015)
- macOS
10.11.6 : gcc 6.3.1 de GNAT GPL 2017
(juin 2017)
- macOS 10.13 : gcc
7.3.1 de GNAT Community 2018 (juin 2018)
- macOS 10.13.6 : gcc
8.3.1 de GNAT Community 2019 (mai 2019)
- macOS 10.15 - GNAT 2019
: gcc 8.3.1 de GNAT Community 2019 et gcc 9.1.0
de GNAT-FSF (février 2020)
- macOS 10.15 - GNAT 2020
: gcc 8.4.1 de GNAT Community 2020 et gcc 9.1.0
de GNAT-FSF (octobre 2020)
- macOS
11 - GNAT 2021 : gcc 10.3.1 de GNAT
Commnunity 2021 (juillet 2021)
- macOS
12 - GNAT FSF 11 : gcc 11.2 sur FSF
(février 2022)
- macOS 12 - GNAT FSF
12 : gcc 12.1 sur FSF (mai 2022),
gcc 12.2 sur FSF (septembre 2022)
- macOS 13 - GNAT FSF
13 : gcc 13.1 sur FSF (mai 2023)
Voir l'utilisation
avancée.
- Intégration avec XCode et
Carbon : En prime, l'utilisation d'Ada est
possible avec XCode, le
Terminal, l'API Carbon Ada (299 Ko) et
l'ensemble des compilateurs GNAT par paramétrage des
projets XCode ou du Terminal. Voir en complément
page Alpha l'intégration
dans XCode d'Ada et des dernières versions de GNAT
avec icône Ada personalisée.
Ce mois-ci regardons dans le détail l'interface de
programmation du module de dessin QuickDraw
: le système de coordonnées, les rectangles, les
régions, les polygones, la couleur, le crayon, les
figures, les motifs, le texte, l'espace graphique.
N'est plus valable avec Mac OS X supérieur à
10.5.
- Outils de développement :
Différents outils
et scripts sont disponibles en complément du
compilateur proprement dit :
- P2Ada : le traducteur Pascal en Ada (P2Ada) avec son utilisation sur
des exemples,
- C2Ada : le traducteur C en Ada C2Ada avec
quelques modifications en page Alpha et son utilisation sur
des exemples,
- Reformat : outil de formatage des
textes sources Reformat,
- jGRASP : l'environnement de
programmation jGRASP,
- LookUp : Deux outils nous aident à la
recherche de la bonne routine : Lookup pour
Carbon Ada et XDoc
pour Carbon C.
- GNATStudio : environnement de
programmation intégré (IDE) dédié au langage
Ada. Il permet d'effectuer toutes les activités
classique du développement d'un logiciel : le
codage dans un éditeur dédié à Ada,
l'intégration de bibliothèques en Ada, C ou C++,
le test, le déverminage ou l'analyse de code.
- GPS GPL 2009 (août 2009) déjà prêt à l'emploi
avec les compilateurs GNAT et JVM-GNAT est
disponible pour Mac OS X PPC sur Source
Forge. Voir son installation et sa construction
en français
et en anglais
sur Mac OS 10.4 PPC.
- GPS GPL 2019 (mai 2019) déjà prêt à l'emploi
disponible pour Mac OS X Intel par AdaCore. Voir son utilisation.
- GNATStudio 23.0wb (novembre 2022) déjà prêt à
l'emploi est disponible pour macOS 12 Intel sur Source
Forge. Voir son installation
et sa construction.
- GNATStudio 24.0wa (juillet 2023) déjà prêt à
l'emploi est disponible pour macOS 13 Intel sur Source
Forge.
- GNATStudio 25.0wa (juin 2024) déjà prêt à
l'emploi est disponible pour macOS 13 Intel sur
Source Forge. Voir son installation
et sa construction.
- AdaStudio : Visual Ada Developer (VAD)
est un logiciel libre pour construire des
interfaces utilisateurs graphiques en Ada, voir
son utilisation.
- Tutoriaux : Vous trouverez aussi en page à savoir :
- GDB : l'utilisation du dévermineur GDB 7.4,
- POSIX :
l'installation de la bibliothèque Posix GPL 2012
pour Ada,
- Exception : l'utilisation des
extensions GNAT avec les exceptions Ada,
- Accents : l'affichage des caractères
accentués,
- Multi-tâche :
un exemple d'utilisation du multi-tâche.
- JVM-GNAT GPL 2013
par AdaCore (mai
2013) est l'environnement de développement
Ada 2005 pour la plate-forme Java. À partir d'un
code source en Ada, il génère un ByteCode compatible
de l'environnement d'exécution Java 1.5 comme par
exemple les applets. Voir son installation
sur Mac OS X, les exemples
JGNAT 1.3p (344 Ko), l'exemple en ligne Connect
Four (GPL 2009) et le status
complet de compilation des exemples.
Les compilateurs JVM-GNAT GPL 2009 (juillet 2009) et
GPL 2013 (mars 2018) déjà prêts à l'emploi
sont disponibles pour respectivement Mac OS X PPC et MAC OS X Intel sur Source
Forge.
Retour en haut de la page
- Bibliothèque Turbo Pascal en
Ada (V3.4a pour GTKAda et V10.2a pour Gnoga - juillet
2021) Les API CarbonAda facilitaient la
programmation en Ada sur Mac, et aussi facilitaient la
migration d'une application Pascal en Ada. GTKAda prend la relève avec
avantage d'être multi-plateforme. Pour ceux qui
souhaitent migrer des programmes depuis le Turbo Pascal,
je fournis, en version préliminaire, une bibliothèque
des unités de Turbo Pascal en langage Ada. Il s'agit
d'une toute première version des unités basées sur
GTKAda. Dans la bibliothèque vous trouverez plusieurs
exemples de test.
Source
de la bibliothèque (V3.4a - Ada 2005, GTKAda CE
2021, XNAdaLib-CE-2021).
Une version basée sur Gnoga
orientée Web est disponible :
Source
de la bibliothèque et manuel
de référence (V10.2a - Ada 2005, Gnoga V1.2a,
XNAdaLib-2016)
Exemples de test (GTKAda) :
Exemple de tracés de courbes (GTKAda) :
Exemple de tracés de caractères graphiques (GTKAda) :
Plus d'exemples d'utilisation de TP7Ada avec GTKAda.
Exemple complet (Gnoga) :
Historique :
- 10.2a : Adaptation à Gnoga 1.2a et XNAdaLib-2016
- 10.1a : Ajout des traductions des exemples Courbes,
Sudoku et Surfaces avec Zanyblue
- 10.0a : première version basée sur la version 1.1a de
Gnoga
- 3.4a : Adaptation à GTKAda CE 2021 et XNAdaLib-CE-2021
- 3.3a : Adaptation à GTKAda GPL 2016 et XNAdaLib-2016
- 3.2a : Adaptation à GTKAda GPL 2015 et XNAdaLib-2015
- 3.1a : adaptation à la version 3.8 de GTKAda
- 3.0a : adaptation à la version 3.4 de GTKAda
- 2.7a : ajout des polices de caractères vectorielles
CHR
- 2.6a : mise en oeuvre de l'unité TP7.Mouse
- 2.5a : mise en oeuvre de l'unité TP7.CRT
- 2.4a : mise en oeuvre de l'unité TP7.DOS
- 2.3a : mise en oeuvre de l'unité TP7.Graph
- 2.2a : intégration de la saisie à la fenêtre texte
- 2.1a : mise en oeuvre de l'unité TP7.System
- 2.0a : deuxième version basée sur GTKAda
- 1.0a : première version basée sur CarbonAda
Retour en haut de la page
- Bibliothèque Think Pascal en
Ada (V1.0f - octobre 2005) Les API Carbon
facilitent la programmation en Ada, et aussi facilitent
la migration d'une application Pascal en Ada. Pour ceux
qui souhaitent migrer des programmes depuis le Think
Pascal, je fournis, en version préliminaire, une
bibliothèque des unités de Think Pascal en Ada. Il
s'agit d'une toute première version des unités basées
sur Carbon. Les unités ont été recréées à partir de la
documentation mais ne sont pas encore totalement
fonctionnelles. Elles ne contiennent que la partie
spécification pour certaines. Les corps complets des
unités sont disponibles.
Source de la
bibliothèque (Ada)
Historique :
- 1.0f : ajout de quelques corrections pour la
compatibilité avec
la dernière version de XCode.
- 1.0e : ajout d'une procédure avertissant lorsqu'une
fonction n'est plus supportée, ajout d'une procédure
émulant "SystemTask".
- 1.0d : ajout du code de la gestion des fenêtres et
complément du code de la gestion des routines de l'unité
'system'.
- 1.0c : ajout du code de la gestion des chaînes de
caractères et du code de la gestion des routines de
l'unité 'system'.
- 1.0b : modification de la gestion de fichier
(spécification et code) avec une unité de base pour la
sélection des fichiers avec le Finder et deux unités
filles pour la gestion des fichiers textes et des
fichiers typés.
- 1.0a : première version des parties spécifications des
unités émulant Think Pascal.
Retour en haut de la page
- Automate d'écriture
interactive (octobre 2003) Imaginez une histoire
dont vous êtes le héros. Ce nouveau genre littéraire,
assez peu répandu, il est vrai, se présente sous forme
de petites scènes avec un choix laissé au lecteur qui
permet de se diriger vers une autre scène. L'histoire
n'est pas linéaire. D'un autre côté, l'ordinateur
"multimédia" nous propose des possibilités immenses qui
sont malheureusement souvent sous exploitées car trop
linéaires. Le mariage des deux peut nous apporter une
réelle nouveauté. Définissons le cahier des charges et
donnons un exemple de page avec une syntaxe de
description de script de notre récit
interactif multimédia.
Appel à contribution : Je concentre ce travail
principalement sur l'automate et non sur le texte
lui-même, alors que le texte est le résultat principal
de ce projet. Si un de vous ou une de vos connaissances
permet que j'expérimente l'automate sur un de ses textes
(un texte court, même pour jeunes, fera très bien
l'affaire), il en sera grandement remercié.
Retour en haut de la page
- Construire une base de donnée
pour bibliothèque (1.7a - août 2005)
S'il y a bien un emploi typique pour un ordinateur,
c'est celui de gérer une base de données. La première
d'entre elles est bien sûr la base des fichiers de
l'ordinateur. Nous allons donc mettre à profit cette
faculté pour construire une base de données d'une
bibliothèque bien réelle, celle des livres que nous
possédons. Nous allons aussi utiliser les composants
disponibles pour Mac OS X mais qui le sont aussi sur
d'autres plateformes (Win, Linux...). Définissons le
cahier des charges de notre bibliothèque
(450 Ko), la composition et la création des tables de
données avec MySQL, la programmation avec Java,
l'interface utilisateur, l'import depuis un fichier et
depuis Internet, la recherche d'une oeuvre.
Sources de la
bibliothèque (36 Ko - Java - texte accentué en
UTF-8).
Historique :
- 1.7a : Création de la table des textes
"textes".
Ajout des champs biographie et commentaire à la table
des auteurs
Modification écran saisie et info auteur
Ajout des champs résumé et commentaire à la table des
oeuvres
Modification écran saisie et info oeuvre
Correction saisie enumérés
- 1.6a :
Création de la table des énumérés "enums".
Création de l'écran saisie des énumérés.
Clarification des champs "Nature" et "Genre".
Affichage des ISBN et lignes non créés lors des imports
CSV et Internet.
Ajout du champ genre dans les oeuvres.
Le champ nature est remplacé par genre dans l'import
CSV.
- 1.5a :
Limitation du nombre de lignes affichées par pages
(navigation avec prem, pred, suiv et der).
Ajout d'une fonction de récupération d'une valeur d'une
liste chaînée sous forme d'un entier.
Affichage des possessions sous forme de nombre dans les
listes d'oeuvres.
Changement "group by" en "distinct".
Correction cvs en csv, voilà où mène la dyslexie !!!
- 1.4a :
Filtrage des informations de debug si le propriétaire
n'a pas l'autorisation.
Correction liste des oeuvres d'un propriétaire
(suppression colonne emplacement).
Ajout de la recherche sur les possessions (acquisition,
emprunt, prêt, lecture).
Affichage de l'auteur "nom, prénom" dans info oeuvre.
Correction de l'import HTML avec conversion des NCR
(utilisation de la classe NCRDecoder), nb pages, séries
dans les titres.
Correction recherche série.
Ajout des statistiques dans info Éditeur, Auteur,
Collection, Propriétaire.
- 1.3c :
Évolution des possessions avec des champs communs pour
l'acquisition,
l'emprunt, le prêt, la lecture.
Évolution des propriétaires avec un champ autorisation
d'affichage de débug.
Évolution des possessions avec la création d'une fiche
par possession.
Affichage auteur nom et prénom dans les sélections.
Simplification et correction des requêtes SQL sur les
compteurs.
Évolution des possessions avec la création d'une fiche
par possession.
Ajout de la gestion des prêts.
- 1.2a :
Ajout de la fonction supprime Éditeur, Auteur,
Collection.
Ajout de l'écran remplace / supprime Éditeur, Auteur,
Collection
et nettoie Groupe Auteur.
Prise en compte dans une recherche d'une oeuvre
possédée.
Structure BD V5, ajout champ série et modification
longueur titre à 80.
Ajout du champ série dans info et saisie oeuvre, import
CSV et Internet.
Ajout de la fonction de liste chaînée copyTo.
Correction de l'affichage des oeuvres avec des éléments
inconnus.
- 1.1b :
Titre des pages HTML plus explicite.
Le lien accueil s'affiche toujours même après une
exception.
Amélioration du fonctionnement de l'importation
Internet.
Reformatage du code Java.
Ajout de l'écran recherche_oeuvres avec opérateurs
logiques entre rubriques.
Affichage des listes en colonnes formatées.
- 1.0d :
Correction de la prise en compte ISO-8859-1 dans
l'import Internet.
Enregistrement et lecture sur disque des pages HTML en
ISO-8859-1.
Ajout sauvegarde, restauration, vidage de la liste
sauvegardée des ISBN
Ajout des écrans d'identification et d'inscription du
possesseur au lancement de l'application.
Ajout d'une fonction de saisie des possessions et
lectures pour une oeuvre.
Ajout de l'importation d'une oeuvre avec Internet.
Ajout d'un écran de description de l'application.
Ajout des sources Java de gestion de la base de données
avec import d'un fichier.
Ajout des champs nécessaires à l'importation dans la
structure de la base de données.
Modification de la structure des tables : l'index d'un
auteur dans son groupe est directement le numéro de
l'oeuvre et non plus un nom interne. Ajout des sources
Java de gestion de l'interface utilisateur.
- 0.0a :
Création des tables. Accès à la base bibliothèque avec
JDBC.
Retour en haut de la page
- Unité Ada.Text_IO
multi-format (2.0a - novembre 2005)
Par défaut, Ada lit les caractères et les interprète
avec le codage Latin1. L'objet de cet article est
d'ajouter l'interprétation en Ada des codages de
caractères Mac Roman par les routines de l'unité
Text_IO. Le paramètre "FORM" sert à cela pour peu
d'avoir modifié quelques codes sources de l'unité
"Text_IO". Les modifications proposées ajoute les
codages Mac Roman avec la traduction en Latin1 pour les
routines d'entrées et de sorties de l'unité Text_IO. Le
paramètre FORM peut ainsi prendre deux nouveaux
attributs. Le premier pour le codage des caractères :
"cem" pour "Character Encoding Method" peut valoir "1"
pour Latin1 ou "m" pour Mac Roman. Le second pour le
codage des fin de lignes : "lem" pour "Line Ending Mark"
peut valoir "u" pour Unix ou "m" pour Mac.
Utilisation : "Open(Fin, In_File, "journal.txt", "cem=m,
lem=m");"
Voir le programme source donné en exemple :
"write_mac_roman.adb".
$ gnatmake -a -gnatf write_mac_roman.adb
$ ./write_mac_roman
De même Wide_Text_IO est modifié pour accepter le codage
des caractères Mac Roman avec "wcem=m" et le codage des
fins de ligne Mac avec "wlem=m".
Utilisation : "Open(Fin, In_File, "journal.txt",
"wcem=m, wlem=m");"
Voir le programme source donné en exemple :
"wide_write_mac_roman.adb".
$ gnatmake -a -gnatf wide_write_mac_roman.adb
$ ./wide_write_mac_roman
Le texte résultant est enregistré dans le fichier
journal-mac-ada.txt.
Merci de me signaler si ces modifications sont dans
"l'esprit" de gnat.
Ne pas hésiter à me faire toutes remarques.
Sources
modifiés de Gnat (60 Ko - Ada).
Historique : - 2.0a :
. Mise en conformité avec GNAT PPC-Darwin 2005.
(Modification : a-textio.adb, a-textio.ads,
a-tigeau.adb, a-witeio.adb, a-witeio.ads, a-wtenau.adb,
a-wtgeau.adb, s-wchcnv.adb, s-wchcon.ads, s-wchstw.adb.
Ajout : s-schcnv.adb, s-schcnv.ads, s-schcon.ads.)
- 1.1a :
. s-schcon.ads : correction commentaires sans "wide"
. s-schcnv.adb : ajout "constant" sur une variable
locale, correction nom d'une variable
. wide_write_mac_roman.adb : exemple d'utilisation de
Wide_Text_IO avec Mac Roman
. s-wchcon.ads : gestion des caractères Mac Roman
. s-wchcnv.adb : gestion des caractères Mac Roman
. a-witeio.ads : ajout du support des fins de ligne Mac
. a-witeio.adb : ajout du support des fins de ligne Mac
. a-wtgeau.adb : ajout du support des fins de ligne Mac
. a-wtenau.adb : ajout du support des fins de ligne Mac
. read-me.txt : explication d'utilisation des fichiers
en anglais
- 1.0a :
. s-schcon.ads : gestion des caractères Mac Roman
. s-schcnv.ads : gestion des caractères Mac Roman
. s-schcnv.adb : gestion des caractères Mac Roman
. a-textio.ads : ajout de la gestion des options CEM et
LEM dans le paramètre FORM
. a-textio.adb : ajout de la gestion des options CEM et
LEM dans le paramètre FORM
. a-tigeau.adb : ajout du support des fins de ligne Mac
. write_mac_roman.adb : exemple d'utilisation de Text_IO
avec Mac Roman
Retour en haut de la page
- Les entités HTML (V1.0a
- mars 2005) Les entités HTML facilitent la
diffusion de textes en HTML avec des caractères
accentués. Ceux-ci sont codés soit avec leur position
numérique dans le code ISO 10646 (Numeric Character
Reference) soit par un nom symbolique. Pour moi la
dernière option est la plus lisible. Par exemple,
å représente le a nordique avec un rond
au-dessus, bien plus facile à ce rappeller que
å. La classe NCRDecoder que nous propose
Patrick Hargitt (merci à lui pour la diffusion sous la
licence GPL) permet de traduire une chaine de caractère
HTML en une chaine Java.
Source
de la classe (Java).
Retour en haut de la page
- Traducteur Java en Ada (V1.4b -
avril 2010) J2Ada traduit un code source Java
valide en code source Ada.
Dans cette première version, une grande partie de la
syntaxe générale du langage Java est traduite. Ces
essais (version 1.4b) sont vraiment très préliminaires,
les parties spécification et corps de l'unité Ada
générée sont valides avec quelques modifications
manuelles, voir la page Alpha.
Retour en haut de la page
- Générateur de mots de passe
(octobre 2009) Un mot de passe doit répondre à
des critères strict pour être suffisamment efficace en
cas d'attaque. C'est à dire, contenir des chiffres, des
majuscules, des signes, avoir au moins 8 caractères,
être différents les uns des autres sont autant de
critères communément acceptés pour définir un mot de
passe efficace mais contraignant lorsqu'il faut sortir
un mot de passe de suite pour une inscription en ligne.
La solution est de s'en remettre à un logiciel libre.
Ces derniers ont l'énorme avantage de publier leur code
source et donc par la même de faire la preuve de leur
innocuité. Malheureusement, ils sont seulement
disponibles en ligne de commande avec le Terminal.
Qu'à cela ne tienne, nous allons construire un générateur de mots de passe
(230 Ko) et profiter de nos acquis avec XCode et
AppleScript pour lui construire une interface Mac.
Retour en haut de la page
- Traduction en Ada des exemples
des guides Linux Magazine (V3.0a - octobre 2014)
Les programmes suivants sont la traduction en Ada des
exemples du guide Linux Magazine HS 70 avec une approche
de GTKAda et GNATColl.Python :
- bits.adb : test de parité et puissance de 2 rapide
- hello1.adb : premier programme GTKAda
- hello2.adb : programme GTKAda avec plus
d'événements
- hello3.adb : programme GTKAda avec plus d'objets
graphiques
- hello4.adb : programme GTKAda avec Glade et
GTKBuilder
- hello5.adb : programme GTKAda avec traduction
- multi.adb: programme GTKAda, Glade,
GTKBuilder et internationalisation
- call.adb : programme Ada avec GNATColl.Python
Ajout de la traduction en Ada de l'exemple du jeu de
labyrinthe du guide Linux Magazine HS 71 avec une
approche de AdaCurses : game.adb.
Source
des exemples (Ada 2012 - V3.0a)
Retour en haut de la page
- Sortie textuelle en Ada
formatée à la printf (V1.0a - octobre 2014)
La bibliothèque Formatted_Output utilise la possibilité
d'exécuter des scripts Python à partir d'Ada pour offrir
un équivalent du printf. Ainsi, les options
de formatage sont celles proposées en Python.
L'écriture est assez naturelle :
Printf (Fmt("Somme %d + %d = %d") & x & y &
x+y);
(Idée reprise de Tucker Taft sur comp.land.ada)
Source
de la bibliothèque (Ada 2012 - V1.0a)
Retour en haut de la page
- XNAdalib (novembre 2022)
La bibliothèque XNAdaLib 2022 est l'agrégat de plusieurs
bibliothèques en Ada pré-compilées pour macOS 12. Elle
contient principalement :
- GTKAda 22.2 avec
GTK+ 3.24.33 Quartz natif,
- Glade 3.40.0,
- Florist mi-2022a,
- AdaCurses
6.3 (patch 20221105),
- Gate
3 0.5d,
- Simple Components
4.64,
- AICWL 3.25,
- Zanyblue
1.4.0,
- PragmARC
mi-2022,
- UXStrings 0.4.0,
- GNOGA 2.2
mi-2022,
- AdaControl 1.21r3,
- AdaDep
1.4r1,
- AdaSubst
1.6r5,
- SparForte
2.5,
- HAC 0.21
et aussi :
- Template
Parser 22.2,
- gtksourceview
4.8.1,
- GNUTLS 3.7.7,
- ASIS GPL 2019,
- GMP 6.2.1,
- make 4.3.
Les développeurs de GTK-OSX
ont incorporé l'interface native du Mac utilisant le
moteur graphique Quartz. Un programme avec GTKAda peut
donc être conçu pour tourner sur Mac sans activer le
sous-système X11.
Voir son installation
et sa construction pour macOS 12. Elle est déjà prête
à l'emploi sur Source
Forge.
- UXStrings: chaînes
dynamiques de caractères Unicode en Ada (V0.7.1
- mai 2024)
La bibliothèque UXStrings démarrée dans le projet Gnoga
est maintenant autonome sur Github et sur Alire. L'objectif de cette
bibliothèque est de proposer en Ada un concept de
chaînes de caractères de taille dynamique et avec des
caractères Unicode. Les API sont inspirées de
Ada.Strings.Unbounded afin de minimiser le travail de
reprise de codes Ada existants.
Une première implémentation est proposée comme
démonstration du concept. L'encodage UTF-8 a été retenu
comme représentation interne des caractères Unicode.
Cette implémentation a plusieurs limitations comme le
manque de récupération de la mémoire utilisée. Seulement
quelques API ont été implémentées. Néanmoins, un programme de test est présent
avec quelques fonctionnalités qui tournent. Voir le readme pour des explications plus
complètes.
Une deuxième implémentation UXStrings2 utilise la
propriété des caractères ASCII inclus dans le codage
UTF-8 pour indexer directement les caractères sans
itérer sur le codage UTF-8 si toute la chaîne est
entièrement en ASCII. C'est dans ce cas précis un gain
de temps. Par contre si le contenu change il faut
vérifier la conservation de cette propriété. Cela
entraîne une perte de temps. Les contenus de langue
anglaise sont composés en majorité de lignes sans
caractères accentués donc entièrement en ASCII mais
peuvent présenter certaines lignes avec des caractères
accentués, UXStrings2 prend en compte automatiquement
les deux.
Une troisième implémentation UXStrings3 utilise le
stockage des caractères Unicode dans des
Ada.Strings.Wide_Wide_Unbounded.
Ajout de plusieurs sous-programmes utiles : Contains,
Ends_With, Starts_With, Is_Lower, Is_Upper, Is_Basic,
Is_Empty, Remove, Replace.
Ajout des listes de chaines de caractères avec les
sous-programmes : Append_Unique, Filter, Join,
Remove_Duplicates, Replace, Slice, Sort, Is_Sorted,
Merge et Split.
Une quatrième implémentation UXStrings4 utilise le
stockage des caractères Unicode dans des
Ada.Containers.Vectors ce qui permet de modifier
unitairement chaque caractère de la chaîne.
N'hésitez pas à publier vos commentaires et suggestions
sur les spécifications de la bibliothèque,
ils seront les bienvenus sur Gihub)
Source de la
bibliothèque (Ada 202x - V0.3.0)
Retour en haut de la page
- QtAda6 (V0.4.0 - janvier 2024)
La bibliothèque QtAda6 est une traduction des API de
la bibliothèque graphique Qt en
langage Ada. En fait, c'est les API de Qt for Python
qui ont été ulisées plutôt que celles en C++. Elle
contient les modules QtCore, QtGui et QtWidgets. Elle
comporte plusieurs limitations : les Union, List et
autre Dict ne sont pas traduits, l'héritage de classe Qt
n'est pas disponible en Ada, la gestion de la mémoire
est sommaire. Mais la bibliothèque est tout de même
utilisable sur quelques exemples : quatre programmes de
test sont fournis.
Source de la
bibliothèque (Ada 2022 - V0.4.0).
Retour en haut de la page
À bientôt...
Il est interdit de reproduire, même
partiellement, le contenu de cette page sans autorisation
écrite préalable.
Toutes les marques déposées sont la propriété
de leur dépositaire.
|