Il s'agit d'un tour rapide des langages de programmations les plus courants et d'un apprentissage par l'exemple sans théorie.
Pour chaque langage, un court exemple est donné.
Je vous propose de l'essayer et de tenter d'en comprendre le fonctionnement.
Ensuite, modifiez le pour mieux visualiser le comportement de toutes
les fonctions.
Et enfin, créez un programme qui vous est propre en utilisant
les fonctions présentées dans l'exemple.
Si ces fonctions ne suffisent pas à créer votre programme,
consultez la documentation ou procurez vous un ouvrage qui traite le langage
que vous avez choisi.
Le langage qui comporte le plus d'exemples dans ce document est Perl, car c'est le plus utilisé pour la création de scripts CGI sur les serveurs WEB.
Après avoir lu ce document vous décidez de vous lancer réellement dans la programmation, procurez vous un ou des ouvrages traitant du sujet de votre programme. En effet , il n'est pas rare de perdre des heures à essayer de trouver comment exécuter une tâche, alors qu'en quelques minutes il aurait été possible de trouver la solution dans un ouvrage de référence.
Dans tous les cas, si vous débutez en programmation, restez raisonnable,
ne vous attaquez pas à des projets trop conséquent, vous
seriez vite dégoûté.
Allons-y :
Il existe deux catégories principales de programmes, les scripts
et les programmes compilés.
Les scripts sont des programmes dont le code source et le fichier exécutable ne font qu'un. Pour qu'ils s'exécutent il faut que l'interpréteur correspondant au langage dans lequel ils ont été écrit soit installé sur la machine. Si vous voulez être certain qu'un scripts s'exécute sur toutes les machine UNIX, il vous faudra utiliser le Bourne Shell ("#!/bin/sh"), c'est le seul interpréteur qui se trouve sur tous les systèmes UNIX.
Les programmes compilés ne fonctionnent que sur le système
d'exploitation pour lequel ils ont étés compilé.
Un programme compilé pour LINUX ne fonctionnera pas sur FreeBSD
. Il faudra le recompiler sur FreeBSD pour l'utiliser, si il est bien écrit
il n'y aura pas besoin de modifier le code source. Les programmes compilés
sont plus rapides à l'exécution que les scripts car après
la compilation ils ne contiennent plus que des instructions en langage
machine directement exécutable par le processeur.
Tous les codes sources des programmes d'exemples sont sauvés sur ce serveur avec l'extension .txt. Pour qu'ils soient utilisables, il faudra les renommer avec l'extension correcte après les avoir sauvé sur votre disque dur.
Structure générale d'un programme :
Style :
Style de codage d'après Kernighan and Ritchie (K&R),
les prophètes du langage C.
Résumé par Linus Torvalds pour Linux (et traduit par
moi-même;-).
Le code à l'intérieur d'une fonction est tabulé
à 8 caractères.
Le nombre maximum de tabulation est de 3, si il doit être dépassé
c'est qui faut définir une sous-fonction.
Les parenthèses '{' sont placées sur la même ligne
que les instructions
et sous les définitions de fonctions. Les parenthèses
'}' sont placées
seules sur une ligne. Exemple :
if (x is true) {
we do y
}
int function(int x)
{
body of function
}
do {
body of do-loop
} while (condition);
if (x == y) {
..
} else if (x > y) {
...
} else {
....
}
Les noms de variables et de fonctions 'GLOBAL' doivent être significatif.
Exemple pour une fonction qui compte le nombre d'utilisateurs actifs:
count_active_users()
et pas :
cntusr()
Les noms de variables 'LOCAL' doivent être courts. Exemple :
i
et pas :
loop_counter
Les fonctions doivent être courtes, elles ne doivent pas dépasser
48 lignes et 80 caractères par lignes. Elles peuvent être
plus
longues si elles sont simples. Si elles sont compliquées définissez
des sous-fonctions 'inline'.
Les variables locales ne doivent pas être plus nombreuses que 10.
Ajoutez des commentaires pour expliquer ce que fait votre code et pas
comment il le fait. Évitez de mettre des commentaires dans le
corps des
fonctions. Si vous le faites soyez bref. Placez les commentaire au
dessus
de la fonction.
txt="<H1>Affichage des variables d'environnement pour script
cgi</H1>"
echo -ne "Content-type: text/html\n\n"
echo $txt
echo "<PRE>"
printenv
echo "</PRE>"
set txt="Content-type: text/html"
echo $txt
echo
echo "<H2>Il est "`date '+ %H heure %M minute'`".</H2>"
Exemple :
html_head () {
echo -ne "Content-type:
text/html\n\n"
}
html_head
i=0
while (test $i -lt 1) {
i=`expr $i + 1`
echo "Ceci est le mot
magique pour créer un script CGI :"
echo "<PRE>"
html_head
echo "</PRE>"
}
echo "Hé oui, c'est tout ..."
BEGIN {
printf "Quel est ton
login ? "
FS=":"
}
{
login = $0
# print FNR
print login, "\b, je
recherche to acompte."
system( "cat /etc/passwd
/usr/tmp/recherche.tmp" )
status = getline $0
< "/usr/tmp/recherche.tmp"
i = 1
while ( status > 0 )
{
print "+", i," acompte :",$1
if ( $1 == login ) {
rep = $6
}
if (( $1 ~ login ) && ( $1 != login )) {
print $1, "a un login très proche du tien"
}
status = getline $0 < "/usr/tmp/recherche.tmp"
i++
}
system( "rm /usr/tmp/recherche.tmp"
)
exit
}
END {
if (rep != "") {
print login, "\b, ton répertoire est", rep
exit 0
} else {
print "je n'ai pas trouve ton acompte"
exit 1
}
}
print "Quel est ton nom ? ";
$nom = <STDIN>;
chomp($nom);
print "Hello $nom, Perl te salue\n";
sub getHtmlData() {
local(%in,$buffer,$i,
$index, $key, $val, @in );
if ($ENV{'REQUEST_METHOD'}
eq "POST") {
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
if ($ENV{'REQUEST_METHOD'}
eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
}
@in = split(/&/,$buffer);
$i=0;
while ($i <= $#in)
{
$in[$i] =~ s/+/ /g;
$in[$i] =~ s/%(..)/pack("c",hex($1))/ge;
$index = index($in[$i],"=");
$key = substr($in[$i],0,$index);
$val = substr($in[$i],$index+1);
if (defined($in{$key})) { $in{$key} .= "\0" };
$in{$key} .= $val;
$i++;
}
return %in;
}
my %data = getHtmlData();
print "Content-type: text/html\n\n<HTML>\n";
print "<PRE>\n";
my $vari;
foreach $vari (keys(%data)) {
print "la variable $vari
contient $data{$vari}\n";
}
print "</PRE>\n";
print "</HTML>\n";
exit;
#!/usr/bin/perl5Un autre exempleprint "Content-type: text/plain\n\n";
# - Affiche du texte sur la sortie standard
# \n représente un retour a la ligne
# \t représente une tabulationopen(FILE1, ">/usr/tmp/tst_$$.txt");
print FILE1 "Hello\n ... \n";
close(FILE1);
# - Ouvre un fichier (avec un nome unique) pour y écrire
# (avec >> a la place desi le fichier existe les donnes
# sont mises a la suite des anciennes)
# - Écrit dans le fichier
# - Ferme le fichieropen(FILE2, "</usr/tmp/tst_$$.txt");
$i=0;
while(<FILE2>) {
print "ligne $i $_\n";
$i++;
}
close(FILE2);
qx{rm /usr/tmp/tst_$$.txt};
# - Ouvre un fichier pour y lire des donnes
# - Initialise la variable $i a 0
# - Lit ligne par ligne le fichier tant que la fin n'est pas atteinte
# - Affiche le numéro de la ligne suivit du contenu de cette ligne
# - Ajoute 1 a la variable $i
# - Fin de la boucle de lecture
# - Ferme le fichier
# - Efface le fichier$date=qx{date '+%d.%m.%Y'};
chomp($date);
print "Nous sommes le $date ...\n";
# - Initialise la variable $date avec le texte qui est retourne par
# la commande date exécutée dans un shell
# - Supprime le retour a la ligne a la fin du la variable date
# - Affiche le résultat@table = ("zero", "un", "deux", "trois");
@table = (@table, "quatre");
for ($i=0; $i <= $#table; $i++) {
print "$i --- $table[$i]\n";
}
# - Initialise un tableau contenant 4 cases (ou variables)
# - Ajoute une cinquième case au tableau
# - Boucle pour chaque valeur de $i tant que $i est plus petit ou
# égale au nombre de cases contenues dans le tableau.
# - Affiche la valeur de $i et le contenu de la case du tableau
# correspondant
# - Fin de la boucle%hash = ("key", "val", "nom", "jml");
foreach $clef (keys(%hash)) {
print "$clef contient $hash{$clef}\n";
}
$hash{'perl'} = "top";
delete $hash{'nom'};
foreach $val (values(%hash)) {
print "$val est dans hash\n";
}
# - Initialise un hachage contenant 2 clefs initialisées.
# - Boucle pour chaque clefs contenue dans le hachage
# - Affiche le nom de la clef et sa valeur
# - Fin de la boucle
# - Ajoute un clef au hachage;
# - Supprime un clef
# - Boucle pour chaque valeur contenue dans le hachage
# - Affiche cette valeur.
# - Fin de la boucle$i=3;
if ($i<2) {
print "i est plus petit que 2\n";
} elsif ($i==3) {
print "i egal 3\n";
} else {
print "i n'est pas égal a 3 et n'est pas plus petit que 2\n";
}
# - Initialise la variable $i a 3
# - Si $i est plus petit que 2 :
# - Affiche "i est plus petit que 2"
# - Sinon si $i est égal a 3 :
# - Affiche "i égal 3"
# - Sinon :
# - Affiche "i n'est pas ..."$txt="yes or no";
if ($txt eq "yes or no") {
print "txt égal yes or no\n";
}
if ($txt =~ m/OR NO/ig ) {
print "txt contient OR NO en majuscule ou en minuscule \n";
}
# - Initialise la variable $txt
# - Si $txt égal "yes or no" :
# - Affiche "txt .."
# - Si $txt contient "OR NO" en majuscule ou en minuscule :
# - Affiche ...$txt="hello world\n";
print $txt;
$txt =~ tr/a-z/A-Z/;
print $txt;
$txt=~ s/WORLD/earth/g;
print $txt;
# - Initialise la variable $txt
# - Affiche la variable $txt
# - Transforme toutes le minuscules contenues dans $txt en majuscules
# - Affiche la variable $txt
# - Remplace tous les mots WORLD contenus dans $txt par earth
# - Affiche la variable $txt$vrai=1;
$faux=0;
if ($vrai) { print "ok 1\n" };
if (!$faux) { print "ok 2\n" };
if ($vrai || $faux) { print "ok 3\n" };
if ($vrai && $faux) { print "ok 4\n" };
# - Initialise les variables $vrai et $faux
# - Si $vrai est différent de 0 : Affiche "ok 1"
# - Si $faux égal 0 : Affiche "ok 2"
# - Si $vrai est différent de 0 ou si $faux est différent de 0 : Affiche "ok 3"
# - Si $vrai est différent de 0 et si $faux est différent de 0 : Affiche "ok 4"sub ma_fonction
{
print "$_[0] plus $_[1] égal ";
return ($_[0] + $_[1]);
}
print ma_fonction(2,3) . "\n";
# - Déclare une sous fonction de nom "ma_fonction"
# - Affiche "1er argument de la sous fonction" "plus" " 2ème argument" "égal"
# - Retourne la somme de 2 arguments
# - Fin de la sous fonction
# - Appel la sous fonction avec les arguments 2 et 3 et Affiche le résultat
# retourne par la sous fonction$txt="nom\tLienher\tprenom\tJean-Marc\tentreprise\tNickasil Production.\n";
@donnes=split('\t',$txt);
$i=0;
foreach $data (@donnes) {
if ($i) {
print "$data\n";
$i=0;
} else {
print "$data == ";
$i=1;
}
}
# - Initialise la variable $txt
# - Initialise le tableau @donnes en créant une case par phrase séparée par une
# tabulation dans la variable $txt
# - Initialise $i
# - Boucle pour chaque case contenue dans @donne :
# - Si est différent de 0 :
# - Affiche le contenu de la case
# - Met $i a 0
# - Sinon :
# - Affiche le contenu de la case et " == "
# -Met $i a 1
# - Fin de Si
# - Fin de boucle$txt="0123456789012345";
$ind1 = index($txt,'23',0);
$ind2 = index($txt,'23',$ind1+1);
print "$txt\n";
print substr($txt,$ind1,10) . " index1=$ind1\n";
print substr($txt,$ind2), " index2=$ind2\n";
# - Initialise la variable $txt
# - Initialise $ind1 avec le nombre de caractères trouves dans
# $txt avant de trouver la chaîne de caractère '12'
# - Initialise $ind2 comme $ind1 mais en cherchant après $ind1
# - Affiche $txt
# - Affiche les 10 caractères de $txt qui suivent l'emplacement de $ind1
# - Affiche la fin de $txt depuis l'emplacement de $ind2print pack("c",0x41) . "\n";
print unpack("H","A") . unpack("h","A") . "\n";
print hex("0x41");
# - Affiche le caractère ASCII correspondant 0x41 en hexadécimal (base 16)
# - Affiche la partie haute et la partie basse de la hexadécimale
# correspondant a la lettre A
# - Affiche la valeur en décimal de 0x41 en hexadécimal@list = ("ABAAAA", "AAAAAA", "BBBBBB", "CCCCCC");
while (<@list>) { print "$_\n" };
print "tri\n";
@list = sort {uc($a) cmp uc($b)} @list;
while (<@list>) { print "$_\n" };
@list = (3, 2, 5, 8, 1 ,7, 2);
while (<@list>) { print "$_\n" };
print "tri\n";
@list = sort {$a <=> $b} @list;
while (<@list>) { print "$_\n" };
# - Initialise le tableau @list
# - Affiche toutes les cases de @list avec un retour a la ligne
# - Affiche "tri"
# - Trie @list par ordre alphabétique sans tenir compte de majuscules et des minuscules
# - Affiche la liste triée
# - Initialise @list avec des nombres
# - Imprime @list ligne par ligne
# - Affiche "tri"
# - Trie @list dans l'ordre croissant
# - Imprime @listprint "8 / 3 = " . (8 / 3) . "\n";
print "int(8 / 3) = " . int(8 / 3) . "\n";
print "8 % 3 = " . (8 % 3) . "\n";
print "8 - 3 = " . (8 - 3) . "\n";
print "8 + 3 = " . (8 + 3) . "\n";
print "sqrt(8) = " . sqrt(8) . "\n";
print "8 2 = " . (8 2) . "\n";
# - Affiche une division a virgule
# - Affiche une division entière
# - Affiche le reste d'une division entière
# - Affiche une soustraction
# - Affiche une addition
# - Affiche une racine carrée
# - Affiche une puissance
# - (Tous les chiffre peuvent être remplace par des variablesprint sprintf ("un nombre %.5f\n",2.89);
# - Affichage formate d'un nombreuse IO::Socket;
$host="localhost";
$port="80";
$page="/";
$remote = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => $host,
PeerPort => $port, );$remote->autoflush(1);
print $remote "GET $page\n";
while (<$remote>) {
print $_;
}
close($remote);
# - Inclus le module IO:Socket pour l'utilisation du réseau
# - Initialise les 3 variables
# - Crée un objet $remote représentant une connexion réseau avec
# le serveur $host sur le port 80 (http)
# - Met la connexion en mode de vidage du buffer automatique
# - Demande au serveur de renvoyer la page $page
# - Boucle tant que le serveur envoie des données
# - Affiche ces données
# - Fin de boucle
# - Ferme la connexion réseau
# - ATTENTION : pour utiliser IO::Socket, il faut au minimum la
# version 5.004 de perl
Documentation :
puts -nonewline "Quel est ton nom? "
flush stdout
set nom [gets stdin]
puts "Hello $nom, Tcl te salue"
#!/usr/bin/tclsh
set variable 0for {set i 0} {$i < 5} {incr i} {
puts "i = $i"
}set i 0
while {$i < 5} {
puts "sortie prématurée"
incr i
if {$i == 2} { break }
}set i 0
if {$i == 0} then {
puts "zéro"
} elseif {$i < 0} then {
puts "négatif"
} else {
puts "positif"
}proc ajoute_2_a num {
return [expr $num + 2]
}
set i 1
puts "[ajoute_2_a $i]"puts "$env(PATH)"
set tableau(0) "oui"
set tableau(1) "non"
set tableau(2) "bof"
for {set i 0} {$i != 3} {incr i} {
puts "$tableau($i)"
}puts -nonewline stdout "tapez quelque chose > ? "
flush stdout
set entree [gets stdin]
set file_handler [open "test.tmp" {RDWR CREAT APPEND}]
puts $file_handler $entree
seek $file_handler 0 start
while {[gets $file_handler line] != -1} {
puts "$line"
}
close $file_handler
label .quest -texte "Quel est ton nom ? "
entry .nom
label .rep -texte ""
button .quit -texte "Quitter" -command { exit}
button .ok -texte "OK" -command {
set nom [.nom get ]
.rep config -texte "Hello $nom, Tcl/Tk te salue"
}
pack .quest .nom .rep .ok .quit
Pour debugger votre programme C ou C++ utilisez "gdb" :
gdb mon_prog
(gdb) run
Starting program: /usr/src/mon_prog
Program received signal SIGSEGV, Segmentation fault.
(gdb) where
#0 0x4029a373 in gtk_entry_set_text (entry=0x82f5c68,
text=0x4 <Address 0x4 out of bounds>) at gtkentry.c:395
(gdb) list gtkentry.c:394394 tmp_pos = 0;
395 gtk_editable_insert_text (editable, text, strlen (text), &tmp_pos);
396 editable->current_pos = tmp_pos;
(gdb) quit
char nom[255];
void main(int argc, char *argv[])
{
printf("Quel est ton
nom? ");
fscanf(stdin,"%255s",nom);
printf("Hello %s, C
te salue\n",nom);
}
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Box.h>
#include <X11/Xaw/AsciiText.h>
static Widget top, box, label1, label2, texte;
static void callback (Widget w, XtPointer client_data, XEvent *event)
{
int n;
Arg args[20];
String str;
if (client_data == NULL)
exit(0);
n=0;
XtSetArg(args[n],"string",&str);n++;
XtGetValues(text,args,n);
printf("X-Window te
salue, %s... \n",str);
}
void main(int argc, char *argv)
{
int n;
Arg args[20];
XtAppContext context;
top = XtVaAppInitialize(&context,
"exemple", NULL, 0,
&argc, argv, NULL, XtNallowShellResize,
TRUE,NULL);
box = XtCreateManagedWidget("box",
boxWidgetClass, top, NULL, 0);
texte = XtVaCreateManagedWidget("text",
asciiTextWidgetClass, box, NULL);
label1 = XtVaCreateManagedWidget("Hello",
labelWidgetClass, box, NULL);
label2 = XtVaCreateManagedWidget("FIN",
labelWidgetClass, box,NULL);
XtAddEventHandler(label1,ButtonPressMask,False,
(XtEventHandler)callback,"hello");
XtAddEventHandler(label2,ButtonPressMask,False,
(XtEventHandler)callback,NULL);
n=0;
XtSetArg(args[n],"string","mon
nom");n++;
XtSetArg(args[n],"editType",XawtextEdit);n++;
XtSetValues(text,args,n);
XtRealizeWidget(top);
XtAppMainLoop(context);
}
class name
{
char nom[255];
public:
void demande_nom();
void affiche_hello();
};
void main(int argc, char *argv[])
{
name class_hello;
class_hello.demande_nom();
class_hello.affiche_hello();
}
void name::demande_nom()
{
cout << "Quel
est ton nom? ";
cin.getline(nom,255);
}
void name::affiche_hello()
{
cout << "Hello
" << nom << ", C++ te salue\n";
}
#include "wxwin/base/wx.h"
class TheApp: public wxApp
{
public:
TheApp(void);
wxFrame* OnInit(void);
static wxFrame* frame;
static wxPanel* panel;
static wxMultiText* texte;
static wxButton* button;
static wxButton* quit;
void ButtonProc(wxButton& but, wxCommandEvent& event);
void QuitProc(wxButton& but, wxCommandEvent& event);
};
TheApp theApp;
wxFrame* TheApp::frame = NULL;
wxPanel* TheApp::panel = NULL;
wxMultiText* TheApp::text = NULL;
wxButton* TheApp::button = NULL;
wxButton* TheApp::quit = NULL;
TheApp::TheApp()
{
}
wxFrame* TheApp::OnInit(void)
{
frame = new wxFrame(NULL,"exemple",0,0,300,300);
frame->Show(TRUE);
panel = new wxPanel(frame,0,
0, 300, 300, 0, "TheMainFrame");
texte = new wxMultiText(panel,
(wxFunction)NULL, "", "mon nom",
1, 1, 150, 100);
button = new wxButton(panel,
(wxFunction)&ButtonProc, "hello");
quit = new wxButton(panel,
(wxFunction)&QuitProc, "fin");
return((wxFrame*) frame);
}
void TheApp::ButtonProc(wxButton& but, wxCommandEvent& event)
{
cout << text->GetValue()
<< "\n";
}
void TheApp::QuitProc(wxButton& but, wxCommandEvent& event)
{
frame->Show(False);
exit(0);
}
CHARACTER*10 str
10 WRITE (,) '\bQuel est ton nom?
'
READ (,) str
WRITE (,) '\bHello
', str, ', Fortran te salue'
20 DO 30 i=1,6
WRITE (,) 'Boucle
', i
30 CONTINUE
END
Exemple 1 :
public class mon_applet extends java.applet.Applet
{
Label Quest = new Label
("Quel est ton nom? ");
TextField Nom = new
TextField("",15);
public void init()
{
add(Quest);
add(Nom);
}
public boolean action(Event
evt, Object arg)
{
if (evt.target instanceof TextField)
{
repaint();
}
return true;
}
public void paint (Graphics
g)
{
String Hello;
Hello = "Hello " + Nom.getText();
Hello += ", Java te salue";
if ( Nom.getText().length() != 0) {
g.drawString(Hello,100,50);
}
}
}
public static String
lit() throws java.io.IOException
{
char Caractere;
String Chaine = "";
while ((Caractere=(char)System.in.read()) != '\n')
{
Chaine = Chaine + Caractere;
}
return Chaine;
}
}
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
document.write("<FORM>\n")
document.write("Quel est ton nom? ")
document.write("<INPUT TYPE=\"text\" NAME=\"nom\" SIZE=\"25\"
OnChange=\"update()\">\n")
document.write("<INPUT TYPE=\"text\" NAME=\"reponse\" SIZE=\"60\">\n")
document.write("</FORM>\n")
document.forms[0].nom.focus()
// -->
</SCRIPT>
</BODY>
</HTML>
<HEAD>
<TITLE>Hyper Text Markup Language</TITLE>
</HEAD>
<BODY BGCOLOR=#8fffff>
<U><CENTER><H1>
H T M L
</H1></CENTER></U>
<I>HTML est un langage de mise en forme de documents</I>
<BR>
<B>Ce n'est pas un langage de programmation !!!</B>
<BR><A HREF="prog.html">un lien </A><BR>
<IMG SRC="prog.gif">une image
<FONT SIZE="+2"><PRE>Les caractères spéciaux
:</PRE></FONT>
é
è
ê
ë
î
ï
ö
ü
ù
à
â
&
<
<HR>
<BR>
Un tableau :
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=0 COLS=2 WIDTH="20%"
BGCOLOR="#66FF8F" >
<TR>
<TD>1</TD>
<TD>3</TD>
</TR><TR>
<TD>2</TD>
<TD>4</TD>
</TR>
</TABLE>
<UL>
<LI>aa</LI>
<LI>bb</LI>
<LI>cc</LI>
</UL>
<OL>
<LI>aaa</LI>
<LI>bbb</LI>
<LI>ccc</LI>
</OL>
<FORM ACTION="mailto:root@localhost" METHOD="post">
nom:<INPUT TYPE="text" NAME="nom" SIZE=30>
<BR>oui<INPUT TYPE="radio" NAME="rad1" VALUE="oui">
non<INPUT TYPE="radio" NAME="rad1" VALUE="non" CHECKED>
<BR><INPUT TYPE="checkbox" NAME="chk1" VALUE="oui" CHECKED>
<INPUT TYPE="checkbox" NAME="chk2" VALUE="non" >
<BR><INPUT TYPE="file" NAME="fichier" >
<INPUT TYPE="hidden" NAME="cache" VALUE="XxX" >
<BR><SELECT NAME="sel" SIZE=2>
<OPTION VALUE="un">premier
<OPTION VALUE="deux">deuxieme
<OPTION VALUE="trois">troisieme
</SELECT>
<BR>
<TEXTAREA NAME="text" ROWS=6 COLS=60 WARP="HARD">
H T M L
</TEXTAREA><BR>
<INPUT TYPE="submit" value="envoi">
<INPUT TYPE="reset" value="effacer">
</FORM>
<A HREF="mailto:nickasil@linuxbox.com">nickasil@linuxbox.com</A>
</BODY>
</HTML>
Les caractères spéciaux :é è ê ë î ï ö ü ù à â & <
1 | 3 |
2 | 4 |
RCX
140
N MON_PROG.COM
W 0100
Q