Bonjour
J'ai passé un peu de temps sur votre Forum et je le trouve bien.
Il est bien tenu et au nombre de marquage résolu je vois que vous êtes très assidu pour les réponses.
J'ai voulu faire un essai de réponse à une question posée mais vous les avez toute très bien cadrées.
J’arriverai surement à vous donner un coup de main pour quelque réponse.
En informatique je suis plus un spécialiste réseau et hardware.
J’ai été spécialiste en programmation mais il y a longtemps, en assembleur Intel 8086 (TASM) et Motorola 68000.
Puis en GWBASIC et Turbo BASIC ensuite j’ai fait du WINDEV et du Visual Basic.
Mais je ne suis pas très fort en programmation événementielle car cette programmation ne m’a pas plus.
Voici un exemple de Programme (un éditeur de texte) en Assembleur 8086 que j’ai fait pour un stagiaire Informatique Industriel en 1992.
Voici ce que donne ce programme en code 437.
;------------------ directives d'assemblage pour programme .EXE ----------------
projet segment
.model small
.stack 200
org 100h ;assemblage programme .EXE
assume cs:projet
;-------------------------------------------------------------------------------
;------------------- sauve les registres neutralise ctrl b ---------------------
start: pushf
push dx
push ds
push bx
push cx ;sauve les registres de travail
push ax
push es
;-------------------------------------------------------------------------------
;---------------------------- adresse mémoire ----------------------------------
id20 dw ? ;sauve l'adresse de l'int ctrl break (1bh)
id21 dw ?
;-------------------------------------------------------------------------------
;--------------------- neutralise l'action du ctrl break -----------------------
mov ax,351bh ;adresse de l'int 1bh
int 21h
mov [id20],es ;sauve le segment + l'offset de l'int 1bh
mov [id21],bx
jmp suite1
ctrlb: iret
suite1: mov ah,25h
mov al,1bh
push cs ;supprime l'action de ctrl break (int 1bh)
pop ds
mov dx,offset ctrlb
int 21h
;-------------------------------------------------------------------------------
;=================================== DEBUT =====================================
jmp debut ;début du programme
;-------------------------------------------------------------------------------
;------------------------------- adresses mémoire ------------------------------
id1 db 41 DUP (?) ;emplacement réservé pour le nom du fichier
id2 db "...Copyright 1992 JML$"
id3 dw ? ;contient le handle (nø) du fichier
id46 db " ÉÍÍÍÍ ÉÍÍÍÍ$"
id41 db " º ºÍÍ$"
id4 db "ù º r‚ation d'un º ichier ù$"
id45 db " ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ$"
id44 db "ÉÍÍÍÍÍÍÍÍ»$"
id42 db "º CF.exe º$"
id43 db "ÈÍÍÍÍÍÍÍͼ$"
id5 dw ? ;contient bx (offset id1 fichier ou id8 écriture)
id51 db ? ;contient le nombre de caractère
id52 db 0 ;indicateur de retour
id53 db 0 ;indicateur de sauvegarde
id54 db 0 ;indicateur touche [ F10 ]
id55 db 0 ;indicateur de remontée
id56 db 0 ;indicateur d'effacement touche [back space]
id57 db 0 ;indicateur de retour touche [ F10 ]
id6 db "FICHIER = Unité\Chemin\Nom.ext ÍÍÍ ³$"
id62 db "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿$"
id63 db "³$"
id61 db "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ$"
id64 db " $"
id7 db " $" ;caractère réservé à l'effacement [back space]
id71 dw 2020h
id72 dw 0a0dh
id8 db 80 dup (?) ;emplacement réservé à l'écriture d'une ligne
id9 db"[ F2 ]=EffaceL [ F5 ]=Quitte [ F10 ]=Sauve [ Ù ]=Valide [ - ]=EffaceC [ "
db" ]=Déplace$"
id91 db " ---- Suite ---- $"
id10 db ? ;contient dl (nøcolonne)
id11 db ? ;contient dh (nøligne)
id12 db ? ;contient dl (nøcolonne effacement d'une ligne)
id13 db 0 ;contient l'ancien nø de ligne
id14 db 0 ;contient l'ancienne colonne
id15 db 0
;-------------------------------------------------------------------------------
;----------------- emplacement mémoire des lignes d'écriture -------------------
ligne1 db 81 dup (?) ;ligne d'écriture nø 1
col1 db ? ;contient la colonne de la ligne
lig1 db ? ;
nbr1 db 0 ;contient le nombre de caractères à écrire
ligne2 db 81 dup (?)
col2 db ?
lig2 db ?
nbr2 db 0
ligne3 db 81 dup (?)
col3 db ?
lig3 db ?
nbr3 db 0
ligne4 db 81 dup (?)
col4 db ?
lig4 db ?
nbr4 db 0
ligne5 db 81 dup (?)
col5 db ?
lig5 db ?
nbr5 db 0
ligne6 db 81 dup (?)
col6 db ?
lig6 db ?
nbr6 db 0
ligne7 db 81 dup (?)
col7 db ?
lig7 db ?
nbr7 db 0
ligne8 db 81 dup (?)
col8 db ?
lig8 db ?
nbr8 db 0
ligne9 db 81 dup (?)
col9 db ?
lig9 db ?
nbr9 db 0
ligne10 db 81 dup (?)
col10 db ?
lig10 db ?
nbr10 db 0
ligne11 db 81 dup (?)
col11 db ?
lig11 db ?
nbr11 db 0
ligne12 db 81 dup (?)
col12 db ?
lig12 db ?
nbr12 db 0
ligne13 db 81 dup (?)
col13 db ?
lig13 db ?
nbr13 db 0
ligne14 db 81 dup (?)
col14 db ?
lig14 db ?
nbr14 db 0
ligne15 db 81 dup (?)
col15 db ?
lig15 db ?
nbr15 db 0
ligne16 db 81 dup (?)
col16 db ?
lig16 db ?
nbr16 db 0
ligne17 db 81 dup (?)
col17 db ?
lig17 db ?
nbr17 db 0
ligne18 db 81 dup (?)
col18 db ?
lig18 db ?
nbr18 db 0
ligne19 db 81 dup (?)
col19 db ?
lig19 db ?
nbr19 db 0
ligne20 db 81 dup (?)
col20 db ?
lig20 db ?
nbr20 db 0
ligne21 db 81 dup (?)
col21 db ?
lig21 db ?
nbr21 db 0
ligne22 db 81 dup (?)
col22 db ?
lig22 db ?
nbr22 db 0
ligne23 db 81 dup (?)
col23 db ?
lig23 db ?
nbr23 db 0
ligne24 db 81 dup (?)
col24 db ? ;ligne d'écriture nø 24
lig24 db ?
nbr24 db 0
ligne25 db 81 dup (?)
col25 db ?
lig25 db ?
nbr25 db 0
;-------------------------------------------------------------------------------
;----------------------- début gestion curseur et affichage --------------------
debut: mov ah,0h
mov al,02h ;mode vidéo 80 colonnes 25 lignes CGA
int 10h
mov ah,6
mov al,25
mov bh,7
mov ch,0 ;décalage de 25 lignes (efface l'écran)
mov cl,0
mov dh,25
mov dl,79
int 10h
mov ah,01h
mov ch,6 ;modifie la forme du curseur = ( à )
mov cl,7
int 10h
mov dh,2 ;ligne 2
mov dl,58 ;colonne 58
mov ah,02h
mov bh,0
int 10h
mov ah,09h
mov dx,offset id2 ;affiche le texte id2
int 21h
mov dh,1 ;ligne nø1
mov dl,1 ;colonne nø1
mov ah,02h
mov bh,0 ;place le curseur ligne 1 colonne 1
int 10h
mov ah,09h
mov dx,offset id44 ;affiche le texte id44
int 21h
mov dh,2 ;ligne nø2
mov dl,1 ;colonne nø1
mov ah,02h
mov bh,0 ;place le curseur ligne 2 colonne 1
int 10h
mov ah,09h
mov dx,offset id42 ;affiche le texte id42 (EDP)
int 21H
mov dh,3 ;ligne nø3
mov dl,1 ;colonne nø1
mov ah,02h
mov bh,0 ;place le curseur ligne 3 colonne 1
int 10h
mov ah,09h
mov dx,offset id43 ;affiche le texte id43
int 21h
mov dh,8
mov dl,18
mov ah,02h
mov bh,0
int 10h
mov ah,09h
mov dx,offset id46
int 21h
mov dh,11 ;ligne nø11
mov dl,18 ;colonne nø37
mov ah,02h
mov bh,0 ;place le curseur ligne 2 colonne 37
int 10h
mov ah,09h
mov dx,offset id45 ;affiche le texte id45
int 21h
mov dh,10 ;ligne nø10
mov dl,18 ;colonne nø26
mov ah,02h
mov bh,0 ;place le curseur ligne 10 colonne 26
int 10h
mov ah,09h
mov dx,offset id4 ;affiche le texte id4 ( CREATION de FICHIER... )
int 21h
mov dh,9 ;ligne nø15
mov dl,18 ;colone nø40
mov ah,02h
mov bh,0 ;place le curseur ligne 15 colonne 40
int 10h
mov ah,09h
mov dx,offset id41 ;affiche le texte id41
int 21h
mov dh,21 ;ligne nø 21
mov dl,36 ;colonne nø36
mov ah,02h
mov bh,0 ;place le curseur ligne 21 colonne 36
int 10h
mov ah,09h
mov dx,offset id61 ;affiche le texte id61
int 21h
mov dh,19 ;ligne nø19
mov dl,36 ;colonne nø36
mov ah,02h
mov bh,0 ;place le curseur ligne 19 colonne 36
int 10h
mov ah,09h
mov dx,offset id62 ;affiche le texte id62
int 21h
mov dh,20 ;ligne nø20
mov dl,79 ;colonne nø79
mov ah,02h
mov bh,0 ;place le curseur ligne 20 colonne 79
int 10h
mov ah,09h
mov dx,offset id63 ;affiche le texte id63
int 21h
mov dh,21 ;ligne nø21
mov dl,1 ;colonne nø1
mov ah,02h
mov bh,0 ;place le curseur ligne 21 colonne 1
int 10h
mov ah,09h
mov dx,offset id64 ;affiche le texte id64
int 21h
mov dh,20 ;ligne nø20
mov dl,1 ;colonne nø1
mov ah,02h
mov bh,0 ;place le curseur ligne 20 colonne 1
int 10h
mov ah,09h
mov dx,offset id6 ;affiche le texte id6 ( FICHIER = [ unité....] )
int 21h
mov ch,0
mov bh,0
mov bx,offset id1 ;met l'adresse du nom du fichier dans bx
;-------------------------------------------------------------------------------
;------------------------- entrée des données du fichier -----------------------
entreF: mov ch,[id10] ;récupère la position du pointeur d'écriture
entreC: mov ah,0
int 16h ;entrée d'un caractère au clavier
mov [bx],al ;place le code ascii du caractère dans id1
cmp ah,3fh ;compare le scan code avec la touche [ F5 ]
jnz suite2 ;si vrai fin
jmp fermeF
suite2: cmp ah,01h ;compare le scan code avec la touche [ ESC ]
jnz suite3 ;si vrai entrée d'un caractère
jmp entreF
suite3: cmp ah,1ch ;compare le scan code de la touche avec [enter]
jnz suite4 ;si comparaison vraie crée le fichier
jmp creeF
suite4: cmp ah,0eh ;compare le scan code avec [ back space ]
jnz suite5a ;si comparaison vraie efface le caractère
jmp effC
suite5a:cmp ah,0fh ;compare le scan code avec la touche TAB
jnz suite5 ;si comparaison vraie entrée d'un caractère
jmp entreF
suite5: cmp ch,41 ;compare le nombre de caractères entré
jnz suite6 ;si vrai attente de la touche [ enter ]
jmp entreC
suite6: mov [id5],bx ;sauve bx à l'adresse id5
add bx,+ 1 ;additionne bx avec + 1
mov dl,al
mov ah,02h ;affiche le caractère entré au clavier
int 21h
add ch,+ 1 ;additionne ch ( nombre de caractères entré + 1 )
mov [id10],ch ;sauve la position du pointeur d'écriture
mov ah,01h
mov ch,6
mov cl,7 ;modifie le curseur = ( _ )
int 10h
jmp entreF ;entrée d'un nouveau caractère
;-------------------------------------------------------------------------------
;-------------------------- effacement d'un caractère --------------------------
effC: cmp ch,0 ;compare le nombre de caractères entré avec 0
jnz ret1 ;aucun caractère entré au clavier
jmp entreF
ret1: cmp [id57],1 ;compare indicateur de retour
jnz suite7
cmp ch,1 ;si retour com