Système de Composition

d'Applications Interactives
(S.C.Ap.In.)

Les exemples d'utilisation

--ooOoo--

     L'exposé sur l'application vient d'être réalisée. Démarre maintenant l'adaptation des programmes sous MinGW/Msys.

     Par rapport à la version d'origine, cette adaptation peut conduire à quelques modifications et ajustements de la présente rubrique.

- Les différents composants de l'application

     La liste des exemples des modules correspond à un ordre de conversion et de mise au point mais l'ordre réel sera établi au fur et à mesure de l'avancement à savoir :

1°) - le module ''scapin.c'' :

     C'est le maillon principal d'enchaînement des modules de l'application SCAPIN. C'est le seul module qui reste en mémoire durant tout le traitement d'une page d'un support de composition.

2°) - le module ''sca_strt.c'' :

     Le module démarrage de l'application par l'analyse de la commande lancée. Il effectue les initialisations générales primaires.

3°) - le module ''sca_init.c'' :

     Le module prépare le traitement du support de composition. Il alloue les fichiers de travail de l'application. Il lance du premier module de traitement.

4°) - le module ''sca_fdpg.c'' :

     Le module effectue le traitement du texte du fond de page. C'est donc le programme qui produira une première visualisation graphique de l'application comme celle ci-dessous :

     Cette image visualise la seule page figurant dans le support de composition saisi dans le fichier ''sca_polices_01.sc'' dans l'encadré ci-dessous avec la commande

scapin   ^a   sca_polices_01.sc   format=640,640



 

A noter  :   -  le descripteur ''zformat *,*'' demande à l'application d'ajuster la page du support seulement à la saisie du texte.
    - le descripteur ''z   h 0.8'' demande à l'application de tracer le texte de fond de page à 80% de la taille par défaut.
    - les deux seules polices que j'avais pu récupérer ''couriers'' et ''times'' avaient été dessinées par un rédacteur du Central Documentation de Marignane en possession à l'époque (1985) de stations Apollo tournant indifféremment sous Domain/AEGIS - Unix SYS V et BSD 4.2. Aujourd'hui, avec MinGW/Msys sous Windows, elles demanderaient à être retouchées dans leur dessin ce que je ferais peut-être en fin de démonstration.

5°) - le module ''sca_grns.c'' :

     Le module détecte toutes les réserves marquées aux quatre coins d'un caractère ''*'' puis celles marquées d'un caractère ''#''. Il en détermine l'espace rectangulaire graphique qu'il remplit conformément à l'attribut correspondant donné.

     Le premier exemple qui vient à l'esprit est d'afficher les 32 couleurs et les 32 grains (page 1) ainsi que les grains colorés (page 2) pris en compte par défaut par le noyau graphique avec le support de composition ci-dessous :



 

     Avec le groupe des deux commandes ci-après, les couleurs et les grains sont affichés avec la page 1 du support de composition (la commande ''ng_erse'' ne sert qu'à afficher un fond coloré) :

ng_erse   ^a   i_tl   ;   scapin   ^a   sca_couleurs_grains.sc   format=700,640 page=1

     Les grains peuvent être colorés par combinaisons de couleurs. L'une parmi les multiples combinaisons est affichée par la commande suivante, page 2 du support de composition :

scapin   ^a   sca_couleurs_grains.sc   format=700,640 page=2

6°) - le module ''sca_grls.c'' :

     Le module détecte toutes les lignes marquées aux extrémités d'un caractère ''+''. Il en trace les segments conformément à l'attribut correspondant donné. En droite ligne de ce qui vient d'être fait, il est proposé un affichage des types de traits pris en compte par le Noyau Graphique dans la page 1 du support de composition ci-dessous :

scapin   ^a   sca_grilles.sc   format=700,640   page=1



 

     La page 2 du même support de composition affiche des grilles et des cadres qui se recouvrent avec possibilités de marquage de flèche.

scapin   ^a   sca_grilles.sc   format=700,640   page=2

6°) - le module ''sca_chps.c'' :

     Jusqu'à présent, on ne s'est attaché qu'à l'enrobage de la composition.

     Avec les champs, on attaque la partie vraiment active et productive de l'application à savoir, l'enchaînement de programmes et d'applications affichant, dans un espace donné du support de composition, leurs éventuels résultats graphiques.

     Le module détecte toutes les réserves marquées aux quatre coins d'un caractère ''£'' puis celles marquées d'un caractère ''$'' pour ce qui concerne les champs explicites. La description des champs implicites est fournie par des descripteurs appropriés.

