\chapter{Fortran} \label{chap:Fortran} \index{Fortran}

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
guerre mondiale, en 1954, par
John Warner Backus, ingénieur en radiophonie chez IBM\index{IBM},

%	========================================

\section{F77}

Dernière version à exiger le format '80 colonnes' des cartes perforées,
cette version est aussi (aux yeux de vieux dinos) la plus pure,
à cause d'instructions comme le \textsl{computed goto} ou le
mythique \textsl{comefrom}. Nom officiel : \texttt{ANSI X3.9-1978}.

%	============****************===============

% https://linuxfr.org/users/vmagnin/journaux/taptempo-fortran

\section{Gfortan} \index{gfortran}

Puis ce langage du passé a subi une évolution lente vers quelque
chose de bien plus moderne : le Fortran 90.
Les dinos vont devoir s'adapter. Et utiliser \texttt{gfortran},
un élément de la Gnu Compiler Collection\index{gcc}.

Comme pour tous les langages de programmation,
il est obligatoire d'avoir l'exemple canonique, donc le voilà.
Il faut l'enregister dans un fichier nommé \texttt{hello.f90}
pour que le compilateur puisse admettre que c'est écrit
en \textsl{free form format}.

\begin{verbatim}
$ cat hello.f90
program hello
    implicit none
    print *, "hello world"
end
$ gfortran -Wall hello.f90 -o hello && ./hello
 hello world
$
\end{verbatim}

% --------------------------------------------------------
\section{Args \& Env}

Un fort beau programme, mais il est un peu fermé au monde extérieur.
Quand on lance un programme, il peut recevoir des instructions
par (mais pas que) deux canaux : les arguments de la ligne de commande
et les variables d'environnement.

\begin{verbatim}
program rum_me
  implicit none
  integer               :: nbarg, foo
  character(len=32)     :: arg

  nbarg = IARGC()
  if (nbarg .GT. 0) then
    do foo=1, nbarg
       call GETARG(foo, arg)
       print *, foo,"   ",  arg
    enddo
  endif
end
\end{verbatim}

Si un des arguments doir être vu comme une valeur numérique,
il faut la convertir avant usage.

\begin{verbatim}
  character(len=89)     :: arg
  real                  :: cx
  call getarg(2, string)       ;   read (string, *) cx
\end{verbatim}


% --------------------------------------------------------

\subsection{Tableaux}

Rank, Size, \textsc{allocatable}, toussa\dots

% --------------------------------------------------------

\subsection{Fichiers}

Pour qui vient du C et de la philosophie Unix, la gestion
des fichiers en Fortran est assez déroutante%
\footnote{Par contre, pour un dino des \textsl{big irons}\dots}.
Il semble qu'il y ait deux concepts orthogonaux.

Open, Read, Write, Inquire, toussa\dots

% --------------------------------------------------------

\subsection{Modules}

Une notion essentielle, à mon avis, pour écrire des programmes
au-delà de 104 lignes. Oui, j'avoue, j'ai bien changé depuis
l'époque où je confectionnait des procédures \textsl{monobloc}
de 1337 lignes, avec une bonne centaine de \texttt{GOTO} dedans.


% --------------------------------------------------------

\subsection{Images ?}

Plplot semble être un bon choix pour commencer.

%	========================================
