small patches for a grey sunday

This commit is contained in:
tth 2022-04-03 11:56:49 +02:00
parent 53c0dfbf8a
commit 7dea31c24c
6 changed files with 60 additions and 21 deletions

View File

@ -43,6 +43,9 @@ $
\end{verbatim}
% --------------------------------------------------------
%
% https://fortranwiki.org/fortran/show/Command-line+arguments
%
\section{Args \& Env}
Un fort beau programme, mais il est un peu fermé au monde extérieur.
@ -75,16 +78,20 @@ il faut la convertir avant usage.
call getarg(2, string) ; read (string, *) cx
\end{verbatim}
% --------------------------------------------------------
\subsection{Tableaux}
\section{Tableaux}
Rank, Size, \textsc{allocatable}, toussa\dots
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
par défaut du premier élément d'un tablesu est \textbf{1},
mais cette valeur peut être modifiée à la déclaration
du tableau.
% --------------------------------------------------------
\subsection{Fichiers}
\section{Fichiers}
Pour qui vient du C et de la philosophie Unix, la gestion
des fichiers en Fortran est assez déroutante%
@ -95,7 +102,7 @@ Il semble qu'il y ait deux concepts orthogonaux.
% --------------------------------------------------------
\subsection{Modules}
\section{Modules}
Une notion essentielle, à mon avis, pour écrire des programmes
au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis
@ -103,7 +110,7 @@ l'époque où je confectionnait des procédures \textsl{monobloc}
de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans.
% --------------------------------------------------------
\subsection{Random et Aléa}
\section{Random et Aléa}
La dernière ligne va vous étonner.
@ -122,7 +129,7 @@ La dernière ligne va vous étonner.
% --------------------------------------------------------
\subsection{Images}
\section{Images}
Plplot semble être un bon choix pour commencer.

View File

@ -6,7 +6,11 @@ Il existe bien entendu des outils \textsl{mainstream}
tels que le classique \texttt{gdb}\index{gdb}, mais il en existe
une foultitude d'autres, injustement méconnus.
Nous allons en voir quelques-uns en essayant de nous baser
sur des cas réels.
sur des cas quasiment réels.
Et non, je ne vais pas vous parler du vénérable \texttt{ddt}
des antiques systèmes CP/M, ni même du \texttt{debug} des
anciens DOS, bien que tous deux méritent votre attention.
% ==============================================================

View File

@ -133,10 +133,13 @@ l'IRC\index{IRC} \texttt{freenode\#paulla} \textit{:)}
\textsl{Perform generic image processing operations, through the G'MIC
language interpreter. gmic: GREYC's Magic for Image Computing.}
\index{XXX}
Gmic se base sur une grosse bibliothèque de fonctions écrite
en \texttt{C++}\index{C++} dont l'utilisation est bien
docummentée dans le livre ???\index{XXX}
Existe aussi en plugin pour Gimp\index{Gimp} avec une interface
pleine de curseurs et de boutons.
pleine de curseurs et de boutons, qui facilite (ou pas) l'exploration
des possibles.
% -------------------------------------------------------------------
@ -161,7 +164,7 @@ for ((y=0; y<250; y++)) {
Comment faire un \textsl{resize} avec NetPBM ?
Est-il nécessaire d'apprendre la bibliothèque de fonctions
\texttt{libnetpbm} ?
\texttt{libnetpbm}\footnote{Réponse: oui.} ?
% -------------------------------------------------------------------

View File

@ -10,26 +10,37 @@ Mais il est probable que ce concept existait déja dans
d'autres mondes, peut-être avec \textsl{AmigaOS} ou
\textsl{VAX/VMS}\index{VMS}\dots
Une bibliothèque partagé (aka \texttt{.so}) est une collection
de fonctions, chargée une seule fois en mémoire centrale,
mais qui peut être utilisée par plusieurs programmes en
même temps.\index{.so}
Et c'est en partie sur ce concept qu'est basé le premier
mécanisme que nous allon découvrir~:
mécanisme que nous allons découvrir~:
\texttt{dlopen} et sa petite famille.
% ------------------------------------
\section{Mécanique}
\section{Mécanisme}
\index{dlopen}
\index{dlopen} \index{dlclose}
\texttt{dlclose, dlopen, dlmopen - open and close a shared object}
\begin{quote}
The function dlopen() loads the dynamic shared object (shared library)
The function dlopen() loads the dynamic shared object (shared library)
file named by the null-terminated string filename and returns an opaque
"handle" for the loaded object. This handle is employed with other
functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3),
"handle" for the loaded object. This handle is employed with other
functions in the dlopen API, such as dlsym(3), dladdr(3), dlinfo(3),
and dlclose().
\end{quote}
Traduit en clair, la fonction \texttt{dlopen} permet de charger
manuellement un \texttt{.so} en mémoire centrale, au lieu de
laisser faire le loader (ld.so) automatiquement au lancement
d'un binaire. la fonction \texttt{dlclose} va, elle, vidanger
la zone mémoire dans laquelle est le plugin.
% ------------------------------------
\section{Un exemple ?}
@ -42,7 +53,8 @@ un tableau de quatre nombres flottants, et que nous souhaitons
proposer un affichage de ce tableau modifiable à volonté.
Nous allons donc écrire notre fonction personnelle d'affichage
dans un fichier \textsc{.c} indépendant (le plugiciel) et qui
dans un fichier \textsc{.c} indépendant
(ci-après dénommé «le plugiciel») et qui
sera chargé dynamiquement au \textsl{run-time} par le logiciel
principal (l'appelant).
@ -54,12 +66,16 @@ lecteurs, à titre d'exercice.
\lstinputlisting[language=c]{code/plugiciel.c}
On peut difficelement faire plus simple pour une première
approche, mais attendez la suite.
On peut difficilement faire plus simple pour une première
approche, mais attendez la suite des opérations,
la cinquième va vous étonner.
\subsection{L'appelant}
Voyons maintenant comment mettre ça en œuvre depuis le programme
principal.
Nous supposerons que le binaire du plugin est dans le répertoire
courant.
\lstinputlisting[language=c]{code/appelant.c}
@ -83,7 +99,9 @@ tth@fubar:~/Documents/TetaTricks/code$
\section{Autres langages}
En Perl\index{Perl} ?
En Fortran\index{Fortran} ?
% -------------- to be continued

View File

@ -6,7 +6,7 @@
% ==============================================================
\section{Apache} \index{Apache}
Le grand classique.
Le grand classique. Que nous ne verrons pas pour le moment.
% ==============================================================
@ -22,6 +22,13 @@ root@ramen:~# service lighttpd force-reload
root@ramen:~#
\end{verbatim}
\textbf{Q:} Sur une installation fraiche, la racine du site est
en 403\index{403} ?\linebreak
\textbf{R:} Par défaut le listing des répertoires vides
(sans \texttt{index.html}) est interdit. Pour changer ça, il faut
\texttt{\# lighttpd-enable-mod dir-listing} et
\texttt{\# service lighttpd force-reload}, voilà.
% ==============================================================
\section{Custom made}

0
code/awk/mkunion.awk Normal file
View File