Compare commits

..

No commits in common. "0db76fef58457a156ac777585d1b12c934587e5e" and "6c2d6476b844a5ed256f8ea6ade6ec63fd9e844c" have entirely different histories.

9 changed files with 46 additions and 274 deletions

View File

@ -19,7 +19,6 @@ Dans un premier temps, je vais les lister sommairement, et
ensuite j'aurais une idée sur lesquels seront les plus funs ensuite j'aurais une idée sur lesquels seront les plus funs
à explorer. à explorer.
Dartmouth Time Sharing System
% ------------------------------------------- % -------------------------------------------
\section{Bywater} \index{bywater} \section{Bywater} \index{bywater}

View File

@ -1,19 +1,13 @@
\chapter{Fortran} \label{chap:Fortran} \index{Fortran} \chapter{Fortran} \label{chap:Fortran} \index{Fortran}
\begin{quote}
Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol}, Fortran (\textsc{FORmula TRANslator}) est, avec le Cobol\index{Cobol},
un des premiers langages évolués. Il a été conçu après la seconde un des premiers langages évolués. Il a été conçu après la seconde
guerre mondiale, en 1954, par guerre mondiale, en 1954, par
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM}, John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},
\end{quote}
Pourquoi j'ai redécouvert un langage de ma jeunesse, et pourquoi
vous devriez vous aussi y jeter un regard attentif. Il y a plein
de bonnes choses, la septième va vous tenir compagnie.
% ======================================== % ========================================
\section{FORTRAN77} \section{F77}
Dernière version à exiger le format '80 colonnes' des cartes perforées, Dernière version à exiger le format '80 colonnes' des cartes perforées,
cette version est aussi (aux yeux de vieux dinos) la plus pure, cette version est aussi (aux yeux de vieux dinos) la plus pure,
@ -21,10 +15,6 @@ cette version est aussi (aux yeux de vieux dinos) la plus pure,
mythique \textsl{comefrom}\footnote{Keyword: Datamatic}. mythique \textsl{comefrom}\footnote{Keyword: Datamatic}.
Nom officiel : \texttt{ANSI X3.9-1978}. Nom officiel : \texttt{ANSI X3.9-1978}.
L'incarnation \texttt{g77}\index{g77} n'existe plus, meis peut être
à-priori émulable en jouant avec les options de \texttt{gfortran}
et un brin de shell.
% ============****************=============== % ============****************===============
% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran % https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran
@ -43,7 +33,7 @@ Il faut l'enregister dans un fichier nommé \texttt{hello.f90}
pour que le compilateur puisse admettre que c'est écrit pour que le compilateur puisse admettre que c'est écrit
en \textsl{free form format}. en \textsl{free form format}.
\begin{lstlisting} \begin{verbatim}
$ cat hello.f90 $ cat hello.f90
program hello program hello
implicit none implicit none
@ -52,7 +42,7 @@ end
$ gfortran -Wall hello.f90 -o hello && ./hello $ gfortran -Wall hello.f90 -o hello && ./hello
hello world hello world
$ $
\end{lstlisting} \end{verbatim}
% -------------------------------------------------------- % --------------------------------------------------------
% %
@ -60,13 +50,12 @@ $
% %
\section{Args \& Env} \section{Args \& Env}
Un fort beau programme que ce \textsc{helloworld}, mais il est un peu Un fort beau programme, mais il est un peu fermé au monde extérieur.
fermé au monde extérieur.
Quand on lance un programme, il peut recevoir des instructions Quand on lance un programme, il peut recevoir des instructions
par (mais pas que) deux canaux : les arguments de la ligne de commande par (mais pas que) deux canaux : les arguments de la ligne de commande
et les variables d'environnement. et les variables d'environnement.
\begin{lstlisting} \begin{verbatim}
program rum_me program rum_me
implicit none implicit none
integer :: nbarg, foo integer :: nbarg, foo
@ -80,18 +69,18 @@ program rum_me
enddo enddo
endif endif
end end
\end{lstlisting} \end{verbatim}
Si un des arguments doir être vu comme une valeur numérique, Si un des arguments doir être vu comme une valeur numérique,
il faut convertir la chaine de caractères avant usage. il faut la convertir avant usage. Exemple pour un nombre
Exemple pour un nombre flottant~: flottant~:
\begin{lstlisting} \begin{verbatim}
character(len=89) :: arg character(len=89) :: arg
real :: cx real :: cx
call getarg(2, string) call getarg(2, string)
read (string, *) cx read (string, *) cx
\end{lstlisting} \end{verbatim}
% -------------------------------------------------------- % --------------------------------------------------------
@ -102,32 +91,7 @@ Rank, Size, \textsc{allocatable}, toussa\dots
Amies du C, soyez d'entrée prévenues, en Fortran, l'indice Amies du C, soyez d'entrée prévenues, en Fortran, l'indice
par défaut du premier élément d'un tableau est \textbf{1}, par défaut du premier élément d'un tableau est \textbf{1},
mais cette valeur peut être modifiée à la déclaration mais cette valeur peut être modifiée à la déclaration
du tableau. Ce qui permet des \textsl{of-by-anynumber} du tableau.
du plus bel effet.
% --------------------------------------------------------
% new 29 decembre 2022
\section{Nombres complexes}
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
% --------------------------------------------------------
% nouveau 4 mars 2023
\section {Les structures}\index{type}
Une « structure », c'est comme une petite boite dans laquelle on peut
mettre des variables de différentes natures.
\begin{lstlisting}
type t_pixrgb
integer :: r, g, b
integer :: alpha = 0
end type
\end{lstlisting}
Nous verrons plus loin l'importance de cette notion.
% -------------------------------------------------------- % --------------------------------------------------------
@ -149,15 +113,10 @@ Il semble qu'il y ait deux concepts orthogonaux :
XXX\index{XXX} XXX\index{XXX}
Pour faire simple, on accède à chaque unité de donnée l'une après l'autre,
comme quand on déroule une bande 6250bpi.
\subsection{Indexé} \index{index} \subsection{Indexé} \index{index}
XXX\index{XXX} XXX\index{XXX}
C'est pas pareil.
% -------------------------------------------------------- % --------------------------------------------------------
\section{Modules} \section{Modules}
@ -171,39 +130,12 @@ Il serait bon de voir un exemple du monde réel. Ou juste un
exemple basique. Mais avec des explications. Parce que ce n'est pas exemple basique. Mais avec des explications. Parce que ce n'est pas
vraiment évident. Mais c'est un concept balaize. vraiment évident. Mais c'est un concept balaize.
Nous allons donc créer un module qui ne fait quasiment rien, ce qui
limitera le nombre de pannes possibles dans la suite des opérations.
\begin{lstlisting}
module dummy
implicit none
contains
subroutine print_dummy
print *, 'this is the dummy subroutine'
end subroutine
end module
\end{lstlisting}
Rien de bien compliqué~:
Un module peut être vu comme une boite qui contient (\texttt{contains})
des procédures (\texttt{function} ou \texttt{subroutine},
et qui sera utilisé avec ce genre de petit programme~:
\begin{lstlisting}
program t
use dummy
implicit none
print *, '=== programme de test ==='
call print_dummy
end program
\end{lstlisting}
% -------------------------------------------------------- % --------------------------------------------------------
\section{Random et Aléa} \section{Random et Aléa}
La dernière ligne va vous étonner. La dernière ligne va vous étonner.
\begin{lstlisting} \begin{verbatim}
integer, dimension(3) :: tarray integer, dimension(3) :: tarray
integer :: t3 integer :: t3
real :: dummy real :: dummy
@ -214,7 +146,7 @@ La dernière ligne va vous étonner.
! after initializing the random generator engine, ! after initializing the random generator engine,
! you MUST use it for initializing the initializer ! you MUST use it for initializing the initializer
dummy = rand() dummy = rand()
\end{lstlisting} \end{verbatim}
% -------------------------------------------------------- % --------------------------------------------------------
% new Thu 24 Nov 2022 02:27:05 AM CET % new Thu 24 Nov 2022 02:27:05 AM CET
@ -225,22 +157,27 @@ Comme d'habitude avec gcc\footnote{The Gnu Compiler Collection}, les
options sont innombrables. J'ai essayé d'en dégager les plus importantes, options sont innombrables. J'ai essayé d'en dégager les plus importantes,
mais ce ne sont probablement pas les seules. mais ce ne sont probablement pas les seules.
% --------------------------------------------------------
% new 29 decembre 2022
\section{Nombres complexes}
Partie imaginaire : \texttt{ipart = aimag(cmplx)}.
% -------------------------------------------------------- % --------------------------------------------------------
\section{Images} \section{Images}
La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer, La bibliothèque \textbf{Plplot} semble être un bon choix pour commencer,
mais il existe bien d'autres options. mais il existe bien d'autres options.
Par exemple \textbf{g2} (vue en page \pageref{g2}) semble être utilisable Par exemple \textbf{g2} (page \pageref{g2}) semble être utilisable
avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste avec les vieux F77, et possiblement avec un Fortran moderne, il faut juste
un peu de \textsc{rtfm}. un peu de \textsc{rtfm}.
Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives. Nous allons donc commencer par Plplot, pour envisager ensuite les alternatives.
% -------------------------------------------------------- % --------------------------------------------------------
%
% $ dillo /usr/share/doc/plplot-doc/html/index.html &
%
\subsection{Plplot} \index{plplot} \label{ploplt} \subsection{Plplot} \index{plplot} \label{ploplt}
Commençons directement par un EMC\footnote{Exemple Minimal Compilable} Commençons directement par un EMC\footnote{Exemple Minimal Compilable}
@ -251,83 +188,29 @@ qui gèrent pour vous les valeurs « par défaut ».
Voyez cette exemple comme un \textsl{boilerplate} simple Voyez cette exemple comme un \textsl{boilerplate} simple
ou un \textsc{HelloWorld}~: ou un \textsc{HelloWorld}~:
\lstinputlisting{code/fortran/plplotting.f90} \begin{verbatim}
program dessine
use plplot
implicit none
call plinit ()
call plenv(-2.1, 2.1, -2.1, 2.1, 0, 0)
call plend
end program
\end{verbatim}
Il ne se passe pas grand chose, sauf qu'on a une proposition de Il ne se passe pas grand chose, sauf la proposition de choisir
choisir le type de sortie. le type de sortie.
Dans la version que j'ai (XXX\index{XXX}), on a le choix entre Dans la version que j'ai (XXX\index{XXX}), on a le choix entre
X-Window, PostScript mono ou couleur, Xfig, PNG, SVG, et bien X-Window, PostScript mono ou couleur, Xfig, Null, UserMemory et SVG.
d'autres dont certains, pour moi, assez ésotériques. C'est intriguant de ne pas avoir au moins \textbf{un} format
D'autre part, avec cette méthode, il semble impossible de pixmap\index{pixmap}.
préciser la taille de l'image.
Mais la démonstration est faite.
Il faut quand même regarder de plus près la subroutine Laissons cette question en suspens, et commençons à dessiner.
\texttt{plenv()} (\textsl{Set up standard window and draw box}) D'accord, mais dessiner quoi ?
qui initialise simplement un contexte graphique 2D somme toute
assez classique. Elle prend six paramètres. Les quatre premiers
sont les coordonnées flottantes de deux coins du papier,
le cinquième controle l'échelle des axes, et le dernier
controle le tracé des boites autour du graphique.
Nous avons les bases, commençons donc à dessiner.
Premièrement, nous allons chosir de démarrer automatiquement
dans une fenètre X11,
en gardant le reste de la configuration avec ses valeurs par défaut.
Pour cela, il suffit de rajouter \texttt{call plsdev('xwin')} juste avant
l'appel à \texttt{plinit}, il vous faudra utiliser la touche
\textsl{<enter>} pour sortir\footnote{Une de mes prochaines tâche sera
de regarder comment quitter avec le '\textbf{q}' canonique}.
Ensuite, pour mettre en évidence notre art,
nous allons choisir une couleur pour l'encre (qui est d'un
rouge du meilleur effet par défaut en mode "xwin"),
puis écrire quelques légendes canoniques, donc inutiles, .
\begin{verbatim}
call plcol0 (15) ! pure white
call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots")
\end{verbatim}
Il est maintenant temps de poser un premier trait de crayon numérique
sur notre feuille blanche numérique\footnote{Actuellement noire, mais
nous trouverons bien comment changer ça}.
La forme de ce tracé sera donnée par une suite de coordonnées
flottantes \textsl{x/y}
stockées dans deux tableaux parallèles que nous allons
immédiatement garnir de données pertinentes~:
\begin{verbatim}
integer, parameter :: lg = 500
real :: x(lg), y(lg)
real :: k
integer :: i
k = 0.1
do i = 1, lg
x(i) = k * sin(real(i)/3.0)
y(i) = k * cos(real(i)/5.0)
k = k * 1.006021
enddo
\end{verbatim}
Une fois en possession de ces données conceptuelles, que l'on peut
aisément voire comme un cheminement, nous allons demander
au crayon de se promener sur notre feuille virtuelle en suivant
ce chemin~:
\begin{verbatim}
call plcol0 (12)
call plline (x, y)
\end{verbatim}
Au passage, vous pouvez remarquer la magie du Fortran moderne~:
il n'est plus nécessaire de signifier la dimension des tableaux
lors de l'appel de la procédure.
% -------------------------------------------------------- % --------------------------------------------------------
\section{Questions en attente} \section{Questions}
\index{XXX} \index{XXX}
@ -337,7 +220,7 @@ lors de l'appel de la procédure.
\item Est-il possible de causer à \texttt{libsndfile} ? \item Est-il possible de causer à \texttt{libsndfile} ?
\item Comment caler une chaine à gauche avec un \textsc{format} ? \item Comment caler une chaine à gauche avec un \textsc{format} ?
\item Is there a \texttt{-fortran} option for making comments with \item Is there a \texttt{-fortran} option for making comments with
\texttt{boxes} + \texttt{figlet}\index{figlet} ? \texttt{figlet}\index{figlet} ?
\end{itemize} \end{itemize}
% -------------------------------------------------------- % --------------------------------------------------------
@ -345,7 +228,6 @@ lors de l'appel de la procédure.
\textsl{<Pas de réponse>} \textsl{<Pas de réponse>}
Voilà, c'est tout pour le moment\dots
% ======================================== % ========================================

