Subversion Repositories Kolibri OS

Rev

Rev 551 | Rev 2139 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2091 leency 1
;;      h2d2b v0.3 system colors by Leency  ;;
2
;;      21.08.2011                          ;;
3
 
317 heavyiron 4
;;      hex2dec2bin 0.2 by Alexei Ershov    ;;
5
;;      16.11.2006                          ;;
6
 
2091 leency 7
use32
8
    org 0x0
9
    db  'MENUET01'
10
    dd  0x01,start,i_end,e_end,e_end,0,0
31 halyavin 11
 
2091 leency 12
include '../../../proc32.inc'
13
include '../../../macros.inc' ; макросы облегчают жизнь ассемблерщиков!
31 halyavin 14
 
15
 
2091 leency 16
start:
31 halyavin 17
red:
18
 
19
    call draw_window
20
 
21
still:
22
    mcall 10		; функция 10 - ждать события
23
 
24
    cmp  eax,1		; перерисовать окно ?
25
    je	 red		; если да - на метку red
26
    cmp  eax,2		; нажата клавиша ?
27
    je	 key		; если да - на key
28
    cmp  eax,3		; нажата кнопка ?
29
    je	 button 	; если да - на button
30
 
31
    jmp  still		; если другое событие - в начало цикла
32
 
33
;---------------------------------------------------------------------
34
 
2091 leency 35
key:		       ; нажата клавиша на клавиатуре
31 halyavin 36
    mov   eax, 2
485 heavyiron 37
    mcall
31 halyavin 38
    mov   edi, [index]
39
    cmp   edi, string1
40
    jz	  no_back
41
 
42
    cmp   ah, 8
43
    jnz   no_back
44
 
45
    dec   edi
46
    mov   byte [edi], ' '
47
    mov   [index], edi
48
    call  Draw_String
49
    jmp   still
50
no_back:
51
    cmp   ah, 13
52
    jz	  read_str
53
 
54
    cmp   edi, string1_end
55
    jae   still
56
    mov   al, ah
57
    stosb
58
    mov   [index], edi
59
    call  Draw_String
60
    jmp  still		; вернуться к началу цикла
61
 
62
read_str:
63
    dec   edi
64
    mov   esi, string1
65
 
66
    call  GetBase
67
 
68
    xor   ecx, ecx
69
    inc   ecx		; ecx = 1
70
 
71
make_bin:
72
    xor   eax, eax
73
 
74
next_digit:
75
    xor   edx, edx
76
    cmp   edi, esi
77
    jb	  .done
78
 
79
    mov   dl, [edi]
80
    cmp   dl, '-'
81
    jne   @f
82
    neg   eax
83
    jmp   .done
84
@@:
85
    cmp   dl, 'F'
86
    jbe   @f
87
    and   dl, 11011111b
88
@@:
89
    sub   dl, '0'
90
    cmp   dl, 9
91
    jbe   @f
92
    sub   dl, 'A'-'9'-1
93
@@:
94
    cmp   dl, bl
95
    jb	  @f
96
    ; Здесь обработать ошибку
97
 
98
    jmp   .done
99
@@:
100
    push  ecx
101
    xchg  eax, ecx
102
    mul   edx ;        edx:eax = eax * edx
103
    add   ecx, eax
104
    pop   eax
105
    mul   ebx
106
    xchg  eax, ecx
107
    dec   edi
108
    jmp   next_digit
109
 
110
.done:
317 heavyiron 111
   mov	  [num], eax	; сохраняем введенное число
112
   xor	  eax, eax
113
   mov	  al, ' '
114
   mov	  edi, string1
115
   mov	  [index], edi
116
   mov	  ecx, string1_end-string1
117
   rep	  stosb 	; стираем введенную строку
31 halyavin 118
   jmp	  red
119
 
120
;---------------------------------------------------------------------
121
 
122
  button:
123
    mcall 17		; 17 - получить идентификатор нажатой кнопки
124
    cmp   ah, 1 	; если НЕ нажата кнопка с номером 1,
317 heavyiron 125
    jne   @f
126
    mcall -1
127
@@:
128
    cmp   ah, 2
129
    jne   @f
130
    shl   [num], 1
131
    jmp   red
132
@@:
133
    cmp   ah, 3
134
    jne   @f
135
    shr   [num], 1
136
    jmp   red
137
@@:
138
    cmp   ah, 4
139
    jne   still
140
    sar   [num], 1
141
    jmp   red
31 halyavin 142
 
317 heavyiron 143
;------------------------------------------------
144
    draw_window:
145
;------------------------------------------------
2091 leency 146
	mcall	48, 3, sys_colors, 40
147
 
31 halyavin 148
    mcall 12, 1
2091 leency 149
	mov	edx, 0x14000000
150
	or	edx, [sys_colors.work]
151
	;mov	esi, 0x80000000
152
	;or	esi, [sys_colors.grab_text]
