; Affiche tous les pixels dans un segment de lignes horizontales, de ; (LeftX,Y) à (RightX,Y), dans la couleur spécifiée du mode 13h, le ; mode 320x200 en 256 couleurs du VGA. Aucun affichage ne se fera si ; LeftX > RightX. ; Appelable depuis C near comme suit: ; void DrawHorizontalLineSeg(Y, LeftX, RightX, Color); ; ; A lier avec L40-4.C et L40-1.C en modèle small. ; Testé avec TASM 4.0 et Borland C++ 4.02 par Jim Mischel 12/16/94. SCREEN_WIDTH equ 320 SCREEN_SEGMENT equ 0a000h Parms struc dw 2 dup(?) ;adresse de retour & BP empilé Y dw ? ;coordonnée Y du segment de la ligne à afficher LeftX dw ? ;extrémité gauche du segment de la ligne RightX dw ? ;extrémité droite du segment de la ligne Color dw ? ;couleur dans laquelle afficher le segment de la ligne Parms ends .model small .code public _DrawHorizontalLineSeg align 2 _DrawHorizontalLineSeg proc push bp ;préserve la stack frame de l'appelant mov bp,sp ;pointe sur notre stack frame push di ;préserve la variable registre de l'appelant cld mov ax,SCREEN_SEGMENT mov es,ax ;ES pointe sur la mémoire vidéo mov di,[bp+LeftX] mov cx,[bp+RightX] sub cx,di ;largeur de la ligne jl DrawDone ;RightX < LeftX; pas d'affichage à faire inc cx ;inclut les deux extrémités mov ax,SCREEN_WIDTH mul [bp+Y] ;offset de la ligne d'affiche sur laquelle afficher add di,ax ;ES:DI pointe sur le début du segment de la ligne mov al,byte ptr [bp+Color] ;couleur dans laquelle afficher mov ah,al ;met la couleur dans AH pour STOSW shr cx,1 ;nombre de mots à remplir rep stosw ;remplit un mot à la fois adc cx,cx rep stosb ;affiche l'octet impair, s'il y en a un DrawDone: pop di ;restaure la variable registre de l'appelant pop bp ;restaure la stack frame de l'appelant ret _DrawHorizontalLineSeg endp end