View File

@ -170,6 +170,7 @@ nous aurons toujours la même séquence en sortie.
\subsection{Trucs à voir} \subsection{Trucs à voir}
\begin{verbatim} \begin{verbatim}
#declare VIRGINIA = #declare VIRGINIA =
transform { transform {
matrix < 1, 1, 0, matrix < 1, 1, 0,
@ -183,12 +184,6 @@ transform {VIRGINIA}
} }
\end{verbatim} \end{verbatim}
% ================================================
\section{Avec Fortran}
plplot
% ------------------------------------------------ % ------------------------------------------------

View File

@ -107,12 +107,6 @@ préciser le coef de qualité ( qscale : 1 = le mieux / 3 = correcte )
https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a} https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}
\begin{verbatim}
ffmpeg -ss 0:5:59.600 -to 0:6:11.150 -i Downloads/foo.mp4 tmp/tragic.gif
\end{verbatim}
% -----------------------------------------------------------------
\subsection{Encoder un cloître} \subsection{Encoder un cloître}
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo

View File

@ -1,6 +0,0 @@
plplotting
dessiner
*.png

View File

@ -1,8 +0,0 @@
INCS = -I/usr/include/plplot -I/usr/lib/x86_64-linux-gnu/fortran/modules/plplot
plplotting: plplotting.f90 Makefile
gfortran -g $< $(INCS) -lplplotfortran -o $@
dessiner: dessiner.f90 Makefile
gfortran -g $< $(INCS) -lplplotfortran -o $@