- Un exemple simple "sca_compo_01.sc"

     Le support de composition ci-dessous dont le nom est ''sca_compo_01.sc'' ne comporte qu'un seul champ de nom ''$a'' pour ne pas trop compliquer au début dans lequel on lance le shell ''compo1' 'qui a affiché dans la page ''Ouverture/Fermeture image'' de la rubrique ''Mise en oeuvre'' les dessins d'une maquette d'avion, d'une horloge et de la plus grande locomotive au monde ''Big Boy''.



 

     Il est proposé ici de traiter ce support de composition pour afficher une image 600x800 points qui tient verticalement sur l'écran en attirant l'attention sur la définition du tracé pour cette résolution-écran.

scapin   ^a   sca_compo_01.sc   format=600,800

     Mais si l'on imprime ce même support de composition sur une imprimante à 200 points au pouce comme c'était le but principal dans le traitement de la documentation technique à Marignane dans les années 1980 avec une électrostatique Benson, l'image à imprimer sur un format A4 aurait la taille de 1650x2340 points.

     Ici, puisque nous n'avons que l'écran, contentons nous d'afficher le support de composition sur une image 820x1200 points prenant la majeure partie de l'écran en horizontal dont la taille est de 1600x900 points avec les commandes suivantes :

1°)   -  Ouverture de l'image primaire ''^a'' faisant 1200x820 avec la commande
    ng_cnct    ^a   19   8   1200   820
    L'image est horizontale pour occuper le plus de place possible sur l'écran dans le rapport d'une feuille A4.
2°)   -  Ouverture de l'image ''^a/s'' faisant aussi 1200x820 pour effectuer une rotation de 90° avec la commande
    ng_open    ^a/s   p   0   1200   0   820   0   0   1200   820   1200   0
    L'image est horizontale.
3°)   -  Lancement de la commande ''scapin'' pour traiter le support de composition
    scapin    ^a/s   sca_compo_01.sc   format=820,1200
    Il ne reste plus qu'à capturer l'image horizontale du support de composition et opérer avec un logiciel de traitement d'image comme ''Paint Shop Pro Photo'' par exemple pour obtenir l'image définitive qui suit.

 

     La forme des lettres en particulier est améliorée même si, toujours sur l'écran, la taille du point est inchangée. On est cependant encore loin de la résolution d'une imprimante à 200 voire 300 ou 600 points au pouce où la taille du point, cause du crénelage, est beaucoup plus petite.

     Je verrai un peu plus tard. Il est probable que je me déciderai à tenter le traitement de l'anticrénelage pour ne pas rester sur une impression un peu trop défavorable.

     Il faut rappeler qu'à l'origine, l'application était destinée à imprimer des manuels papier, que l'affichage sur écran n'était qu'une aide à la composition et que les logiciels de traitement de texte ''WYSIWYG'' n'étaient pas encore sortis ou commençaient à peine de l'être..

- Un exemple récapitulatif "sca_compo_02.sc"

     Le support de composition présenté ici sous le nom est ''sca_compo_02.sc'' reprend à peu près toutes les fonctionnalités de l'application ''scapin''.



 

     Par ailleurs, ayant pu récupérer mon ancien PC, un ''Géricom'' sous XP qui ne servait plus à ma fille, j'ai donc pu réutiliser le logiciel MicroCadam. Cela m'a permis de reprendre les possibilités du langage hpgl version 2 offrant en particulier la possibilité de gérer des traceurs à plusieurs plumes donc à plusieurs couleurs ici comme sur le dessin de la ''Big Boy''.

     L'image primaire choisie ici est un format paysage de 1100 points en largeur sur de 800 points en hauteur :

ng_cnct   ^a  19  8  1100  800
ng_erse   ^a   ;   scapin   ^a   sca_compo_02.sc   format=1100,800

- Un exemple de manipulation des images vectorisées dans "sca_compo_03.sc"

     Le support de composition ''sca_compo_03.sc'' reprend la page du support ''sca_compo_02.sc'' en utilisant la logique des calques (un par page à partir de la page 3), toutes les pages étant traitées par l'application ''scapin'' comme suit :



 

     L'image primaire choisie ici est toujours un format paysage de 1100 points en largeur sur de 800 points en hauteur :

