.586
.MODEL flat, STDCALL
;--- stale ---
;--- z pliku .\include\windows.inc ---
STD_INPUT_HANDLE                     equ -10
STD_OUTPUT_HANDLE                    equ -11
;--- funkcje API Win32 ---
;--- z pliku  .\include\user32.inc ---
CharToOemA PROTO :DWORD,:DWORD
;--- z pliku .\include\kernel32.inc ---
GetStdHandle PROTO :DWORD
WriteConsoleA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO :DWORD
wsprintfA PROTO C :VARARG
GetLastError PROTO
;-------------
includelib .\lib\user32.lib
includelib .\lib\kernel32.lib
;-------------
_DATA SEGMENT
  zapr DB 0Dh,0Ah,"Proszę wprowadzić parametr %ld obiektu %ld [Enter]: ",0
  ALIGN	 4
  Npar  DD	1
  Nob   DD	1
  temp	DB	128 dup(0)
  rtemp	DD	0
  formErr     DB	0Dh,0Ah,"%d=%Xh",0Dh,0Ah,0
  nErr	DD	0
  bufor	DB	128 dup (0)
  rbuf	DD	0
  rout	DD	0
  hout	DD	0
_DATA ENDS
_TEXT SEGMENT
start:
;--- zaproszenie
	push	Nob
	push	Npar
	push	OFFSET zapr
	push	OFFSET temp
	call	wsprintfA	; zwraca ilość znaków w buforze 
	add	ESP, 16		; czyszczenie stosu
	mov	rtemp, EAX	; zapamiętywanie ilości znaków
	mov	EBX,OFFSET temp
	add	EBX,rtemp
	mov	BYTE PTR [EBX], 0
;--- zaproszenie ---------
	INVOKE	CharToOemA,OFFSET temp,OFFSET temp	; konwersja polskich znaków
;--- deskryptor 
	push	STD_OUTPUT_HANDLE
	call	GetStdHandle	; wywołanie funkcji GetStdHandle
	mov	hout, EAX	; deskryptor wyjściowego bufora konsoli
;--- wyświetlenie zaproszenia ---
	push	0		; rezerwa, musi być zero
	push	OFFSET rout 	; wskaźnik na faktyczną ilość wyprowadzonych znaków 
	push	rtemp		; ilość znaków
	push	OFFSET temp 	; wskażnik na tekst
 	push	hout		; deskryptor buforu konsoli
	call	WriteConsoleA	; wywołanie funkcji WriteConsoleA
;--- jeśli błąd ----
	call  GetLastError
	mov   nErr,EAX
	INVOKE  wsprintfA,OFFSET bufor,OFFSET formErr,nErr,nErr
	mov   rbuf, EAX
	push	0		;; rezerwa, musi być zero
	push	OFFSET rout 	;; wskaźnik na faktyczną ilość wypro-wadzonych znaków 
	push	rbuf		;; ilość znaków
	push	OFFSET bufor 	;; wskaźnik na tekst
	push	hout		;; deskryptor buforu konsoli
	call	WriteConsoleA	;; wywołanie funkcji WriteConsoleA
;--- zakończenie procesu ---------
	push	0
	call	ExitProcess	; wywołanie funkcji ExitProcess
_TEXT	ENDS
END start