View File

@ -1,66 +0,0 @@
program dessiner
use plplot
implicit none
integer :: i
real :: a, b, c, d
character(len=80) :: version
call plgver(version)
write (*,'(a,a)') 'plplot version: ', trim(version)
call plsdev('xwin')
call plinit ()
call plenv(-2.2, 2.2, -2.2, 2.2, 0, 1)
a = 0
b = 0
c = 0
d = 0
do i=1, 100
a = a + 0.01
b = b + 0.02
call dessin_1 (a, b, 12)
c = c + 0.03
d = d + 0.04
call dessin_1 (c, d, 13)
enddo
call plend
contains ! -----------------------------
!------------------------------------------------------
subroutine dessin_1 (sha, shb, color)
real, intent(in) :: sha, shb
integer, intent(in) :: color
integer, parameter :: lg = 2000
real :: x(lg), y(lg)
real :: k, amp
integer :: i
! print *, 'dessin 1'
amp = 2.0
do i = 1, lg
k = real(i)/real(lg) * 6.2832 * 4.0
x(i) = amp * sin((k+sha)*5)
y(i) = amp * cos((k+shb)*3)
enddo
! print *, k, x(i), y(i)
call plcol0 (15) ! pure white
call pllab ("Fuzzfactor", "Yoyodines", "Some nice plots from tTh")
call plcol0 (color)
call plline (x, y)
end subroutine
!------------------------------------------------------
subroutine dessin_2 ()
print *, 'dessin 2'
end subroutine
!------------------------------------------------------
end program

