#sundaycommit
This commit is contained in:
parent
28c260ea5e
commit
52b7bbe6ef
@ -2,7 +2,11 @@
|
|||||||
\chapter{Basic}
|
\chapter{Basic}
|
||||||
\index{dosbox}\label{chap:Basic}
|
\index{dosbox}\label{chap:Basic}
|
||||||
|
|
||||||
% -------------------------------------------
|
% ====================================================================
|
||||||
|
|
||||||
|
% https://www.theregister.com/2023/03/28/nostalgic_for_basic/
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
\section{BASIC} \index{BASIC}
|
\section{BASIC} \index{BASIC}
|
||||||
|
|
||||||
C'est probablement un des premiers langages interactifs utilisable par le
|
C'est probablement un des premiers langages interactifs utilisable par le
|
||||||
@ -21,9 +25,16 @@ ensuite j'aurais une idée sur lesquels seront les plus funs
|
|||||||
|
|
||||||
Dartmouth Time Sharing System
|
Dartmouth Time Sharing System
|
||||||
|
|
||||||
% -------------------------------------------
|
% ====================================================================
|
||||||
\section{Bywater} \index{bywater}
|
\section{Bywater} \index{bywater}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
The Bywater BASIC Interpreter (bwBASIC) implements a large superset of the
|
||||||
|
ANSI\index{ANSI} Standard for Minimal BASIC (X3.60-1978)
|
||||||
|
and a significant subset of the ANSI Standard for
|
||||||
|
Full BASIC (X3.113-1987) in C.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
Bywater BASIC Interpreter/Shell, version 2.10
|
Bywater BASIC Interpreter/Shell, version 2.10
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
@ -44,7 +55,7 @@ mais canonique~:
|
|||||||
|
|
||||||
Première conclusion : affaire à suivre.
|
Première conclusion : affaire à suivre.
|
||||||
|
|
||||||
% -------------------------------------------
|
% ====================================================================
|
||||||
\section{Yabasic} \index{yabasic}
|
\section{Yabasic} \index{yabasic}
|
||||||
|
|
||||||
Première innovation, les numéros de ligne ne sont plus obligatoires.
|
Première innovation, les numéros de ligne ne sont plus obligatoires.
|
||||||
@ -55,7 +66,50 @@ Et on peut faire des images qui clignotent :)
|
|||||||
|
|
||||||
\lstinputlisting{code/Basic/yabasic-2.bas}
|
\lstinputlisting{code/Basic/yabasic-2.bas}
|
||||||
|
|
||||||
% -------------------------------------------
|
C'est vraiment dommage que l'on ne puisse mettre de gif89a\index{gif89a}
|
||||||
|
dans un livre imprimé\dots
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
|
|
||||||
|
\section{sdlBasic} \index{sdlBasic}
|
||||||
|
|
||||||
|
http://www.sdlbasic.altervista.org/main/
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
|
|
||||||
|
\section{FreeBASIC} \index{FreeBASIC}
|
||||||
|
|
||||||
|
https://www.freebasic.net/
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
When used in its "QB" language mode, FreeBASIC provides a high level
|
||||||
|
of support for programs written for QuickBASIC\index{QuickBASIC}.
|
||||||
|
Many programs written for QuickBASIC will compile and run in this mode
|
||||||
|
with no changes needed.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
|
|
||||||
|
\section{BASIC-256} \index{BASIC-256}
|
||||||
|
|
||||||
|
https://basic256.org/
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
BASIC-256 is an easy to use version of BASIC designed to teach anybody
|
||||||
|
(especially middle and high-school students) the basics of computer
|
||||||
|
programming.
|
||||||
|
It uses traditional control structures like gosub, for/next, and goto,
|
||||||
|
which helps kids easily see how program flow-control works.
|
||||||
|
It has a built-in graphics mode which lets them draw pictures
|
||||||
|
on screen in minutes, and a set of detailed, easy-to-follow tutorials
|
||||||
|
that introduce programming concepts through fun exercises.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
|
|
||||||
|
% ====================================================================
|
||||||
|
|
||||||
\section{Et ailleurs ?}
|
\section{Et ailleurs ?}
|
||||||
|
|
||||||
L'interpréteur \texttt{Qbasic} de Microsoft fonctionne très bien
|
L'interpréteur \texttt{Qbasic} de Microsoft fonctionne très bien
|
||||||
@ -63,4 +117,4 @@ dans Dosbox~: à lire en page \pageref{Qbasic}. Son prédécesseur,
|
|||||||
\texttt{GWBASIC} marche très bien aussi.
|
\texttt{GWBASIC} marche très bien aussi.
|
||||||
|
|
||||||
% -------------------------------------------
|
% -------------------------------------------
|
||||||
% -------------------------------------------
|
% ====================================================================
|
||||||
|
104
chap/C.tex
104
chap/C.tex
@ -11,31 +11,36 @@ les erreurs classiques. La futilité des exemples est assumée.
|
|||||||
|
|
||||||
Les détails nécessaires seront présentés dans la suite.
|
Les détails nécessaires seront présentés dans la suite.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Hello World}
|
\section{Hello World}
|
||||||
|
|
||||||
Hop, on y va...
|
Hop, on y va...
|
||||||
|
|
||||||
Le tout début d'un programme en C est l'appel par
|
Le tout début de la vie d'un programme écrit en C est l'appel par
|
||||||
le \textsl{runtime} d'une fonction
|
le \textsl{runtime}\footnote{\texttt{crt0.s}} d'une fonction
|
||||||
nommée \texttt{main} qui reçoit deux paramètres
|
nommée \texttt{main} qui recevra deux paramètres\footnote{%
|
||||||
|
En fait trois, mais restons simple.}
|
||||||
dont l'utilisation est décrite un peu plus bas.
|
dont l'utilisation est décrite un peu plus bas.
|
||||||
Ces paramètres sont fournis par le système d'exploitation.
|
Ces paramètres sont fournis par des mécanismes planquées
|
||||||
|
dans la soute du système d'exploitation, et n'ont pas
|
||||||
|
d'importance pour le moment..
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/hello.c}
|
\lstinputlisting[language=c]{code/hello.c}
|
||||||
|
|
||||||
Un fois passé l'entrée, nous somme dans la partie active.
|
Un fois passé l'entrée, nous sommes dans la partie active.
|
||||||
Nous appelons à ce moment la fonction \texttt{printf}
|
Nous appelons à ce moment une fonction de la bibliothèque
|
||||||
|
standard : \texttt{puts}
|
||||||
qui a pour but d'afficher sur l'écran le texte
|
qui a pour but d'afficher sur l'écran le texte
|
||||||
passé en paramètre.
|
passé en paramètre.
|
||||||
|
|
||||||
Voila, c'est fait. Nous savons dire bonjour au monde.
|
Voila, c'est fait. Dans les règles de l'art.
|
||||||
Point suivant~: dire boujour à quelqu'un d'autre. Et pour
|
Nous savons dire « bonjour » au monde.
|
||||||
|
Point suivant~: dire bonjour à quelqu'un d'autre. Et pour
|
||||||
cela il nous fait récupérer un argument depuis la ligne
|
cela il nous fait récupérer un argument depuis la ligne
|
||||||
de commande.
|
de commande.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Arguments}
|
\section{Arguments}
|
||||||
|
|
||||||
@ -70,7 +75,8 @@ En C, les tableaux commencent toujours à l'indice 0.
|
|||||||
Pour le traitement des options, il faut sauter à
|
Pour le traitement des options, il faut sauter à
|
||||||
la page \pageref{getopt}.
|
la page \pageref{getopt}.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Les variables}
|
\section{Les variables}
|
||||||
|
|
||||||
En gros, une variable du C est une zone de mémoire destinée
|
En gros, une variable du C est une zone de mémoire destinée
|
||||||
@ -88,20 +94,29 @@ que l'on peut stocker dans une variable.
|
|||||||
|
|
||||||
\textbf{La portée} :
|
\textbf{La portée} :
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
\section{Les fonctions}
|
\section{Les fonctions}
|
||||||
|
|
||||||
Nous avons vu brièvement dans la première section de ce chapitre
|
Nous avons vu brièvement dans la première section de ce chapitre
|
||||||
la fonction \texttt{main} et ses deux paramètres.
|
la fonction \texttt{main} et ses deux paramètres.
|
||||||
Il est temps de préciser les détails.
|
Il est temps de préciser les détails.
|
||||||
|
Une fonction a un unique point d'entrée\footnote{Qui a déja joué
|
||||||
|
avec le ENTRY du Fortran ?}, avec une éventuelle liste
|
||||||
|
de paramètres,
|
||||||
|
et une tout aussi éventuelel unique valeur de retour.
|
||||||
|
|
||||||
XXX\index{XXX}
|
XXX\index{XXX}
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Entrées / Sorties}
|
\section{Entrées / Sorties}
|
||||||
\index{stdin} \index{stdout} \index{stderr}
|
\index{stdin} \index{stdout} \index{stderr}
|
||||||
|
|
||||||
|
Il est évident qu'un logiciel qui n'a aucun moyen de communiquer
|
||||||
|
avec le monde extérieur a bien moins d'utilité qu'un bon ed.
|
||||||
|
Dans le schéma «~classique~», ces échanges ont lieu par
|
||||||
|
le truchement d'un terminal.
|
||||||
|
|
||||||
\subsection{Les trois flux canoniques}
|
\subsection{Les trois flux canoniques}
|
||||||
|
|
||||||
\texttt{stdin}, \texttt{stdout} et \texttt{stderr}\dots
|
\texttt{stdin}, \texttt{stdout} et \texttt{stderr}\dots
|
||||||
@ -145,9 +160,11 @@ un peu plus loin.
|
|||||||
\subsection{Écrire : \texttt{printf}}
|
\subsection{Écrire : \texttt{printf}}
|
||||||
\index{printf}
|
\index{printf}
|
||||||
|
|
||||||
La fonction \texttt{printf} permet d'afficher le contenu d'une
|
La fonction \texttt{printf} permet d'afficher sur la sortie
|
||||||
(ou plusieurs)
|
standard le contenu d'une (ou plusieurs)
|
||||||
variable sous divers formats contrôlables par un petit DSL.
|
variable sous diverses présentations,
|
||||||
|
qui sont contrôlables par un tout petit DSL\index{DSL}~:
|
||||||
|
la chaine de format.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
int bar, foo = 42;
|
int bar, foo = 42;
|
||||||
@ -160,17 +177,18 @@ la fonction '\texttt{printf}' avec les paramêtres appropriés et
|
|||||||
conserve la valeur de retour de celle-ci.
|
conserve la valeur de retour de celle-ci.
|
||||||
|
|
||||||
Le premier de ces paramêtres, \texttt{"foo = \%d\textbackslash{}n"},
|
Le premier de ces paramêtres, \texttt{"foo = \%d\textbackslash{}n"},
|
||||||
est appelé \emph{chaine de format}. C'est une chaine de caractères
|
est appelé \emph{chaine de format}. C'est une chaine de caractères,
|
||||||
que l'on peut classer en trois catégories~:
|
que l'on peut classer en trois catégories~:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize} % ------------
|
||||||
|
|
||||||
\item{\textsl{caractères crus} : ils sont directements poussés vers
|
\item{\textsl{caractères crus} : ils sont directements poussés vers
|
||||||
la sortie. La plupart d'entre eux donnent le résultat attendu.}
|
la sortie. La plupart d'entre eux donnent le résultat attendu.}
|
||||||
|
|
||||||
\item{\textsl{codes de format} : les fragments qui commencent par le
|
\item{\textsl{codes de format} : les fragments qui commencent par le
|
||||||
caractère '\%'. Ils servent à contrôler l'apparence de ce qui va
|
caractère '\%'. Ils servent à contrôler l'apparence de ce qui va
|
||||||
suivre. Par exemple \texttt{\%x} va afficher un int en hexadécimal}
|
suivre.
|
||||||
|
Par exemple \texttt{\%x} va afficher un \texttt{int} en hexadécimal}.
|
||||||
|
|
||||||
\item{\textsl{échappements} : les caractères précédés d'un
|
\item{\textsl{échappements} : les caractères précédés d'un
|
||||||
'\textbackslash' ou \textsl{backslash}\footnote{barre-penchée-du-8}
|
'\textbackslash' ou \textsl{backslash}\footnote{barre-penchée-du-8}
|
||||||
@ -180,14 +198,14 @@ Par exemple, \texttt{'\textbackslash{}n'} va générer le caractère
|
|||||||
\textsl{newline} qui marque la fin d'une ligne de texte.
|
\textsl{newline} qui marque la fin d'une ligne de texte.
|
||||||
}
|
}
|
||||||
|
|
||||||
\end{itemize}
|
\end{itemize} % ------------
|
||||||
|
|
||||||
Quand à la valeur de retour, elle contient le nombre de caractères
|
Quand à la valeur de retour, elle contient le nombre de caractères
|
||||||
efectivement écrits. Ce nombre peut être différent du nombre attendu,
|
effectivement écrits. Ce nombre peut être différent du nombre attendu
|
||||||
par exemple si le disque est saturé.
|
en cas d'erreur, par exemple si le disque est saturé.
|
||||||
|
|
||||||
Ce nombre peut être utilisé pour un affichage de multiples données
|
Ce nombre, que beaucoup de gens négligent, peut être utilisé pour un
|
||||||
en limitant la taille des lignes.
|
affichage de multiples données en limitant la longueur des lignes~:
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
int foo, nbre = 0;
|
int foo, nbre = 0;
|
||||||
@ -199,6 +217,9 @@ for (foo=0; foo<1000; foo++) {
|
|||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
|
% ---------------------------------------------------------
|
||||||
|
|
||||||
\subsection{Lire : \texttt{scanf}}
|
\subsection{Lire : \texttt{scanf}}
|
||||||
\index{scanf}
|
\index{scanf}
|
||||||
|
|
||||||
@ -244,8 +265,7 @@ par \texttt{fopen}~:
|
|||||||
int fprintf(FILE *stream, const char *format, ...);
|
int fprintf(FILE *stream, const char *format, ...);
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
% =========================================================
|
||||||
% ---------------------------------------------------------
|
|
||||||
|
|
||||||
\section{Un filtre Unix}\label{filtre-unix}
|
\section{Un filtre Unix}\label{filtre-unix}
|
||||||
|
|
||||||
@ -271,7 +291,6 @@ $ ./no-op < no-op.c | head -5
|
|||||||
$
|
$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
Vous voulez un autre exemple ? En voici un, parfois utile pour des
|
Vous voulez un autre exemple ? En voici un, parfois utile pour des
|
||||||
simulations de terminal de \textsl{h4ck3rZ}\footnote{texte vert ou
|
simulations de terminal de \textsl{h4ck3rZ}\footnote{texte vert ou
|
||||||
orange sur fond noir de rigueur.} sur une ligne en boucle de
|
orange sur fond noir de rigueur.} sur une ligne en boucle de
|
||||||
@ -286,7 +305,7 @@ utilisés et les usages possibles d'un tel filtre,
|
|||||||
il faut voir le concept de pipeline du shell en
|
il faut voir le concept de pipeline du shell en
|
||||||
page \pageref{pipeline}.
|
page \pageref{pipeline}.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Les pointeurs}\label{pointeur}\index{pointeur}
|
\section{Les pointeurs}\label{pointeur}\index{pointeur}
|
||||||
|
|
||||||
@ -307,8 +326,9 @@ ptr = tableau; // *ptr désigne tableau[0];
|
|||||||
ptr++; // *ptr désigne tableau[1];
|
ptr++; // *ptr désigne tableau[1];
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
XXX il y a beaucoup à dire, et de quoi bien rire \textsl{:)}
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Le préprocesseur}\index{cpp}
|
\section{Le préprocesseur}\index{cpp}
|
||||||
|
|
||||||
@ -363,10 +383,10 @@ pris en compte.
|
|||||||
Une chose très fourbe dont voici un exemple ?
|
Une chose très fourbe dont voici un exemple ?
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#define pixidx(fi,x,y) (((y)*fi->width)+(x))
|
#define pixidx (fi,x,y) (((y)*fi->width)+(x))
|
||||||
#define getRpix(fi,x,y) (fi->R[ pixidx(fi,(x),(y)) ])
|
#define getRpix (fi,x,y) (fi->R[ pixidx(fi,(x),(y)) ])
|
||||||
#define getGpix(fi,x,y) (fi->G[ pixidx(fi,(x),(y)) ])
|
#define getGpix (fi,x,y) (fi->G[ pixidx(fi,(x),(y)) ])
|
||||||
#define getBpix(fi,x,y) (fi->B[ pixidx(fi,(x),(y)) ])
|
#define getBpix (fi,x,y) (fi->B[ pixidx(fi,(x),(y)) ])
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Finalemant, ça n'est pas si compliqué que ça.
|
Finalemant, ça n'est pas si compliqué que ça.
|
||||||
@ -388,18 +408,22 @@ seront ensuite \textbf{liés} pour obtenir l'exécutable final.
|
|||||||
|
|
||||||
Mais découper un gros logiciel en plusieurs fichiers source
|
Mais découper un gros logiciel en plusieurs fichiers source
|
||||||
a d'autres avantages.
|
a d'autres avantages.
|
||||||
|
Bien maitrisé, c'est une technique assez sereine.
|
||||||
|
Elle permet d'isoler des données spécifiques qu'il serait
|
||||||
|
bien plus lourd et périlleux d'utiliser d'une autre façon.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Les structures}
|
\section{Les structures}
|
||||||
|
|
||||||
Une structure est une sorte de boite dans laquelle on peut
|
Une structure est une sorte de boite dans laquelle on peut
|
||||||
ranger plusieurs variables afin de les manipuler comme
|
ranger plusieurs variables afin de les manipuler comme
|
||||||
une seule entité.
|
une seule entité. Les utilisateurs de 80 colonnes voient
|
||||||
|
tout de suite de quoi il s'agit.
|
||||||
|
|
||||||
XXX
|
XXX trouver un exemple parlant et décalé\dots
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Gestion de la mémoire}
|
\section{Gestion de la mémoire}
|
||||||
\index{malloc} \index{free}
|
\index{malloc} \index{free}
|
||||||
@ -452,7 +476,7 @@ Et finalement, nous avons réussi à générer un \textsl{useless number}.
|
|||||||
Notre mission est terminée, nous rendons notre bloc de mémoire
|
Notre mission est terminée, nous rendons notre bloc de mémoire
|
||||||
au mc/p avec \texttt{free(ptr);}.
|
au mc/p avec \texttt{free(ptr);}.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Gérer les options}\index{getopt}\label{getopt}
|
\section{Gérer les options}\index{getopt}\label{getopt}
|
||||||
|
|
||||||
@ -466,7 +490,7 @@ extern int optind, opterr, optopt;
|
|||||||
La page de man de getopt(3) contient des explications détaillées
|
La page de man de getopt(3) contient des explications détaillées
|
||||||
et un exemple simple d'utilisation.
|
et un exemple simple d'utilisation.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
|
||||||
\section{Erreurs classiques}
|
\section{Erreurs classiques}
|
||||||
|
|
||||||
@ -548,4 +572,4 @@ l'utilisation des signaux (page \pageref{get-signal}),
|
|||||||
le chargement dynamique d'un \textsl{plug-in} (page \pageref{ex_dlopen}).
|
le chargement dynamique d'un \textsl{plug-in} (page \pageref{ex_dlopen}).
|
||||||
|
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% =========================================================
|
||||||
|
@ -5,15 +5,15 @@ Le \texttt{shell} est le coquillage qui isole le
|
|||||||
MC/P\footnote{Master Control Program} des yusers.
|
MC/P\footnote{Master Control Program} des yusers.
|
||||||
En gros, hein, je vais simplifier, et me limiter aux
|
En gros, hein, je vais simplifier, et me limiter aux
|
||||||
bricolages constructifs et/ou amusant. Il y aura du gore\index{gore}
|
bricolages constructifs et/ou amusant. Il y aura du gore\index{gore}
|
||||||
aussi.
|
aussi, parce que le shell est à la fois un interpréteur de commande
|
||||||
|
et un langage de programmation.
|
||||||
|
Ces deux notions ont beaucoup de choses en commun, comme nous
|
||||||
|
allons essayer de le voir.
|
||||||
|
|
||||||
Le shell est à la fois un interpréteur de commande et un
|
Nous allons nous concentrer sur le \textsl{Bourne again shell}
|
||||||
langage de programmation. Ces deux notions ont beaucoup de
|
(aka \texttt{bash}\footnote{aka GNU/shell ?}) qui est un des plus
|
||||||
choses en commun.
|
répandus, du moins dans le monde Linux\index{Linux}.
|
||||||
|
Mais il en existe d'autres : sh, ksh, ash, zsh, tthsh\dots
|
||||||
Nous allons nous concentrer sur le \textsl{Bourne again shell}.
|
|
||||||
aka \texttt{bash} qui est peut-être le plus répandu. Mais il
|
|
||||||
en existe d'autres : sh, ksh, ash, zsh\dots
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ dessiner: dessiner.f90 Makefile
|
|||||||
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
gfortran -g $< $(INCS) -lplplotfortran -o $@
|
||||||
|
|
||||||
|
|
||||||
foo.gif: dessiner Makefile
|
plot89a.gif: dessiner Makefile
|
||||||
rm -f WS/A????.png
|
rm -f WS/A????.png
|
||||||
./dessiner
|
./dessiner
|
||||||
convert -delay 10 -colors 31 WS/A????.png foo.gif
|
convert -delay 10 -colors 42 WS/A????.png $@
|
5
code/fortran/README.md
Normal file
5
code/fortran/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Exemples de code en Fortran moderne
|
||||||
|
|
||||||
|
Pour les explications, il faut aller lire le livre ou
|
||||||
|
les codes source.
|
||||||
|
|
@ -13,6 +13,13 @@ program dessiner
|
|||||||
|
|
||||||
contains ! -----------------------------
|
contains ! -----------------------------
|
||||||
!------------------------------------------------------
|
!------------------------------------------------------
|
||||||
|
!- __ __ _
|
||||||
|
!- \ \/ / __ __ (_) _ __
|
||||||
|
!- \ / \ \ /\ / / | | | '_ \
|
||||||
|
!- / \ \ V V / | | | | | |
|
||||||
|
!- /_/\_\ \_/\_/ |_| |_| |_|
|
||||||
|
!-
|
||||||
|
|
||||||
subroutine dessin_X11 (sha, shb, color)
|
subroutine dessin_X11 (sha, shb, color)
|
||||||
real, intent(in) :: sha, shb
|
real, intent(in) :: sha, shb
|
||||||
integer, intent(in) :: color
|
integer, intent(in) :: color
|
||||||
@ -41,7 +48,7 @@ subroutine dessin_X11 (sha, shb, color)
|
|||||||
call plcol0 (color)
|
call plcol0 (color)
|
||||||
call plline (x, y)
|
call plline (x, y)
|
||||||
|
|
||||||
call plend
|
call plend ()
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
!------------------------------------------------------
|
!------------------------------------------------------
|
||||||
@ -54,7 +61,8 @@ end subroutine
|
|||||||
|
|
||||||
subroutine dessin_dans_un_fichier ()
|
subroutine dessin_dans_un_fichier ()
|
||||||
|
|
||||||
integer, parameter :: nbpts = 40
|
integer, parameter :: nbpts = 20
|
||||||
|
real, parameter :: usz = 15.0 ! univers size
|
||||||
real :: x(nbpts), y(nbpts)
|
real :: x(nbpts), y(nbpts)
|
||||||
integer :: frame, i
|
integer :: frame, i
|
||||||
character(len=89) :: filename
|
character(len=89) :: filename
|
||||||
@ -64,11 +72,11 @@ subroutine dessin_dans_un_fichier ()
|
|||||||
print *, 'Dessin dans un fichier'
|
print *, 'Dessin dans un fichier'
|
||||||
|
|
||||||
do i=1, nbpts
|
do i=1, nbpts
|
||||||
x(i) = 8.50 * (rand() - 0.5000)
|
x(i) = usz * (rand() - 0.5000)
|
||||||
y(i) = 8.50 * (rand() - 0.5000)
|
y(i) = usz * (rand() - 0.5000) * 0.50
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do frame= 0, 149
|
do frame= 0, 119
|
||||||
write (filename, "(a, i4.4, a)") "WS/A", frame, ".png"
|
write (filename, "(a, i4.4, a)") "WS/A", frame, ".png"
|
||||||
print *, frame, ' => ', trim(filename)
|
print *, frame, ' => ', trim(filename)
|
||||||
call plsdev ('pngcairo')
|
call plsdev ('pngcairo')
|
||||||
@ -77,8 +85,8 @@ subroutine dessin_dans_un_fichier ()
|
|||||||
call plenv (-10., 10., -10., 10., 0, 1)
|
call plenv (-10., 10., -10., 10., 0, 1)
|
||||||
call plcol0 (3)
|
call plcol0 (3)
|
||||||
do i=1, nbpts
|
do i=1, nbpts
|
||||||
x(i) = x(i) + (rand() - 0.5000)
|
x(i) = x(i) + 1.2 * (rand() - 0.5000)
|
||||||
y(i) = y(i) + (rand() - 0.5000)
|
y(i) = y(i) + 1.2 * (rand() - 0.5000)
|
||||||
call plline (x, y)
|
call plline (x, y)
|
||||||
enddo
|
enddo
|
||||||
write(buffer, "(i3.3)") frame
|
write(buffer, "(i3.3)") frame
|
||||||
@ -86,12 +94,29 @@ subroutine dessin_dans_un_fichier ()
|
|||||||
call plcol0 (15)
|
call plcol0 (15)
|
||||||
call plstring (x, y, buffer)
|
call plstring (x, y, buffer)
|
||||||
|
|
||||||
call plend
|
call plend ()
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end subroutine
|
end subroutine
|
||||||
!------------------------------------------------------
|
!------------------------------------------------------
|
||||||
|
!- _ _ ____
|
||||||
|
!- | |_ _ __ ___ (_) | _ \
|
||||||
|
!- | __| | '__| / _ \ | | | | | |
|
||||||
|
!- | |_ | | | (_) | | | | |_| |
|
||||||
|
!- \__| |_| \___/ |_| |____/
|
||||||
|
!-
|
||||||
|
subroutine dessiner_en_trois_D ()
|
||||||
|
|
||||||
|
integer, parameter :: szgrid = 64
|
||||||
|
integer :: i, j
|
||||||
|
|
||||||
|
print *, 'Dessin en 3D (de merde :)'
|
||||||
|
|
||||||
|
call plsdev ('xwin')
|
||||||
|
call plinit ()
|
||||||
|
|
||||||
|
call plend ()
|
||||||
|
|
||||||
|
end subroutine
|
||||||
|
!------------------------------------------------------
|
||||||
end program
|
end program
|
||||||
|
@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
printf("hello world.\n");
|
puts("hello world.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -21,14 +21,14 @@
|
|||||||
\makeindex
|
\makeindex
|
||||||
|
|
||||||
\setlength \parindent {2em}
|
\setlength \parindent {2em}
|
||||||
\setlength \parskip {0.33em} % XXX
|
\setlength \parskip {0.30em} % 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.0em,belowskip=1.0em}
|
||||||
|
|
||||||
\setcounter{tocdepth}{1}
|
\setcounter{tocdepth}{1} % XXX à regarder un de ces jours ?
|
||||||
\pagestyle{plain}
|
\pagestyle{plain}
|
||||||
|
|
||||||
\usepackage{pifont} % caractères rigolos
|
\usepackage{pifont} % caractères rigolos
|
||||||
|
Loading…
Reference in New Issue
Block a user