ng_erse   ^a   ;   scapin   ^a   sca_compo_02.sc   format=1100,800

     L'exemple ci-dessus met en évidence la fonctionnalité centrale de soumission d'une tâche à un système d'exploitation. Sous Unix, c'est la fonction 'run time' ''system()''.

     Chaque champ du support de composition est associé à un descripteur dans lequel on spécifie le format de l'espace graphique dans lequel certaines tâches appelées pourront y accéder.

     L'application ''scapin'' étant un programme comme un autre, elle peut s'appeler elle-même. On notera alors l'aspect récursif de son fonctionnement.

     Mais la cohérence de l'image graphique résultat ne peut être assurée ici sans l'externalisation des structures d'images du Noyau Graphique dont la durée de vie est permanente tant que le fichier correspondant n'a pas été détruit.

     On voit très bien que, dans le calque de la page 9, le produit des lois élémentaires linéaires de composition d'une lignée d'images n'est pas linéaire et qu'il faut parfois en tenir compte.

     A noter aussi que, dans l'image ci-dessous de la console du déroulement du traitement du support ''sca_compo_03.sc'', le lancement sur l'image primaire ''^a'' en 1 de l'application ''scapin'' qui s'appelle elle-même peut très vite engendrer une cascade d'images-filles comme on peut le voir en 2 puis en 3.

- Des exemples de manipulation des images pixels

     Jusqu'à présent, les images manipulées avaient la caractéristique d'être uniquement vectorielles. Dans les exemples qui vont suivre, il est montré la manipulation des images de pixels. Comme le Noyau Graphique a évolué vers les couleurs codées sur 32 bits, il est devenu possible d'accéder aux formats de fichiers ''.bmp'' traités en standard par la SDL et ''.png'', ''.gif'' et ''.jpg'' avec l'installation de la librairie SDL_image.

     L'exemple proposé est tout ce qu'il y a de plus trivial. Bien des pages d'un manuel font appel à des illustrations dont seule la taille a été ajustée au texte. Les photographies sont intégrées dans l'image primaire du Noyau Graphique avec le service ''ng_getimg.c''.



 

     Le support de composition ci-dessus affiche la page ci-après avec la commande maintenant habituelle :

ng_erse   ^a   ;   scapin   ^a   sca_compo_05a.sc   format=1100,800

     La fonctionnalité appelle déjà quelques commentaires :

     L'exemple proposé maintenant est un peu la ''cerise sur le gâteau''. Tout au long de la démonstration, il a été mentionné le caractère récursif du Noyau Graphique en indiquant qu'il était possible de simuler le phénomène de ''feedback'' quand une caméra filme dans une glace l'image qu'elle reproduit à l'infini. C'est ce que fait le shell appelé comme suit :

sca_compo_05b.prc   ^a



 

     Il produit l'image ci-dessous :

     L'image ci-dessous est tout simplement la visualisation de la console peu avant le ''crash'' du programme ''scapin'' (en vert) quand il a tenté d'ouvrir une 12ème image dans le traitement du champ dorsal alors que seulement 11 images avaient été générées dans la structure ''^a'' par la commande ci-dessous :

ng_cnct   ^a   10   32   1100   800

     Soit dit en passant ... il y aurait comme un petit bogue dans le traitement de l'erreur (en rouge) !... Pas facile de mettre au point dans l'utilisation des derniers retranchements marginaux d'un logiciel où l'erreur est un peu délicate à reproduire. On en restera tout simplement là, le bogue ne gêne pas du tout, le logiciel n'est qu'un support didactique sur la manipulation des illustrations.

     On pourra remarquer :

     Il sera très intéressant de voir l'image imprimée sur une imprimante à 300 ou 600 points au pouce comme celle que j'ai. La taille de la pixelmap devra alors avoir la résolution appropriée. Mais, par rapport à la visualisation sur l'écran, l'impression est équivalente à un grossissement. Si au niveau des images vectorielles, on peut s'attendre à une qualité exportable, il est fort prévisible que ce ne sera pas le cas des images sauf si leurs résolutions sont adaptées. Dans ce cas, il serait fort possible de voir l'affichage sur écran malmené.

Oh surprise !... que ça va vite ... Pourtant la programmation est plutôt ''Bulldoser'' et pas du tout recherchée !... Si j'avais eu ça à l'époque, je me serais épargné bien des critiques....
C'est finalement cela le progrès !...

--ooOoo--