View File

@ -1,17 +0,0 @@
program plplotting
use plplot
implicit none
! Initializing the plotting package with a lot of
! default (and pertinent) values.
call plinit ()
! Sets up plotter environment for simple graphs
call plenv (-2.1, 2.1, -2.1, 2.1, 0, 0)
! Ends a plotting session, tidies up all the output
! files,switches interactive devices back into text
! mode and frees up any memory that was allocated.
call plend ()
end program

View File

@ -5,7 +5,7 @@
% Décembre, ça n'avance pas beaucoup... % Décembre, ça n'avance pas beaucoup...
% %
\usepackage[french]{babel} \usepackage[francais]{babel}
\usepackage[utf8]{inputenc} \usepackage[utf8]{inputenc}
\usepackage{xspace} \usepackage{xspace}
\usepackage{makeidx} \usepackage{makeidx}
@ -21,12 +21,12 @@
\makeindex \makeindex
\setlength \parindent {2em} \setlength \parindent {2em}
\setlength \parskip {0.33em} % XXX \setlength \parskip {0.3333333em} % XXX
%------ reglages des 'listings' %------ reglages des 'listings'
\lstset{frame=single} % dessin d'un cadre autour du listing \lstset{frame=single} % dessin d'un cadre autour du listing
\lstset{basicstyle=\ttfamily\small} \lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=1.0em,belowskip=1.0em} \lstset{aboveskip=1.2em,belowskip=1.2em}
\setcounter{tocdepth}{1} \setcounter{tocdepth}{1}
\pagestyle{plain} \pagestyle{plain}
@ -50,8 +50,7 @@
% ============================================================== % ==============================================================
\chapter{Introduction} \chapter{Introduction}
Un nouveau nouvel ouvrage, en vrac. Un nouveau nouvel ouvrage, en vrac, complètement coronavraqué.
Des notes informelles sur l'utilisation Des notes informelles sur l'utilisation
d'un ordinateur moderne, vous allez en avoir vraiment beaucoup. d'un ordinateur moderne, vous allez en avoir vraiment beaucoup.
Mais elles sont en vrac, et surtout, elles sont reprises Mais elles sont en vrac, et surtout, elles sont reprises
@ -142,7 +141,7 @@ en ligne sur le site du Tetalab. Your mileage may vary\dots
% \input{chap/astronomie} % \input{chap/astronomie}
% \input{chap/MINITEL} % \input{chap/MINITEL}
% \input{chap/Raspberry} % \input{chap/Raspberry}
% \input{chap/Fedora} \input{chap/Fedora}
% \input{chap/IPv6} % \input{chap/IPv6}
\input{chap/threads} \input{chap/threads}
\input{chap/IPC} \input{chap/IPC}