153
    mcall 0, 200*65536+300, 200*65536+175, ,,title
31 halyavin 154
 
2091 leency 155
 
156
    mcall  8, 15      *65536+ 38, 90*65536+ 15, 2, [sys_colors.work_button] ; кнопка shl
317 heavyiron 157
    mcall  ,		       ,110*65536+ 15,	,	   ; кнопка sal
158
    mcall  , (300-53)*65536+ 38, 90*65536+ 15, 3,	   ; кнопка shr
159
    mcall  ,		       ,110*65536+ 15, 4,	   ; кнопка sar
31 halyavin 160
 
2091 leency 161
	mov	ecx, 0x80000000
162
	or	ecx, [sys_colors.work_text]
163
    mcall  4, 15*65536+30,   , binstr,
317 heavyiron 164
    mcall  , 15*65536+44,   , decstr,
165
    mcall  , 15*65536+58,   ,sdecstr,
166
    mcall  , 15*65536+72,   , hexstr,
167
    mcall  , 15*65536+150,  , numstr,
31 halyavin 168
 
2091 leency 169
	mov	ecx, 0x80000000
170
	or	ecx, [sys_colors.work_button_text]
171
    mcall  ,	   26*65536+94, 	, shlstr,3
172
    mcall  , (300-42)*65536+94, 	, shrstr,
173
    mcall  ,	   26*65536+114,	, salstr,
174
    mcall  , (300-42)*65536+114,	, sarstr,
31 halyavin 175
    mov    ecx, [num]
176
 
2091 leency 177
 
178
    mcall  47, 8*65536+256,,240*65536+72,[sys_colors.work_text]    ; 16-ная
31 halyavin 179
    mcall    , 10*65536,   ,228*65536+44,     ; 10-ная
180
    mcall    , 8*65536+512,,240*65536+30,     ; 2-ная
181
    ror    ecx, 8
317 heavyiron 182
    mcall    ,		  ,,(240-56)*65536+30,
31 halyavin 183
    ror    ecx, 8
317 heavyiron 184
    mcall    ,		  ,,(240-56*2)*65536+30,
31 halyavin 185
    ror    ecx, 8
317 heavyiron 186
    mcall    ,		  ,,(240-56*3)*65536+30,
31 halyavin 187
    ror    ecx, 8
317 heavyiron 188
    mov    [minus], '+'
31 halyavin 189
    jnc    @f
317 heavyiron 190
    mov    [minus], '-'
31 halyavin 191
    neg    ecx
192
@@:
193
    mcall   ,  10*65536,,228*65536+58,	      ; 10-ная со знаком
194
    mcall  4, 222*65536+58, 0, minus, 1
2091 leency 195
    mcall 38, 15*65536+300-15, 137*65536+137, [sys_colors.work_graph]
317 heavyiron 196
    call   Draw_String
31 halyavin 197
    mcall 12, 2 		   ; функция 12: сообщить ОС об отрисовке окна
198
 
199
ret
200
 
201
;-------------------------------------------------
202
    Draw_String:
203
;-------------------------------------------------
204
 
317 heavyiron 205
     mcall   4, 60*65536+150, 0x40A40473, \
206
	     string1,string1_end-string1,0x00AABBCC
207
     ret
31 halyavin 208
 
209
;-------------------------------------------------
210
    GetBase:
211
;-------------------------------------------------
212
    mov   ebx, 10
213
    cmp   edi, esi
214
    jb	  .done
215
 
216
    mov   al, [edi]
217
    cmp   al, 'H'
218
    jbe   @f
219
    and   al, 11011111b
220
@@:
221
    cmp   al, 'H'
222
    jne   @f
223
    mov   ebx, 16
224
    dec   edi
225
    jmp   .done
226
 
227
@@:
228
    cmp   al, 'D'
229
    jne   @f
230
    mov   ebx, 10
231
    dec   edi
232
    jmp   .done
233
 
234
@@:
235
    cmp   al, 'B'
236
    jne   .done
237
    mov   ebx, 2
238
    dec   edi
239
 
240
.done:
241
ret
242
 
243
;-------------------------------------------------
244
string1:
245
  db  34 dup(' ')
246
string1_end:
247
  index dd string1
317 heavyiron 248
  num	dd  0
31 halyavin 249
 
250
 
2091 leency 251
 title db 'hex2dec2bin 0.3',0
252
 minus	db '-',0
317 heavyiron 253
 numstr db 'Number:',0
254
 hexstr db 'hex:',0
255
 binstr db 'bin:',0
256
 decstr db 'dec:',0
257
sdecstr db 'signed dec:',0
2091 leency 258
 shlstr db 'shl',0
259
 salstr db 'sal',0
260
 shrstr db 'shr',0
261
 sarstr db 'sar',0
31 halyavin 262
 
2091 leency 263
i_end:
264
 sys_colors		system_colors
265
 rb 0x400					;stack
266
 
267
e_end:				   ; метка конца программы