Accueil > > > CONVERSION HEXA=>DÉCI ET DÉCI=>HEXA SUR 64 BITS
CONVERSION HEXA=>DÉCI ET DÉCI=>HEXA SUR 64 BITS
Information sur la source
Description
Ce programme converti toutes les valeurs Hexadécimales (jusqu'à 64 bits) en neombre décimal équivalent et vice-versa. Il traite les valeurs positives et négatives comprises entre - 18 446 744 073 709 551 615 et + 18 446 744 073 709 551 615, ce qui est déjà pas mal !!... et suffisant pour les besoins courants.
Source
- .386
- .model flat,stdcall
- option casemap:none
-
- ;**********************************
-
- include \masm32\include\windows.inc
- include \masm32\include\masm32.inc
- include \masm32\include\user32.inc
- include \masm32\include\kernel32.inc
- include \masm32\include\comdlg32.inc
- include \masm32\include\gdi32.inc
-
- includelib \masm32\lib\masm32.lib
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\kernel32.lib
- includelib \masm32\lib\comdlg32.lib
- includelib \masm32\lib\gdi32.lib
-
- ;********************************
- ; MACROS
- ;********************************
-
- szText MACRO Name, Text:VARARG
- LOCAL lbl
- jmp lbl
- Name db Text,0
- lbl:
- ENDM
-
-
- ;***********************************
- ; PROTO
- ;***********************************
-
- BmpProc proto :DWORD, :DWORD, :DWORD, :DWORD
- BmpProc1 proto :DWORD, :DWORD, :DWORD, :DWORD
- BmpProc2 proto :DWORD, :DWORD, :DWORD, :DWORD
- BmpProc3 proto :DWORD, :DWORD, :DWORD, :DWORD
- BmpButton proto :DWORD, :DWORD, :DWORD, :DWORD,:DWORD,:DWORD
- DlgProc proto :DWORD, :DWORD, :DWORD, :DWORD
- DlgProc1 proto :DWORD, :DWORD, :DWORD, :DWORD
- DlgProc2 proto :DWORD, :DWORD, :DWORD, :DWORD
- Ed1Proc1 PROTO :DWORD,:DWORD,: DWORD,:DWORD
- Ed1Proc2 PROTO :DWORD,:DWORD,: DWORD,:DWORD
- Convert PROTO :LPSTR,:DWORD
- Convert1 PROTO :LPSTR,:DWORD
- Savapa PROTO : DWORD
- Multiplie PROTO
- Divise PROTO
- Arrondi PROTO
-
- DqToHex1 PROTO :QWORD, :DWORD, :DWORD
- atodq1 PROTO :DWORD, :DWORD
- HexToDq1 PROTO :DWORD, :DWORD
- dqtoa1 PROTO :QWORD, :DWORD, :DWORD
-
- .Const
-
- IDC_EDIT1 equ 3000
- IDC_EDIT2 equ 3001
- IDC_OK equ 3002
- IDC_EXIT equ 3004
- IDC_SIGNE equ 3005
- IDC_NSIGNE equ 3006
-
-
- ; #######################################################
-
- .data?
-
- hInstance dd ?
- hWND dd ?
- hIcon dd ?
- hBmp1 dd ?
- hBmp2 dd ?
- hBmp3 dd ?
- hBmp4 dd ?
- hBmp5 dd ?
- hBmp6 dd ?
- hBmp7 dd ?
- hBmp8 dd ?
- hBtn1 dd ?
- hBtn2 dd ?
- hBtn3 dd ?
- hBtn4 dd ?
- lpfnProc dd ?
- lpfnEd1Proc dd ?
- Drapo dd ?
- hEdit1 dd ?
- hEdit2 dd ?
- hTxt1 dd ?
- Signe dd ?
- monText1 db 50 dup (?)
- monText2 db 50 dup (?)
- resultat db 18 dup (?)
- Pospoint dd ?
- long dd ?
- result dq ?
- Reste dq ?
- nbch dd ?
- Cpt dd ?
- Cpt1 dd ?
- signe dd ?
- ; **********************************************
- .data
- Msg1 db 'Y a Rien!!!!!!',0
- Msg2 db "Trop d'octets !!!! : 16 maximum.",0
- Msg3 db 'Fodrait kèke chose!!!',0
- Taux REAL8 6.55957
- Complement REAL8 0.005
- chaine db ".",0
- deuzero db ".00",0
- zero db "0",0
-
- ;*************************************
-
- .code
- start:
- invoke GetModuleHandle, NULL
- mov hInstance,eax
- encore:
- invoke DialogBoxParam,hInstance,101,NULL,addr DlgProc,NULL
- invoke ExitProcess,NULL
-
- ;**************************************************************
-
- DlgProc proc hWin :HWND,uMsg :UINT,wParam :DWORD,lParam :DWORD
-
- mov eax,hWin
- mov hWND,eax
-
- .IF uMsg == WM_INITDIALOG
- call ChargeBmp
-
- .ELSEIF uMsg == WM_COMMAND
-
- .if wParam == 400 ; bouton Deci=>hexa
- mov Drapo,0 ; bascule pour la Procédure approprriée
- ;**************************************************************
- ;Fermeture de la boite de Dialogue principale et création de la
- ; 2ème boite de dialogue.
- ;**************************************************************
- invoke EndDialog,hWin,NULL
- invoke DialogBoxParam,hInstance,102,NULL,addr DlgProc1,0
-
- .elseif wParam == 401 ; bouton Hexa=>Deci
- mov Drapo,1
- invoke EndDialog,hWin,NULL
- invoke DialogBoxParam,hInstance,103,NULL,addr DlgProc1,0
-
- .elseif wParam == 402 ;bouton Francs=>Euros
- mov Drapo,2
- invoke EndDialog,hWin,NULL
- invoke DialogBoxParam,hInstance,104,NULL,addr DlgProc2,0
-
- .elseif wParam == 403 ; bouton Euros=>Francs
- mov Drapo,3
- invoke EndDialog,hWin,NULL
- invoke DialogBoxParam,hInstance,105,NULL,addr DlgProc2,0
- .endif
-
- .ELSEIF uMsg == WM_CLOSE
- jmp ExitProcess
- .ENDIF
- @@:
- xor eax,eax
- ret
- DlgProc endp
-
- ; **********************************************
-
- DlgProc1 proc hWin :HWND,uMsg :UINT,wParam :DWORD,lParam :DWORD
- LOCAL Ps : PAINTSTRUCT
-
- .IF uMsg == WM_INITDIALOG
- ;**************************************************************
- ; Récupération des handles des 2 éditeurs et du texte associé.
- ; Placer le focus dans l'éditeur du haut
- ; Sélectionner la procédure associée à hEdit1.
- ;**************************************************************
- invoke GetDlgItem,hWin,IDC_EDIT1
- mov hEdit1,eax
- invoke SetFocus,hEdit1
- invoke GetDlgItem,hWin,IDC_EDIT2
- mov hEdit2,eax
- invoke GetDlgItem,hWin,301
- mov hTxt1,eax
- invoke SetWindowLong,hEdit1,GWL_WNDPROC,Ed1Proc1
- mov lpfnEd1Proc,eax
-
- .ELSEIF uMsg==WM_CLOSE
- invoke ExitProcess,NULL
-
- .ELSEIF uMsg==WM_PAINT
- ;**************************************************************
- ;Trace un cadre autour des éditeurs.
- ; Le cadre autour du texte est spécifié dans le fichier.rc
- ;**************************************************************
- invoke BeginPaint,hWin,addr Ps
- invoke FrameGrp,hTxt1,hEdit2,6,2,0
- invoke EndPaint,hWin,addr Ps
-
- .ELSEIF uMsg == WM_COMMAND
- .if wParam == IDC_OK
- ;**************************************************************
- ; Remettre le focus en place, vider le buffer qui recevra la
- ; valeur à convertir,appeler la procédure chargée du traitement
- ; en fonction de la valeur de la bascule et enfin placer le
- ; résultat dans hEdit2.
- ;**************************************************************
- invoke SetFocus,hEdit1
- call VideBuff
- invoke GetDlgItemText,hWin,IDC_EDIT1,addr monText1,50
- .if Drapo == 0
- invoke Convert,addr monText1,addr monText2
- .elseif Drapo == 1
- invoke Convert1,addr monText1,addr monText2
- .endif
- invoke SetDlgItemText,hWin,IDC_EDIT2,addr monText2
-
- .elseif wParam == IDC_EXIT
- ;**************************************************************
- ; terminer proprement en nettoyant la pile et relancer
- ; la boite de dialogue principale.
- ;**************************************************************
- invoke EndDialog,hWin,NULL
- leave
- sub esp,10h
- jmp encore
- ;**************************************************************
- ; placer une bascule à 1 pour une valeur négative ou à 0 pour
- ; une valeur positive
- ;**************************************************************
- .elseif wParam==IDC_SIGNE
- mov Signe,1
- invoke SetFocus,hEdit1
- .elseif wParam==IDC_NSIGNE
- mov Signe,0
- invoke SetFocus,hEdit1
- .endif
-
- .ELSE
- mov eax,FALSE
- ret
- .ENDIF
-
- mov eax,TRUE
- ret
- DlgProc1 endp
-
- ;*****************************************
-
- DlgProc2 proc hwnd:HWND, UMsg:UINT, WParam:WPARAM, LParam:LPARAM
- LOCAL Ps : PAINTSTRUCT
- ;**************************************************************
- ; Procédure utilisée pour les conversions Franc => Euros
- ; et Euros => Francs.
- ; Fonctionnement identique à DialogProc1, sauf, bien entendu,
- ; que les procédures de traitement appelées sont différentes.
- ;**************************************************************
-
- .if UMsg==WM_INITDIALOG
- invoke GetDlgItem, hwnd,IDC_EDIT1
- mov hEdit1,eax
- invoke SetFocus,hEdit1
- invoke SetWindowLong,hEdit1,GWL_WNDPROC,Ed1Proc2
- mov lpfnEd1Proc, eax
-
- .elseif UMsg==WM_CLOSE
- invoke ExitProcess,NULL
-
- .ELSEIF UMsg==WM_PAINT
- invoke BeginPaint,hwnd,addr Ps
- invoke FrameGrp,hTxt1,hEdit2,6,2,0
- invoke EndPaint,hwnd,addr Ps
-
- .elseif UMsg==WM_COMMAND
-
- .if WParam==IDC_OK
- invoke SetFocus,hEdit1
- call VideBuff
- invoke GetDlgItemText,hwnd,IDC_EDIT1,ADDR monText1,50
- .if Drapo == 2
- invoke Divise
- .elseif Drapo == 3
- invoke Multiplie
- .endif
- invoke SetDlgItemText,hwnd,IDC_EDIT2,ADDR monText2
-
- .elseif WParam==IDC_EXIT
- invoke EndDialog, hwnd,NULL
- leave
- sub esp,10h
- jmp encore
- .endif
-
- .else
- mov eax,FALSE
- ret
- .endif
- mov eax,TRUE
- ret
-
- DlgProc2 endp
-
- ;*****************************************
-
- Ed1Proc2 proc hCtl: DWORD,
- uMsg1: DWORD,
- wParam1: DWORD,
- lParam1: DWORD
- ;**************************************************************
- ;Cette procédure traite les entrées clavier dans l'éditeur N°1
- ; n'accepte que les chiffres 0 à 9 inclus et la virgule ou le
- ; point.Remplace la virgule éventuelle par le point.
- ; en fin de traitement, renvoie à la procédure normale.
- ;**************************************************************
-
- .if uMsg1 == WM_CHAR
- .if wParam1 < "0"
- .if wParam1 == ","
- mov wParam1,"."
- .endif
- .if wParam1 == "."
- jmp accept
- .endif
- xor eax,eax
- ret
- .endif
- .if wParam1 > "9"
- xor eax,eax
- ret
- .endif
- .endif
-
- accept:
- invoke CallWindowProc, lpfnEd1Proc, hCtl, uMsg1,wParam1,lParam1
- ret
-
- Ed1Proc2 endp
-
- ;*****************************************
-
- Ed1Proc1 proc hCtl: DWORD,
- uMsg1: DWORD,
- wParam1: DWORD,
- lParam1: DWORD
- ;**************************************************************
- ; traite les entrées clavier pour les conversions Hexa => Deci
- ; et Deci => Hexa. N'accepte que : retour arrière,espace,chiffres
- ; 0,1,2,3,4,5,6,7,8,9 si bascule Drapo = 0. Si bascule =1
- ; accepte en plus A,B,C,D;E,F ou a,b,c,d,e,f
- ;**************************************************************
-
- .if uMsg1 == WM_CHAR
- .if wParam1 < "0"
- .if wParam1 == 8
- jmp accept
- .elseif wParam1 == 20h
- jmp accept
- .elseif wParam1 == 2Dh
- jmp accept
- .else
- xor eax,eax
- ret
- .endif
-
- .elseif wParam1 > "9"
- .if Drapo == 1
- .if wParam1 >= 'A' && wParam1 <= 'F'
- jmp accept
- .elseif wParam1 >= 'a' && wParam1 <= 'f'
- jmp accept
- .endif
- .endif
- xor eax,eax
- ret
- .endif
- .endif
-
- accept:
- invoke CallWindowProc, lpfnEd1Proc, hCtl, uMsg1,wParam1,
- lParam1
- ret
-
- Ed1Proc1 endp
-
- ;***************************
-
- BmpButton proc hParent:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
- ;**************************************************************
- ; réation des boutons
- ;**************************************************************
-
- szText BmpBtnCl,"BUTTON"
- szText blnk2,0
-
- invoke CreateWindowEx,0,addr BmpBtnCl,addr blnk2,WS_CHILD or WS_VISIBLE or \
- BS_BITMAP,a,b,wd,ht,hParent,ID,hInstance,NULL
- ret
- BmpButton endp
-
-
- ;**************************************************************
- ; les 4 procédures suivantes seront associées aux 4 boutons
- ; de la boite de dialogeue pour gérer leur apparence suivant
- ; que le bouton de la souris est enfoncé ou relaché.
- ;**************************************************************
-
- BmpProc proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
-
- .if uMsg == WM_LBUTTONDOWN
- invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp2
- .elseif uMsg == WM_LBUTTONUP
- invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp1
- .endif
- invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
- ret
- BmpProc endp
-
- ;*****************************************
-
- BmpProc1 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
-
- .if uMsg == WM_LBUTTONDOWN
- invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp4
- .elseif uMsg == WM_LBUTTONUP
- invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp3
- .endif
- invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
- ret
- BmpProc1 endp
-
- ;*****************************************
-
- BmpProc2 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
-
- .if uMsg == WM_LBUTTONDOWN
- invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp6
- .elseif uMsg == WM_LBUTTONUP
- invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp5
- .endif
- invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
- ret
- BmpProc2 endp
-
- ;*****************************************
-
- BmpProc3 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
-
- .if uMsg == WM_LBUTTONDOWN
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp8
- .elseif uMsg == WM_LBUTTONUP
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp7
- .endif
- invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
- ret
- BmpProc3 endp
-
- ;**************************************************************
- ; Cette procédure charge les bitmaps, créé les boutons et y
- ; place les images. Elle sélectionne également les procédures
- ; propres à chaque bouton.
- ;**************************************************************
-
- ChargeBmp proc
- invoke LoadBitmap,hInstance,18
- mov hBmp1,eax
-
- invoke LoadBitmap,hInstance,19
- mov hBmp2,eax
-
- invoke LoadBitmap,hInstance,20
- mov hBmp3,eax
-
- invoke LoadBitmap,hInstance,21
- mov hBmp4,eax
-
- invoke LoadBitmap,hInstance,22
- mov hBmp5,eax
-
- invoke LoadBitmap,hInstance,23
- mov hBmp6,eax
-
- invoke LoadBitmap,hInstance,24
- mov hBmp7,eax
-
- invoke LoadBitmap,hInstance,25
- mov hBmp8,eax
-
- invoke BmpButton,hWND,20,110,100,40,400
- mov hBtn1,eax
- invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp1
- invoke SetWindowLong,hBtn1,GWL_WNDPROC,BmpProc
- mov lpfnProc,eax
-
- invoke BmpButton,hWND,180,110,100,40,401
- mov hBtn2,eax
- invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp3
- invoke SetWindowLong,hBtn2,GWL_WNDPROC,BmpProc1
- mov lpfnProc,eax
-
- invoke BmpButton,hWND,20,165,100,40,402
- mov hBtn3,eax
- invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp5
- invoke SetWindowLong,hBtn3,GWL_WNDPROC,BmpProc2
- mov lpfnProc,eax
-
- invoke BmpButton,hWND,180,165,100,40,403
- mov hBtn4,eax
- invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp7
- invoke SetWindowLong,hBtn4,GWL_WNDPROC,BmpProc3
- mov lpfnProc,eax
- ret
- ChargeBmp endp
-
- ;*****************************************
-
- Convert proc decString:LPSTR, hexString:LPSTR
- LOCAL NB1 :QWORD
- ;**************************************************************
- ; Procédure qui transforme un nombre décimal en un nombre Hexa
- ; signé ou non signé.
- ;**************************************************************
- mov esi,decString
- cmp byte ptr[esi],0 ; vérifie qu'on a entré un nombre.
- jne SaVa
- invoke Savapa,addr Msg3
- ret
- SaVa:
- call Otespace ; suppression de tous les espaces éventuels
- ;**************************************************************
- ; transformation de la chaîne entrée en un nombre 64 bits
- ;**************************************************************
- invoke atodq1,decString,addr NB1
- ;**************************************************************
- ;Appel de la proc qui va trasformer le nombre 64 bit en une
- ; chaine Hexa. Valeur négative ou positive suivant la valeur
- ; du dernier parametre de l'appel.
- ;**************************************************************
- .if Signe == 1
- invoke DqToHex1,NB1,hexString,1
- .else
- invoke DqToHex1,NB1,hexString,0
- .endif
- ret
-
- Convert endp
-
- ;******************************************
-
- Convert1 proc hexString1 :DWORD,decString1 :DWORD
- LOCAL NB1 :QWORD
- ;**************************************************************
- ; Cette proc convertit une chaine Hexa jusqu'à 64 bits en sa
- ; valeur (positive ou négative) équivalente en Décimale.
- ;**************************************************************
-
- mov esi,[hexString1]
- cmp byte ptr[esi],0 ; controle
- jne Sava
- invoke Savapa,addr Msg1
- ret
- Sava:
- call Otespace ; oter les espaces
- mov esi, hexString1
- invoke lnstr,hexString1 ;longueur chaine entrée
- .if eax > 16 ; + de 64 bits : pas possible
- jmp Sacolpa
- .elseif eax < 16
- mov edx,16 ; recherche du Nb d'octets manquants
- sub edx,eax ; pour faire 16
- mov ecx,eax
- add esi,eax ; placer esi en fin de Chaine
- dec esi
- mov edi,esi ; et edi = fin de chaine
- add edi,edx ; + Nb octets manquants
- std ; marche arrière
- @@: ; transfert de la chaine en commençant par la fin
- lodsb
- stosb
- dec ecx
- cmp ecx,0
- je @F
- jmp @B
- @@:
- .Repeat ; compléter a 16 octetes avec des 0
- mov byte ptr[edi],30h
- dec edi
- dec edx
- .Until edx == 0
- cld ; retour en marche avant
- .endif
- lea edi,NB1
- mov dword ptr[edi],0
- mov dword ptr[edi+4],0
- ;**************************************************************
- ; appel de la procedure qui transforme la chaine hexa en Nb
- ; 64 bits dans un QWORD.
- ;**************************************************************
- invoke HexToDq1,hexString1,addr NB1
- ;**************************************************************
- ; dqtoa transforme la valeur QWORD en une chaine décimale
- ; positive ou négative suivant la valeur du dernier parametre
- ;**************************************************************
- .if Signe == 1
- invoke dqtoa1,NB1,decString1,1
- .else
- invoke dqtoa1,NB1,decString1,0
- .endif
- ret
- Sacolpa:
- invoke Savapa,addr Msg2
- ret
-
- Convert1 endp
-
- ;******************************************
-
- VideBuff proc
-
- mov edi,offset monText2
- mov ecx,50
- xor eax,eax
- rep stosb
- ret
-
- VideBuff endp
-
- ;******************************************
-
- Multiplie proc ; Francs ==> Euros
-
- cmp byte ptr monText1[0],0
- jne SaVat
- invoke Savapa,addr Msg3
- ret
- SaVat:
- invoke StrToFloat, addr monText1,addr result
- fld result
- fmul Taux
- fadd Complement
- fstp result
- invoke Arrondi
- ret
-
- Multiplie endp
-
- ;******************************************
-
- Divise proc ; Euros ==> Francs
-
- cmp byte ptr monText1[0],0
- jne Savat
- invoke Savapa,addr Msg1
- ret
- Savat:
- invoke StrToFloat, addr monText1,addr result
- fld result
- fdiv Taux
- fadd Complement
- fstp result
- invoke Arrondi
- ret
-
- Divise endp
-
- ;**************************************************************
- ; procédure qui arrodi le résulat a 2 décimales, a la valeur
- ; supérieure ou inférieure suivant la valeur dela 3ème décimale
- ;**************************************************************
-
- Arrondi proc
- invoke FloatToStr2,result,offset resultat
- invoke InString,1,addr resultat,addr chaine
- mov Pospoint,eax
- .if Pospoint == 0
- invoke szCatStr,addr resultat,addr deuzero
- invoke lnstr,addr resultat
- invoke szLeft,addr resultat,addr monText2,eax
- jmp ctout
- .endif
- invoke lnstr,addr resultat
- sub eax, Pospoint
- mov long,eax
- add Pospoint,1
- .if long == 1
- invoke szCatStr,addr resultat,addr zero
- invoke szLeft,addr resultat,addr monText2,Pospoint
- .elseif long > 1
- invoke szLeft,addr resultat,addr monText2,Pospoint
- .endif
- ctout:
- ret
- Arrondi endp
-
- ;********************************
-
- Otespace proc
-
- @0:
- .if byte ptr[esi] != 0
- cmp byte ptr[esi],20h
- je @F
- inc esi
- jmp @0
- @@:
- push esi
- mov edi,esi
- inc esi
- @@:
- cmp byte ptr[edi],0
- je @1
- lodsb
- stosb
- jmp @B
- @1:
- pop esi
- jmp @0
- .endif
- ret
-
- Otespace endp
-
- ;******************************************
-
- Savapa proc Message
- mov esi,[Message]
- mov edi,offset monText2
- cld
- lp1:
- lodsb
- stosb
- test al,al
- jne lp1
- ret
- Savapa endp
-
- ;***************************************************
- ; Procédure qui transforme une chaine hexa en
- ; 1 QWORD de même valeur.
- ;***************************************************
-
- HexToDq1 proc str2 :DWORD,N1 :DWORD
-
- LOCAL cpt :DWORD
-
- mov edi,N1
- mov esi,str2
- @7:
- cmp byte ptr[esi],20h
- je @F
- cmp byte ptr[esi],0
- jne @8
- jmp @6
- @@:
- inc esi
- jmp @7
- @8:
- xor eax,eax
- xor ebx,ebx
- mov cpt,1
- add edi,7
- @0:
- mov ecx,4
- @1:
- lodsb
- cmp al,57
- jbe @2
- and al,0DFh
- sub al,37h
- jmp @3
- @2:
- cmp al,0
- je @6
- sub al,30h
- @3:
- shl al,4
- add ebx,eax
- lodsb
- cmp al,57
- jbe @4
- and al,0DFh
- sub al,37h
- jmp @5
- @4:
- sub al,30h
- @5:
- add ebx,eax
- mov byte ptr[edi],bl
- dec edi
- xor ebx,ebx
- loop @1
- dec cpt
- js @6
- .while byte ptr[esi]==20h
- inc esi
- .endw
- jmp @0
- @6:
- ret
-
- HexToDq1 endp
-
- ;******************************************
- dqtoa1 proc Nombrere:QWORD,buffer:DWORD,sens:DWORD
-
- ;***************************************************
- ; procedure qui transforme un QWORD en une chaine
- ; décimale lisible, représentant sa valeur.
- ;***************************************************
-
- pushad
- mov eax,sens
- mov signe,eax
- lea esi,Nombrere
- lea edi,Reste
- xor eax,eax
- mov [edi],eax
- mov [edi+4],eax
- mov ecx,64
- mov Cpt1,63
- mov eax,[esi]
- mov ebx,[esi+4]
- cmp signe,1
- jne @F
- not eax
- not ebx
- add eax,1
- adc ebx,0
- @@:
- push ecx
- mov ecx,[edi]
- mov edx,[edi+4]
- shl ebx,1
- adc ecx,0
- shl eax,1
- adc ebx,0
- mov [esi],eax
- mov [esi+4],ebx
- mov [edi],ecx
- push eax
- push ebx
- mov eax,540BE400h
- mov ebx,00000002h
- cmp edx,ebx
- ja @0
- jb @1
- cmp ecx,eax
- jb @1
- @0:
- sub ecx,eax
- sbb edx,ebx
- mov [edi],ecx
- mov [edi+4],edx
- mov Cpt,1
- jmp stop
- @1:
- mov Cpt,0
- stop:
- pop ebx
- pop eax
- dec Cpt1
- js yapu
- shl edx,1
- clc
- shl ecx,1
- adc edx,0
- mov [edi],ecx
- mov [edi+4],edx
- yapu:
- add eax,Cpt
- mov [esi],eax
- pop ecx
- loop @B
- mov eax,[edi]
- mov edx,[edi+4]
- mov ecx,10
- mov edi,buffer
- add edi,29
- @@:
- div ecx
- add dl,30h
- mov byte ptr[edi],dl
- dec edi
- xor dl,dl
- inc nbch
- cmp eax,0
- je @F
- jmp @B
- @@:
- mov eax,[esi]
- mov edx,[esi+4]
- cmp eax,0 ; eax nul : voir edx
- jne @2 ; non nul : traiter
- cmp edx,0 ; edx également nul
- je @F ; passer au formatage.
- @2:
- ; si la division par 10 000 000 000 tombe sur
- ; un ou des zéro, ils n'apparaissent pas,
- ; il faut donc les restituer mais
- ; uniquement si il ya qq. chose à placer devant
- cmp nbch,10
- je @3
- mov byte ptr[edi],30h
- dec edi
- inc nbch
- jmp @2
- @3:
- div ecx
- add dl,30h
- mov byte ptr[edi],dl
- dec edi
- xor dl,dl
- inc nbch
- cmp eax,0
- je @F
- jmp @3
- @@:
- inc edi
- mov esi,edi
- @@:
- cmp byte ptr[esi],30h
- jne @F
- inc esi
- jmp @B
- @@:
- mov edi,buffer
- cmp signe,1
- jne @F
- mov byte ptr[edi],2Dh
- inc edi
- mov byte ptr[edi],20h
- inc edi
- @@:
- mov eax,nbch
- mov ecx,3
- div ecx
- cmp edx,0
- je ici
- mov ecx,edx
-
- @@:
- cmp byte ptr [esi],0
- je stp
- movsb
- loop @B
- mov byte ptr [edi],20h
- inc edi
- ici:
- mov ecx,3
- @@:
- cmp byte ptr [esi],0
- je stp
- movsb
- loop @B
- mov byte ptr [edi],20h
- inc edi
- jmp ici
- stp:
- mov byte ptr [edi],0
- mov nbch,0
- popad
- ret
-
- dqtoa1 endp
-
- ;*****************************************************
- ; procedure qui change un Nb QWORD en une chaine hexa
- ; de même valeur, affichable et lisible.
- ;*****************************************************
- DqToHex1 proc uses eax ebx ecx N1 :QWORD,Buff :DWORD,
- Sens:DWORD
-
- LOCAL cpt : Byte
- LOCAL Signes :DWORD
- LOCAL retenue:DWORD
-
- mov eax,Sens
- mov Signes,eax
- mov cpt,1
- xor eax,eax
- mov retenue,eax
- lea esi,N1
- mov edi,Buff
- add edi,16
- cmp Signes,1
- jne @F
- mov ebx,[esi]
- not ebx
- add ebx,1
- adc retenue,0
- jmp @0
- @@:
- mov ebx,[esi]
- @0:
- mov ecx,7
- @1:
- mov al,bl
- and al,0Fh
- add al,48
- cmp al,58
- jb @2
- add al,7
- @2:
- mov [edi],al
- shr ebx,4
- dec edi
- dec ecx
- jns @1
- dec cpt
- js @3
- mov byte ptr[edi],20h
- dec edi
- cmp signe,1
- jne @F
- mov ebx,[esi+4]
- not ebx
- add ebx,retenue
- jmp @0
- @@:
- mov ebx,[esi+4]
- jmp @0
- @3:
- ret
-
- DqToHex1 endp
-
- ;*********************************************
-
- atodq1 proc uses eax ebx ecx edx Str1:DWORD,Nb1:DWORD
- LOCAL Negat :DWORD
-
- ;*****************************************************
- ; but : transformer une chaine décimale en 1 QWORD
- ; de valeur équivalente.
- ;*****************************************************
- mov esi,Str1
- xor edi,edi
- xor eax,eax
- mov Negat,eax
- xor edx,edx
- xor ebx,ebx
- mov ecx,10
- cmp byte ptr[esi],2Dh
- jne @0
- inc esi
- mov Negat,1
- @0:
- cmp byte ptr[esi+1],0
- je @3
- mov bl,[esi]
- sub bl,30h
- add eax,ebx
- inc esi
- mul ecx
- cmp edi,0
- jne @2
- cmp edx,0
- jne @1
- jmp @0
- @1:
- cmp edi,0
- jne @2
- mov edi,edx
- jmp @0
- @2:
- xchg eax,ebx
- mov eax,edi
- push edx
- xor edx,edx
- mul ecx
- pop edx
- add edx,eax
- mov edi,edx
- xor eax,eax
- xchg eax,ebx
- jmp @0
- @3:
- mov bl,[esi]
- sub bl,30h
- add eax,ebx
- jnc @F
- adc edx,0
- @@:
- cmp Negat,1
- jne @4
- not eax
- not edx
- add eax,1
- adc edx,0
- @4:
- mov esi,Nb1
- mov [esi],eax
- mov [esi+4],edx
- ret
-
- atodq1 endp
-
- ;******************************************
-
- end start
- ;******************************************
-
- ;Fichier ressource de Conversions.asm
-
- #include "\masm32\include\resource.h"
- 500 ICON DISCARDABLE "icon4.ico"
-
- 18 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0008.BMP"
- 19 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0009.BMP"
- 20 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0010.BMP"
- 21 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0011.BMP"
- 22 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0012.BMP"
- 23 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0013.BMP"
- 24 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "file0014.BMP"
- 25 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "file0015.BMP"
-
- 101 DIALOGEX 10,10,200,140,0
- STYLE DS_MODALFRAME | 0x0004 | DS_CENTER | WS_CAPTION |
- WS_SYSMENU | WS_VISIBLE | WS_POPUP
- CAPTION " Conversions"
- FONT 8,"Ms Serif",700,0
-
- BEGIN
- CTEXT "Programme de conversion :\nnombres décimaux en valeurs hexadécimales,\nFrancs en Euros et Vice-Versa\n\nPour quitter,cliquer sur la croix, en haut,à droite", -1,10,10,180,48, SS_LEFT | WS_BORDER | 0x00001000,0,0
- END
-
- 102 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 0,0,161,105
-
- STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX |
- WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
- CAPTION " Conversion Déci/Hexa"
- FONT 8, "Courier New",0,1
-
- BEGIN
- EDITTEXT 3000,42,50,108,12,ES_AUTOHSCROLL | ES_LEFT
- EDITTEXT 3001,42,63,108,12,ES_AUTOHSCROLL | ES_LEFT
- DEFPUSHBUTTON "&OK",3002,10,85,55,14,0, ,0
- PUSHBUTTON "&Retour",3004,95,85,55,14,0, ,0
- CTEXT "Les nombres négatif doivent être précédés\n du signe moins (-)",-1,5,5,150,30 ,WS_BORDER | 0x000010000,0,0
- LTEXT "Déci :",301,10,51,27,8
- LTEXT "Hexa :",300,10,65,27,8
- END
-
- ;*******************************************************
- 103 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 0,0,185,105
-
- STYLE 0x0004 | DS_CENTER | WS_CAPTION |WS_MINIMIZEBOX |
- WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
- CAPTION " Conversion Hexa/Déci"
- FONT 8, "Courier New",0,1
- BEGIN
- EDITTEXT 3000,42,50,133,12,ES_AUTOHSCROLL | ES_LEFT
- EDITTEXT 3001,42,63,133,12,ES_AUTOHSCROLL | ES_LEFT
- LTEXT "Hexa :",301,10,51,27,8
- LTEXT "Déci :",300,10,65,27,8
- CTEXT "Résultat : Non Signé par défaut.\n64 bits maximum soit 8 octets, séparés ou\n non par un ou plusieurs espaces.",30,5,5,175,35,WS_BORDER | 0x000010000
- DEFPUSHBUTTON "&OK",3002,5,85,41,13
- PUSHBUTTON "&Signé",3005,50,85,41,13
- PUSHBUTTON "&Non Signé",3006,95,85,41,13 ; 2/2
- PUSHBUTTON "&Retour",3004,140,85,41,13
- END
-
- ;*******************************************************
-
-
- 104 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 10, 10, 130, 57
- STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
- WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
- CAPTION "Conversion Francs/Euros"
- FONT 8, "Courier New",0,1
-
- BEGIN
- EDITTEXT 3000, 35,5,95,12, ES_AUTOHSCROLL | ES_LEFT
- EDITTEXT 3001, 35,20,95,12, ES_AUTOHSCROLL | ES_LEFT
- DEFPUSHBUTTON "&Résultat", 3002, 5,39,40,13
- PUSHBUTTON "R&etour", 3004, 85,39,40,13
- LTEXT "Francs:",302,5,7,27,8
- LTEXT "Euros:",303,5,22,27,8
-
- END
-
- ;*******************************************************
-
- 105 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 10, 10, 130, 57
- STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
- WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
- CAPTION "Conversion Euros/Francs"
- FONT 8, "Courier New",0,1
-
- BEGIN
- EDITTEXT IDC_EDIT1, 35,5,95,12, ES_AUTOHSCROLL | ES_LEFT
- EDITTEXT IDC_EDIT2, 35,20,95,12, ES_AUTOHSCROLL | ES_LEFT
- DEFPUSHBUTTON "&Résultat", 3002, 5,39,40,13
- PUSHBUTTON "R&etour", 3004, 85,39,40,13
- LTEXT "Euros:",302,5,7,27,8
- LTEXT "Francs:",303,5,22,27,8
-
- END
-
- ;*******************************************************
-
.386
.model flat,stdcall
option casemap:none
;**********************************
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\gdi32.lib
;********************************
; MACROS
;********************************
szText MACRO Name, Text:VARARG
LOCAL lbl
jmp lbl
Name db Text,0
lbl:
ENDM
;***********************************
; PROTO
;***********************************
BmpProc proto :DWORD, :DWORD, :DWORD, :DWORD
BmpProc1 proto :DWORD, :DWORD, :DWORD, :DWORD
BmpProc2 proto :DWORD, :DWORD, :DWORD, :DWORD
BmpProc3 proto :DWORD, :DWORD, :DWORD, :DWORD
BmpButton proto :DWORD, :DWORD, :DWORD, :DWORD,:DWORD,:DWORD
DlgProc proto :DWORD, :DWORD, :DWORD, :DWORD
DlgProc1 proto :DWORD, :DWORD, :DWORD, :DWORD
DlgProc2 proto :DWORD, :DWORD, :DWORD, :DWORD
Ed1Proc1 PROTO :DWORD,:DWORD,: DWORD,:DWORD
Ed1Proc2 PROTO :DWORD,:DWORD,: DWORD,:DWORD
Convert PROTO :LPSTR,:DWORD
Convert1 PROTO :LPSTR,:DWORD
Savapa PROTO : DWORD
Multiplie PROTO
Divise PROTO
Arrondi PROTO
DqToHex1 PROTO :QWORD, :DWORD, :DWORD
atodq1 PROTO :DWORD, :DWORD
HexToDq1 PROTO :DWORD, :DWORD
dqtoa1 PROTO :QWORD, :DWORD, :DWORD
.Const
IDC_EDIT1 equ 3000
IDC_EDIT2 equ 3001
IDC_OK equ 3002
IDC_EXIT equ 3004
IDC_SIGNE equ 3005
IDC_NSIGNE equ 3006
; #######################################################
.data?
hInstance dd ?
hWND dd ?
hIcon dd ?
hBmp1 dd ?
hBmp2 dd ?
hBmp3 dd ?
hBmp4 dd ?
hBmp5 dd ?
hBmp6 dd ?
hBmp7 dd ?
hBmp8 dd ?
hBtn1 dd ?
hBtn2 dd ?
hBtn3 dd ?
hBtn4 dd ?
lpfnProc dd ?
lpfnEd1Proc dd ?
Drapo dd ?
hEdit1 dd ?
hEdit2 dd ?
hTxt1 dd ?
Signe dd ?
monText1 db 50 dup (?)
monText2 db 50 dup (?)
resultat db 18 dup (?)
Pospoint dd ?
long dd ?
result dq ?
Reste dq ?
nbch dd ?
Cpt dd ?
Cpt1 dd ?
signe dd ?
; **********************************************
.data
Msg1 db 'Y a Rien!!!!!!',0
Msg2 db "Trop d'octets !!!! : 16 maximum.",0
Msg3 db 'Fodrait kèke chose!!!',0
Taux REAL8 6.55957
Complement REAL8 0.005
chaine db ".",0
deuzero db ".00",0
zero db "0",0
;*************************************
.code
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
encore:
invoke DialogBoxParam,hInstance,101,NULL,addr DlgProc,NULL
invoke ExitProcess,NULL
;**************************************************************
DlgProc proc hWin :HWND,uMsg :UINT,wParam :DWORD,lParam :DWORD
mov eax,hWin
mov hWND,eax
.IF uMsg == WM_INITDIALOG
call ChargeBmp
.ELSEIF uMsg == WM_COMMAND
.if wParam == 400 ; bouton Deci=>hexa
mov Drapo,0 ; bascule pour la Procédure approprriée
;**************************************************************
;Fermeture de la boite de Dialogue principale et création de la
; 2ème boite de dialogue.
;**************************************************************
invoke EndDialog,hWin,NULL
invoke DialogBoxParam,hInstance,102,NULL,addr DlgProc1,0
.elseif wParam == 401 ; bouton Hexa=>Deci
mov Drapo,1
invoke EndDialog,hWin,NULL
invoke DialogBoxParam,hInstance,103,NULL,addr DlgProc1,0
.elseif wParam == 402 ;bouton Francs=>Euros
mov Drapo,2
invoke EndDialog,hWin,NULL
invoke DialogBoxParam,hInstance,104,NULL,addr DlgProc2,0
.elseif wParam == 403 ; bouton Euros=>Francs
mov Drapo,3
invoke EndDialog,hWin,NULL
invoke DialogBoxParam,hInstance,105,NULL,addr DlgProc2,0
.endif
.ELSEIF uMsg == WM_CLOSE
jmp ExitProcess
.ENDIF
@@:
xor eax,eax
ret
DlgProc endp
; **********************************************
DlgProc1 proc hWin :HWND,uMsg :UINT,wParam :DWORD,lParam :DWORD
LOCAL Ps : PAINTSTRUCT
.IF uMsg == WM_INITDIALOG
;**************************************************************
; Récupération des handles des 2 éditeurs et du texte associé.
; Placer le focus dans l'éditeur du haut
; Sélectionner la procédure associée à hEdit1.
;**************************************************************
invoke GetDlgItem,hWin,IDC_EDIT1
mov hEdit1,eax
invoke SetFocus,hEdit1
invoke GetDlgItem,hWin,IDC_EDIT2
mov hEdit2,eax
invoke GetDlgItem,hWin,301
mov hTxt1,eax
invoke SetWindowLong,hEdit1,GWL_WNDPROC,Ed1Proc1
mov lpfnEd1Proc,eax
.ELSEIF uMsg==WM_CLOSE
invoke ExitProcess,NULL
.ELSEIF uMsg==WM_PAINT
;**************************************************************
;Trace un cadre autour des éditeurs.
; Le cadre autour du texte est spécifié dans le fichier.rc
;**************************************************************
invoke BeginPaint,hWin,addr Ps
invoke FrameGrp,hTxt1,hEdit2,6,2,0
invoke EndPaint,hWin,addr Ps
.ELSEIF uMsg == WM_COMMAND
.if wParam == IDC_OK
;**************************************************************
; Remettre le focus en place, vider le buffer qui recevra la
; valeur à convertir,appeler la procédure chargée du traitement
; en fonction de la valeur de la bascule et enfin placer le
; résultat dans hEdit2.
;**************************************************************
invoke SetFocus,hEdit1
call VideBuff
invoke GetDlgItemText,hWin,IDC_EDIT1,addr monText1,50
.if Drapo == 0
invoke Convert,addr monText1,addr monText2
.elseif Drapo == 1
invoke Convert1,addr monText1,addr monText2
.endif
invoke SetDlgItemText,hWin,IDC_EDIT2,addr monText2
.elseif wParam == IDC_EXIT
;**************************************************************
; terminer proprement en nettoyant la pile et relancer
; la boite de dialogue principale.
;**************************************************************
invoke EndDialog,hWin,NULL
leave
sub esp,10h
jmp encore
;**************************************************************
; placer une bascule à 1 pour une valeur négative ou à 0 pour
; une valeur positive
;**************************************************************
.elseif wParam==IDC_SIGNE
mov Signe,1
invoke SetFocus,hEdit1
.elseif wParam==IDC_NSIGNE
mov Signe,0
invoke SetFocus,hEdit1
.endif
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc1 endp
;*****************************************
DlgProc2 proc hwnd:HWND, UMsg:UINT, WParam:WPARAM, LParam:LPARAM
LOCAL Ps : PAINTSTRUCT
;**************************************************************
; Procédure utilisée pour les conversions Franc => Euros
; et Euros => Francs.
; Fonctionnement identique à DialogProc1, sauf, bien entendu,
; que les procédures de traitement appelées sont différentes.
;**************************************************************
.if UMsg==WM_INITDIALOG
invoke GetDlgItem, hwnd,IDC_EDIT1
mov hEdit1,eax
invoke SetFocus,hEdit1
invoke SetWindowLong,hEdit1,GWL_WNDPROC,Ed1Proc2
mov lpfnEd1Proc, eax
.elseif UMsg==WM_CLOSE
invoke ExitProcess,NULL
.ELSEIF UMsg==WM_PAINT
invoke BeginPaint,hwnd,addr Ps
invoke FrameGrp,hTxt1,hEdit2,6,2,0
invoke EndPaint,hwnd,addr Ps
.elseif UMsg==WM_COMMAND
.if WParam==IDC_OK
invoke SetFocus,hEdit1
call VideBuff
invoke GetDlgItemText,hwnd,IDC_EDIT1,ADDR monText1,50
.if Drapo == 2
invoke Divise
.elseif Drapo == 3
invoke Multiplie
.endif
invoke SetDlgItemText,hwnd,IDC_EDIT2,ADDR monText2
.elseif WParam==IDC_EXIT
invoke EndDialog, hwnd,NULL
leave
sub esp,10h
jmp encore
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc2 endp
;*****************************************
Ed1Proc2 proc hCtl: DWORD,
uMsg1: DWORD,
wParam1: DWORD,
lParam1: DWORD
;**************************************************************
;Cette procédure traite les entrées clavier dans l'éditeur N°1
; n'accepte que les chiffres 0 à 9 inclus et la virgule ou le
; point.Remplace la virgule éventuelle par le point.
; en fin de traitement, renvoie à la procédure normale.
;**************************************************************
.if uMsg1 == WM_CHAR
.if wParam1 < "0"
.if wParam1 == ","
mov wParam1,"."
.endif
.if wParam1 == "."
jmp accept
.endif
xor eax,eax
ret
.endif
.if wParam1 > "9"
xor eax,eax
ret
.endif
.endif
accept:
invoke CallWindowProc, lpfnEd1Proc, hCtl, uMsg1,wParam1,lParam1
ret
Ed1Proc2 endp
;*****************************************
Ed1Proc1 proc hCtl: DWORD,
uMsg1: DWORD,
wParam1: DWORD,
lParam1: DWORD
;**************************************************************
; traite les entrées clavier pour les conversions Hexa => Deci
; et Deci => Hexa. N'accepte que : retour arrière,espace,chiffres
; 0,1,2,3,4,5,6,7,8,9 si bascule Drapo = 0. Si bascule =1
; accepte en plus A,B,C,D;E,F ou a,b,c,d,e,f
;**************************************************************
.if uMsg1 == WM_CHAR
.if wParam1 < "0"
.if wParam1 == 8
jmp accept
.elseif wParam1 == 20h
jmp accept
.elseif wParam1 == 2Dh
jmp accept
.else
xor eax,eax
ret
.endif
.elseif wParam1 > "9"
.if Drapo == 1
.if wParam1 >= 'A' && wParam1 <= 'F'
jmp accept
.elseif wParam1 >= 'a' && wParam1 <= 'f'
jmp accept
.endif
.endif
xor eax,eax
ret
.endif
.endif
accept:
invoke CallWindowProc, lpfnEd1Proc, hCtl, uMsg1,wParam1,
lParam1
ret
Ed1Proc1 endp
;***************************
BmpButton proc hParent:DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
;**************************************************************
; réation des boutons
;**************************************************************
szText BmpBtnCl,"BUTTON"
szText blnk2,0
invoke CreateWindowEx,0,addr BmpBtnCl,addr blnk2,WS_CHILD or WS_VISIBLE or \
BS_BITMAP,a,b,wd,ht,hParent,ID,hInstance,NULL
ret
BmpButton endp
;**************************************************************
; les 4 procédures suivantes seront associées aux 4 boutons
; de la boite de dialogeue pour gérer leur apparence suivant
; que le bouton de la souris est enfoncé ou relaché.
;**************************************************************
BmpProc proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg == WM_LBUTTONDOWN
invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp2
.elseif uMsg == WM_LBUTTONUP
invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp1
.endif
invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
ret
BmpProc endp
;*****************************************
BmpProc1 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg == WM_LBUTTONDOWN
invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp4
.elseif uMsg == WM_LBUTTONUP
invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp3
.endif
invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
ret
BmpProc1 endp
;*****************************************
BmpProc2 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg == WM_LBUTTONDOWN
invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp6
.elseif uMsg == WM_LBUTTONUP
invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp5
.endif
invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
ret
BmpProc2 endp
;*****************************************
BmpProc3 proc hCtl:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
.if uMsg == WM_LBUTTONDOWN
invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp8
.elseif uMsg == WM_LBUTTONUP
invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp7
.endif
invoke CallWindowProc,lpfnProc,hCtl,uMsg,wParam,lParam
ret
BmpProc3 endp
;**************************************************************
; Cette procédure charge les bitmaps, créé les boutons et y
; place les images. Elle sélectionne également les procédures
; propres à chaque bouton.
;**************************************************************
ChargeBmp proc
invoke LoadBitmap,hInstance,18
mov hBmp1,eax
invoke LoadBitmap,hInstance,19
mov hBmp2,eax
invoke LoadBitmap,hInstance,20
mov hBmp3,eax
invoke LoadBitmap,hInstance,21
mov hBmp4,eax
invoke LoadBitmap,hInstance,22
mov hBmp5,eax
invoke LoadBitmap,hInstance,23
mov hBmp6,eax
invoke LoadBitmap,hInstance,24
mov hBmp7,eax
invoke LoadBitmap,hInstance,25
mov hBmp8,eax
invoke BmpButton,hWND,20,110,100,40,400
mov hBtn1,eax
invoke SendMessage,hBtn1,BM_SETIMAGE,0,hBmp1
invoke SetWindowLong,hBtn1,GWL_WNDPROC,BmpProc
mov lpfnProc,eax
invoke BmpButton,hWND,180,110,100,40,401
mov hBtn2,eax
invoke SendMessage,hBtn2,BM_SETIMAGE,0,hBmp3
invoke SetWindowLong,hBtn2,GWL_WNDPROC,BmpProc1
mov lpfnProc,eax
invoke BmpButton,hWND,20,165,100,40,402
mov hBtn3,eax
invoke SendMessage,hBtn3,BM_SETIMAGE,0,hBmp5
invoke SetWindowLong,hBtn3,GWL_WNDPROC,BmpProc2
mov lpfnProc,eax
invoke BmpButton,hWND,180,165,100,40,403
mov hBtn4,eax
invoke SendMessage,hBtn4,BM_SETIMAGE,0,hBmp7
invoke SetWindowLong,hBtn4,GWL_WNDPROC,BmpProc3
mov lpfnProc,eax
ret
ChargeBmp endp
;*****************************************
Convert proc decString:LPSTR, hexString:LPSTR
LOCAL NB1 :QWORD
;**************************************************************
; Procédure qui transforme un nombre décimal en un nombre Hexa
; signé ou non signé.
;**************************************************************
mov esi,decString
cmp byte ptr[esi],0 ; vérifie qu'on a entré un nombre.
jne SaVa
invoke Savapa,addr Msg3
ret
SaVa:
call Otespace ; suppression de tous les espaces éventuels
;**************************************************************
; transformation de la chaîne entrée en un nombre 64 bits
;**************************************************************
invoke atodq1,decString,addr NB1
;**************************************************************
;Appel de la proc qui va trasformer le nombre 64 bit en une
; chaine Hexa. Valeur négative ou positive suivant la valeur
; du dernier parametre de l'appel.
;**************************************************************
.if Signe == 1
invoke DqToHex1,NB1,hexString,1
.else
invoke DqToHex1,NB1,hexString,0
.endif
ret
Convert endp
;******************************************
Convert1 proc hexString1 :DWORD,decString1 :DWORD
LOCAL NB1 :QWORD
;**************************************************************
; Cette proc convertit une chaine Hexa jusqu'à 64 bits en sa
; valeur (positive ou négative) équivalente en Décimale.
;**************************************************************
mov esi,[hexString1]
cmp byte ptr[esi],0 ; controle
jne Sava
invoke Savapa,addr Msg1
ret
Sava:
call Otespace ; oter les espaces
mov esi, hexString1
invoke lnstr,hexString1 ;longueur chaine entrée
.if eax > 16 ; + de 64 bits : pas possible
jmp Sacolpa
.elseif eax < 16
mov edx,16 ; recherche du Nb d'octets manquants
sub edx,eax ; pour faire 16
mov ecx,eax
add esi,eax ; placer esi en fin de Chaine
dec esi
mov edi,esi ; et edi = fin de chaine
add edi,edx ; + Nb octets manquants
std ; marche arrière
@@: ; transfert de la chaine en commençant par la fin
lodsb
stosb
dec ecx
cmp ecx,0
je @F
jmp @B
@@:
.Repeat ; compléter a 16 octetes avec des 0
mov byte ptr[edi],30h
dec edi
dec edx
.Until edx == 0
cld ; retour en marche avant
.endif
lea edi,NB1
mov dword ptr[edi],0
mov dword ptr[edi+4],0
;**************************************************************
; appel de la procedure qui transforme la chaine hexa en Nb
; 64 bits dans un QWORD.
;**************************************************************
invoke HexToDq1,hexString1,addr NB1
;**************************************************************
; dqtoa transforme la valeur QWORD en une chaine décimale
; positive ou négative suivant la valeur du dernier parametre
;**************************************************************
.if Signe == 1
invoke dqtoa1,NB1,decString1,1
.else
invoke dqtoa1,NB1,decString1,0
.endif
ret
Sacolpa:
invoke Savapa,addr Msg2
ret
Convert1 endp
;******************************************
VideBuff proc
mov edi,offset monText2
mov ecx,50
xor eax,eax
rep stosb
ret
VideBuff endp
;******************************************
Multiplie proc ; Francs ==> Euros
cmp byte ptr monText1[0],0
jne SaVat
invoke Savapa,addr Msg3
ret
SaVat:
invoke StrToFloat, addr monText1,addr result
fld result
fmul Taux
fadd Complement
fstp result
invoke Arrondi
ret
Multiplie endp
;******************************************
Divise proc ; Euros ==> Francs
cmp byte ptr monText1[0],0
jne Savat
invoke Savapa,addr Msg1
ret
Savat:
invoke StrToFloat, addr monText1,addr result
fld result
fdiv Taux
fadd Complement
fstp result
invoke Arrondi
ret
Divise endp
;**************************************************************
; procédure qui arrodi le résulat a 2 décimales, a la valeur
; supérieure ou inférieure suivant la valeur dela 3ème décimale
;**************************************************************
Arrondi proc
invoke FloatToStr2,result,offset resultat
invoke InString,1,addr resultat,addr chaine
mov Pospoint,eax
.if Pospoint == 0
invoke szCatStr,addr resultat,addr deuzero
invoke lnstr,addr resultat
invoke szLeft,addr resultat,addr monText2,eax
jmp ctout
.endif
invoke lnstr,addr resultat
sub eax, Pospoint
mov long,eax
add Pospoint,1
.if long == 1
invoke szCatStr,addr resultat,addr zero
invoke szLeft,addr resultat,addr monText2,Pospoint
.elseif long > 1
invoke szLeft,addr resultat,addr monText2,Pospoint
.endif
ctout:
ret
Arrondi endp
;********************************
Otespace proc
@0:
.if byte ptr[esi] != 0
cmp byte ptr[esi],20h
je @F
inc esi
jmp @0
@@:
push esi
mov edi,esi
inc esi
@@:
cmp byte ptr[edi],0
je @1
lodsb
stosb
jmp @B
@1:
pop esi
jmp @0
.endif
ret
Otespace endp
;******************************************
Savapa proc Message
mov esi,[Message]
mov edi,offset monText2
cld
lp1:
lodsb
stosb
test al,al
jne lp1
ret
Savapa endp
;***************************************************
; Procédure qui transforme une chaine hexa en
; 1 QWORD de même valeur.
;***************************************************
HexToDq1 proc str2 :DWORD,N1 :DWORD
LOCAL cpt :DWORD
mov edi,N1
mov esi,str2
@7:
cmp byte ptr[esi],20h
je @F
cmp byte ptr[esi],0
jne @8
jmp @6
@@:
inc esi
jmp @7
@8:
xor eax,eax
xor ebx,ebx
mov cpt,1
add edi,7
@0:
mov ecx,4
@1:
lodsb
cmp al,57
jbe @2
and al,0DFh
sub al,37h
jmp @3
@2:
cmp al,0
je @6
sub al,30h
@3:
shl al,4
add ebx,eax
lodsb
cmp al,57
jbe @4
and al,0DFh
sub al,37h
jmp @5
@4:
sub al,30h
@5:
add ebx,eax
mov byte ptr[edi],bl
dec edi
xor ebx,ebx
loop @1
dec cpt
js @6
.while byte ptr[esi]==20h
inc esi
.endw
jmp @0
@6:
ret
HexToDq1 endp
;******************************************
dqtoa1 proc Nombrere:QWORD,buffer:DWORD,sens:DWORD
;***************************************************
; procedure qui transforme un QWORD en une chaine
; décimale lisible, représentant sa valeur.
;***************************************************
pushad
mov eax,sens
mov signe,eax
lea esi,Nombrere
lea edi,Reste
xor eax,eax
mov [edi],eax
mov [edi+4],eax
mov ecx,64
mov Cpt1,63
mov eax,[esi]
mov ebx,[esi+4]
cmp signe,1
jne @F
not eax
not ebx
add eax,1
adc ebx,0
@@:
push ecx
mov ecx,[edi]
mov edx,[edi+4]
shl ebx,1
adc ecx,0
shl eax,1
adc ebx,0
mov [esi],eax
mov [esi+4],ebx
mov [edi],ecx
push eax
push ebx
mov eax,540BE400h
mov ebx,00000002h
cmp edx,ebx
ja @0
jb @1
cmp ecx,eax
jb @1
@0:
sub ecx,eax
sbb edx,ebx
mov [edi],ecx
mov [edi+4],edx
mov Cpt,1
jmp stop
@1:
mov Cpt,0
stop:
pop ebx
pop eax
dec Cpt1
js yapu
shl edx,1
clc
shl ecx,1
adc edx,0
mov [edi],ecx
mov [edi+4],edx
yapu:
add eax,Cpt
mov [esi],eax
pop ecx
loop @B
mov eax,[edi]
mov edx,[edi+4]
mov ecx,10
mov edi,buffer
add edi,29
@@:
div ecx
add dl,30h
mov byte ptr[edi],dl
dec edi
xor dl,dl
inc nbch
cmp eax,0
je @F
jmp @B
@@:
mov eax,[esi]
mov edx,[esi+4]
cmp eax,0 ; eax nul : voir edx
jne @2 ; non nul : traiter
cmp edx,0 ; edx également nul
je @F ; passer au formatage.
@2:
; si la division par 10 000 000 000 tombe sur
; un ou des zéro, ils n'apparaissent pas,
; il faut donc les restituer mais
; uniquement si il ya qq. chose à placer devant
cmp nbch,10
je @3
mov byte ptr[edi],30h
dec edi
inc nbch
jmp @2
@3:
div ecx
add dl,30h
mov byte ptr[edi],dl
dec edi
xor dl,dl
inc nbch
cmp eax,0
je @F
jmp @3
@@:
inc edi
mov esi,edi
@@:
cmp byte ptr[esi],30h
jne @F
inc esi
jmp @B
@@:
mov edi,buffer
cmp signe,1
jne @F
mov byte ptr[edi],2Dh
inc edi
mov byte ptr[edi],20h
inc edi
@@:
mov eax,nbch
mov ecx,3
div ecx
cmp edx,0
je ici
mov ecx,edx
@@:
cmp byte ptr [esi],0
je stp
movsb
loop @B
mov byte ptr [edi],20h
inc edi
ici:
mov ecx,3
@@:
cmp byte ptr [esi],0
je stp
movsb
loop @B
mov byte ptr [edi],20h
inc edi
jmp ici
stp:
mov byte ptr [edi],0
mov nbch,0
popad
ret
dqtoa1 endp
;*****************************************************
; procedure qui change un Nb QWORD en une chaine hexa
; de même valeur, affichable et lisible.
;*****************************************************
DqToHex1 proc uses eax ebx ecx N1 :QWORD,Buff :DWORD,
Sens:DWORD
LOCAL cpt : Byte
LOCAL Signes :DWORD
LOCAL retenue:DWORD
mov eax,Sens
mov Signes,eax
mov cpt,1
xor eax,eax
mov retenue,eax
lea esi,N1
mov edi,Buff
add edi,16
cmp Signes,1
jne @F
mov ebx,[esi]
not ebx
add ebx,1
adc retenue,0
jmp @0
@@:
mov ebx,[esi]
@0:
mov ecx,7
@1:
mov al,bl
and al,0Fh
add al,48
cmp al,58
jb @2
add al,7
@2:
mov [edi],al
shr ebx,4
dec edi
dec ecx
jns @1
dec cpt
js @3
mov byte ptr[edi],20h
dec edi
cmp signe,1
jne @F
mov ebx,[esi+4]
not ebx
add ebx,retenue
jmp @0
@@:
mov ebx,[esi+4]
jmp @0
@3:
ret
DqToHex1 endp
;*********************************************
atodq1 proc uses eax ebx ecx edx Str1:DWORD,Nb1:DWORD
LOCAL Negat :DWORD
;*****************************************************
; but : transformer une chaine décimale en 1 QWORD
; de valeur équivalente.
;*****************************************************
mov esi,Str1
xor edi,edi
xor eax,eax
mov Negat,eax
xor edx,edx
xor ebx,ebx
mov ecx,10
cmp byte ptr[esi],2Dh
jne @0
inc esi
mov Negat,1
@0:
cmp byte ptr[esi+1],0
je @3
mov bl,[esi]
sub bl,30h
add eax,ebx
inc esi
mul ecx
cmp edi,0
jne @2
cmp edx,0
jne @1
jmp @0
@1:
cmp edi,0
jne @2
mov edi,edx
jmp @0
@2:
xchg eax,ebx
mov eax,edi
push edx
xor edx,edx
mul ecx
pop edx
add edx,eax
mov edi,edx
xor eax,eax
xchg eax,ebx
jmp @0
@3:
mov bl,[esi]
sub bl,30h
add eax,ebx
jnc @F
adc edx,0
@@:
cmp Negat,1
jne @4
not eax
not edx
add eax,1
adc edx,0
@4:
mov esi,Nb1
mov [esi],eax
mov [esi+4],edx
ret
atodq1 endp
;******************************************
end start
;******************************************
;Fichier ressource de Conversions.asm
#include "\masm32\include\resource.h"
500 ICON DISCARDABLE "icon4.ico"
18 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0008.BMP"
19 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0009.BMP"
20 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0010.BMP"
21 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0011.BMP"
22 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0012.BMP"
23 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Bitmaps\file0013.BMP"
24 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "file0014.BMP"
25 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "file0015.BMP"
101 DIALOGEX 10,10,200,140,0
STYLE DS_MODALFRAME | 0x0004 | DS_CENTER | WS_CAPTION |
WS_SYSMENU | WS_VISIBLE | WS_POPUP
CAPTION " Conversions"
FONT 8,"Ms Serif",700,0
BEGIN
CTEXT "Programme de conversion :\nnombres décimaux en valeurs hexadécimales,\nFrancs en Euros et Vice-Versa\n\nPour quitter,cliquer sur la croix, en haut,à droite", -1,10,10,180,48, SS_LEFT | WS_BORDER | 0x00001000,0,0
END
102 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 0,0,161,105
STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION " Conversion Déci/Hexa"
FONT 8, "Courier New",0,1
BEGIN
EDITTEXT 3000,42,50,108,12,ES_AUTOHSCROLL | ES_LEFT
EDITTEXT 3001,42,63,108,12,ES_AUTOHSCROLL | ES_LEFT
DEFPUSHBUTTON "&OK",3002,10,85,55,14,0, ,0
PUSHBUTTON "&Retour",3004,95,85,55,14,0, ,0
CTEXT "Les nombres négatif doivent être précédés\n du signe moins (-)",-1,5,5,150,30 ,WS_BORDER | 0x000010000,0,0
LTEXT "Déci :",301,10,51,27,8
LTEXT "Hexa :",300,10,65,27,8
END
;*******************************************************
103 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 0,0,185,105
STYLE 0x0004 | DS_CENTER | WS_CAPTION |WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION " Conversion Hexa/Déci"
FONT 8, "Courier New",0,1
BEGIN
EDITTEXT 3000,42,50,133,12,ES_AUTOHSCROLL | ES_LEFT
EDITTEXT 3001,42,63,133,12,ES_AUTOHSCROLL | ES_LEFT
LTEXT "Hexa :",301,10,51,27,8
LTEXT "Déci :",300,10,65,27,8
CTEXT "Résultat : Non Signé par défaut.\n64 bits maximum soit 8 octets, séparés ou\n non par un ou plusieurs espaces.",30,5,5,175,35,WS_BORDER | 0x000010000
DEFPUSHBUTTON "&OK",3002,5,85,41,13
PUSHBUTTON "&Signé",3005,50,85,41,13
PUSHBUTTON "&Non Signé",3006,95,85,41,13 ; 2/2
PUSHBUTTON "&Retour",3004,140,85,41,13
END
;*******************************************************
104 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 10, 10, 130, 57
STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION "Conversion Francs/Euros"
FONT 8, "Courier New",0,1
BEGIN
EDITTEXT 3000, 35,5,95,12, ES_AUTOHSCROLL | ES_LEFT
EDITTEXT 3001, 35,20,95,12, ES_AUTOHSCROLL | ES_LEFT
DEFPUSHBUTTON "&Résultat", 3002, 5,39,40,13
PUSHBUTTON "R&etour", 3004, 85,39,40,13
LTEXT "Francs:",302,5,7,27,8
LTEXT "Euros:",303,5,22,27,8
END
;*******************************************************
105 DIALOGEX MOVEABLE IMPURE LOADONCALL DISCARDABLE 10, 10, 130, 57
STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
CAPTION "Conversion Euros/Francs"
FONT 8, "Courier New",0,1
BEGIN
EDITTEXT IDC_EDIT1, 35,5,95,12, ES_AUTOHSCROLL | ES_LEFT
EDITTEXT IDC_EDIT2, 35,20,95,12, ES_AUTOHSCROLL | ES_LEFT
DEFPUSHBUTTON "&Résultat", 3002, 5,39,40,13
PUSHBUTTON "R&etour", 3004, 85,39,40,13
LTEXT "Euros:",302,5,7,27,8
LTEXT "Francs:",303,5,22,27,8
END
;*******************************************************
Conclusion
Cet utilitaire, écrit il y a quelques années,est sans aucun doute perfectible, mais tel qu'il est il m'a rendu service bien souvent. à l'époque j'y avoais inclus un petit supplémént concernant les frans -euros et j'avoue que je n'ai pas eu le courage de l'enlever.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Conversions (clarifications) [ par Gandalfthewhite ]
salut à tous et toutes, je débute en programmation assembleur et on me demande un programme qui effectue différentes conversions avec procédures et pa
Inserer de l'hexadecimal avec Visual Basic [ par meuh33 ]
Bonjour !Je souhaite remplacer une partie du code en hexadecimal dans un exe via une aplication visual basic 6, comment faire ?je sais envoyer de
Modifier un programme windows en hexadecimal [ par Zestyr ]
[color=blue]Bonjours, je savais pas trop où poster ce sujet alors je me suis permis de le faire ici. Je souhaiterais ajouter des instructions à un pro
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|