Subversion Repositories Kolibri OS

Rev

Rev 7724 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7724 Rev 7902
1
; Calendar for KolibriOS
1
; Calendar for KolibriOS
2
;
2
;
3
; v1.5 - time redesign by Heavyiron
3
; v1.5 - time redesign by Heavyiron
4
; v1.2 - v1.55 - new design and functionality by Leency
4
; v1.2 - v1.55 - new design and functionality by Leency
5
; v1.1 - add change time support by DedOK 
5
; v1.1 - add change time support by DedOK 
6
; v1.0 - written in pure assembler by Ivushkin Andrey aka Willow
6
; v1.0 - written in pure assembler by Ivushkin Andrey aka Willow
7
; also - diamond, spraid, fedesco
7
; also - diamond, spraid, fedesco
8
;
8
;
9
; Created: November 1, 2004
9
; Created: November 1, 2004
10
 
10
 
11
 
11
 
12
use32
12
use32
13
 
13
 
14
  org	 0x0
14
  org	 0x0
15
 
15
 
16
  db	 'MENUET01'
16
  db	 'MENUET01'
17
  dd	 0x01
17
  dd	 0x01
18
  dd	 START
18
  dd	 START
19
  dd	 I_END
19
  dd	 I_END
20
  dd	 0x1000
20
  dd	 0x1000
21
  dd	 0x1000
21
  dd	 0x1000
22
  dd	 0x0
22
  dd	 0x0
23
  dd	 0x0
23
  dd	 0x0
24
include '..\..\..\macros.inc'
24
include '..\..\..\macros.inc'
25
include 'lang.inc'
25
include 'lang.inc'
26
include 'data.inc'
26
include 'data.inc'
27
 
27
 
28
 
28
 
29
 
29
 
30
macro ShowFocus field,reg
30
macro ShowFocus field,reg
31
{
31
{
32
   local  .nofocus, .exit
32
   local  .nofocus, .exit
33
     cmp  [focus],field
33
     cmp  [focus],field
34
     jne  .nofocus
34
     jne  .nofocus
35
   if reg eq
35
   if reg eq
36
     mov  ecx,COL_ACTIVE_TEXT
36
     mov  ecx,COL_ACTIVE_TEXT
37
   else
37
   else
38
     mov  reg,COL_ACTIVE_TEXT
38
     mov  reg,COL_ACTIVE_TEXT
39
   end if
39
   end if
40
     jmp  .exit
40
     jmp  .exit
41
   .nofocus:
41
   .nofocus:
42
   if reg eq
42
   if reg eq
43
     mov  ecx,COL_DROPDOWN_T
43
     mov  ecx,COL_DROPDOWN_T
44
   else
44
   else
45
     mov  reg,COL_DROPDOWN_T
45
     mov  reg,COL_DROPDOWN_T
46
   end if
46
   end if
47
   .exit:
47
   .exit:
48
}
48
}
49
 
49
 
50
macro GetSkinHeight
50
macro GetSkinHeight
51
{
51
{
52
	mov  eax,48
52
	mov  eax,48
53
	mov  ebx,4
53
	mov  ebx,4
54
	int 0x40
54
	int 0x40
55
}
55
}
56
 
56
 
57
macro DrawRect color1,color2,color3,color4 ; pizdec... but optimized well
57
macro DrawRect color1,color2,color3,color4 ; pizdec... but optimized well
58
{
58
{
59
	; top border-outer
59
	; top border-outer
60
	push ebx
60
	push ebx
61
	push ecx
61
	push ecx
62
	mov eax,13
62
	mov eax,13
63
	mov bx,DATE_BUTTON_WIDTH
63
	mov bx,DATE_BUTTON_WIDTH
64
	mov edx,color1
64
	mov edx,color1
65
	mov cx,1
65
	mov cx,1
66
	mcall
66
	mcall
67
	; left border-outer
67
	; left border-outer
68
	mov bx,1
68
	mov bx,1
69
	mov cx,DATE_BUTTON_HEIGHT
69
	mov cx,DATE_BUTTON_HEIGHT
70
	mcall
70
	mcall
71
	; top border-inner
71
	; top border-inner
72
	mov edx,color2
72
	mov edx,color2
73
	add ebx,1 shl 16
73
	add ebx,1 shl 16
74
	add ecx,1 shl 16
74
	add ecx,1 shl 16
75
	mov bx,DATE_BUTTON_WIDTH-1
75
	mov bx,DATE_BUTTON_WIDTH-1
76
	mov cx,1
76
	mov cx,1
77
	; left border-inner
77
	; left border-inner
78
	mcall
78
	mcall
79
	mov bx,1
79
	mov bx,1
80
	mov cx,DATE_BUTTON_HEIGHT-2
80
	mov cx,DATE_BUTTON_HEIGHT-2
81
	mcall
81
	mcall
82
	; inner
82
	; inner
83
	mov edx,color3
83
	mov edx,color3
84
	add ebx,1 shl 16
84
	add ebx,1 shl 16
85
	add ecx,1 shl 16
85
	add ecx,1 shl 16
86
	mov bx,DATE_BUTTON_WIDTH-4
86
	mov bx,DATE_BUTTON_WIDTH-4
87
	mov cx,DATE_BUTTON_HEIGHT-3
87
	mov cx,DATE_BUTTON_HEIGHT-3
88
	mcall
88
	mcall
89
	; bottom border-inner
89
	; bottom border-inner
90
	mov edx,color4
90
	mov edx,color4
91
	add ebx,DATE_BUTTON_WIDTH shl 16
91
	add ebx,DATE_BUTTON_WIDTH shl 16
92
	sub ebx,4 shl 16
92
	sub ebx,4 shl 16
93
	mov bx,1
93
	mov bx,1
94
	mov cx,DATE_BUTTON_HEIGHT-3
94
	mov cx,DATE_BUTTON_HEIGHT-3
95
	mcall
95
	mcall
96
	; right border-outer
96
	; right border-outer
97
	mov edx,color2
97
	mov edx,color2
98
	add ebx,1 shl 16
98
	add ebx,1 shl 16
99
	sub ecx,1 shl 16
99
	sub ecx,1 shl 16
100
	add cx,1
100
	add cx,1
101
	mcall
101
	mcall
102
	; right border-outer 2
102
	; right border-outer 2
103
	mov edx,color1
103
	mov edx,color1
104
	add ebx,1 shl 16
104
	add ebx,1 shl 16
105
	sub ecx,1 shl 16
105
	sub ecx,1 shl 16
106
	add cx,2
106
	add cx,2
107
	add cx,1
107
	add cx,1
108
	mcall
108
	mcall
109
	; bottom border-outer
109
	; bottom border-outer
110
	mov edx,color2
110
	mov edx,color2
111
	pop ecx
111
	pop ecx
112
	pop ebx
112
	pop ebx
113
	add ecx,DATE_BUTTON_HEIGHT shl 16
113
	add ecx,DATE_BUTTON_HEIGHT shl 16
114
	sub ecx,1 shl 16
114
	sub ecx,1 shl 16
115
	add ebx,1 shl 16
115
	add ebx,1 shl 16
116
	mov cx,1
116
	mov cx,1
117
	mcall
117
	mcall
118
	; bottom border-outer 2
118
	; bottom border-outer 2
119
	mov edx,color1
119
	mov edx,color1
120
	add ecx,1 shl 16
120
	add ecx,1 shl 16
121
	mcall
121
	mcall
122
	add ebx,1 shl 16
122
	add ebx,1 shl 16
123
	sub ecx,1 shl 16
123
	sub ecx,1 shl 16
124
	; left border-outer
124
	; left border-outer
125
	mov edx,color4
125
	mov edx,color4
126
	add ebx,1 shl 16
126
	add ebx,1 shl 16
127
	sub ecx,1 shl 16
127
	sub ecx,1 shl 16
128
	sub bx,2
128
	sub bx,2
129
	mcall 
129
	mcall 
130
}
130
}
131
 
131
 
132
 
132
 
133
str2int:
133
str2int:
134
    xor  eax,eax
134
    xor  eax,eax
135
    lodsb
135
    lodsb
136
    mov  ebx,eax
136
    mov  ebx,eax
137
    shr  ebx,4
137
    shr  ebx,4
138
    and  eax,0xf
138
    and  eax,0xf
139
    imul ebx,10
139
    imul ebx,10
140
    add  al,bl
140
    add  al,bl
141
    ret
141
    ret
142
 
142
 
143
get_current_date:
143
get_current_date:
144
    mcall 29
144
    mcall 29
145
    mov  [datestr],eax
145
    mov  [datestr],eax
146
    mov  esi,datestr
146
    mov  esi,datestr
147
    call str2int
147
    call str2int
148
    add  eax,1900
148
    add  eax,1900
149
    mov  [curYear],eax
149
    mov  [curYear],eax
150
    call str2int
150
    call str2int
151
    dec  eax
151
    dec  eax
152
    mov  [curMonth],eax
152
    mov  [curMonth],eax
153
    call str2int
153
    call str2int
154
    mov  [curDay],eax
154
    mov  [curDay],eax
155
    test byte[esi],0
155
    test byte[esi],0
156
    jnz  .no2000
156
    jnz  .no2000
157
    add  [curYear],100
157
    add  [curYear],100
158
  .no2000:
158
  .no2000:
159
ret
159
ret
160
 
160
 
161
check_midnight:
161
check_midnight:
162
    mov   ebx,[datestr]
162
    mov   ebx,[datestr]
163
    mcall 29
163
    mcall 29
164
	cmp   eax,ebx
164
	cmp   eax,ebx
165
	je   end_check_midnight
165
	je   end_check_midnight
166
	  call get_current_date
166
	  call get_current_date
167
	  call draw_days
167
	  call draw_days
168
    end_check_midnight:
168
    end_check_midnight:
169
ret
169
ret
170
 
170
 
171
;===============================================================
171
;===============================================================
172
 
172
 
173
START:
173
START:
174
    call get_current_date
174
    call get_current_date
175
	m2m [Year], [curYear]
175
	m2m [Year], [curYear]
176
	m2m [Month], [curMonth]
176
	m2m [Month], [curMonth]
177
	m2m [day_sel], [curDay]
177
	m2m [day_sel], [curDay]
178
    call calculate
178
    call calculate
179
red:
179
red:
180
    call define_window
180
    call define_window
181
 
181
 
182
still:
182
still:
183
 
183
 
184
    mcall 23,50     ; wait here for event
184
    mcall 23,50     ; wait here for event
185
  .evt:
185
  .evt:
186
    mov  ebp,[focus]
186
    mov  ebp,[focus]
187
    cmp  eax,1
187
    cmp  eax,1
188
    je	 red
188
    je	 red
189
    cmp  eax,2
189
    cmp  eax,2
190
    je	 key
190
    je	 key
191
    cmp  eax,3
191
    cmp  eax,3
192
    je	 button
192
    je	 button
193
 
193
 
194
    call check_midnight
194
    call check_midnight
195
    call draw_clock
195
    call draw_clock
196
 
196
 
197
    jmp  still
197
    jmp  still
198
 
198
 
199
  key:
199
  key:
200
    mcall 2		; get pressed key
200
    mcall 2		; get pressed key
201
    cmp  ah,9
201
    cmp  ah,9
202
    jne  no_tab
202
    jne  no_tab
203
  .tab:
203
  .tab:
204
    cmp  ebp,FOCUSABLE
204
    cmp  ebp,FOCUSABLE
205
    JAE  foc_cycle
205
    JAE  foc_cycle
206
    inc  [focus]
206
    inc  [focus]
207
  upd:
207
  upd:
208
    call calculate
208
    call calculate
209
    jmp  red
209
    jmp  red
210
  foc_cycle:
210
  foc_cycle:
211
    mov  [focus],2
211
    mov  [focus],2
212
    jmp  upd
212
    jmp  upd
213
  no_tab:
213
  no_tab:
214
    push eax
214
    push eax
215
    shr  eax,8
215
    shr  eax,8
216
    mov  ecx,12
216
    mov  ecx,12
217
    mov  edi,Fkeys
217
    mov  edi,Fkeys
218
    repne scasb
218
    repne scasb
219
    pop  eax
219
    pop  eax
220
    jnz  .noFkey
220
    jnz  .noFkey
221
    sub  edi,Fkeys+1
221
    sub  edi,Fkeys+1
222
    mov  [Month],edi
222
    mov  [Month],edi
223
    jmp  upd
223
    jmp  upd
224
  .noFkey:
224
  .noFkey:
225
    cmp  ebp,2
225
    cmp  ebp,2
226
    jne  .nomonth
226
    jne  .nomonth
227
    cmp  ah,177
227
    cmp  ah,177
228
    je	 noclose.drop
228
    je	 noclose.drop
229
    jmp  still
229
    jmp  still
230
  .nomonth:
230
  .nomonth:
231
    cmp  ebp,3
231
    cmp  ebp,3
232
    je	 noy_up.year_evt
232
    je	 noy_up.year_evt
233
    cmp  ebp,4
233
    cmp  ebp,4
234
    jne  still
234
    jne  still
235
    mov  ebx,[day_sel]
235
    mov  ebx,[day_sel]
236
    cmp  ah,176 	; left arrow
236
    cmp  ah,176 	; left arrow
237
    jg	 still
237
    jg	 still
238
    cmp  ah,179
238
    cmp  ah,179
239
    jl	 still
239
    jl	 still
240
    shr  eax,8
240
    shr  eax,8
241
    sub  eax,176
241
    sub  eax,176
242
    movsx ecx,byte[day_bounds+eax*2]
242
    movsx ecx,byte[day_bounds+eax*2]
243
    movzx eax,byte[day_bounds+eax*2+1]
243
    movzx eax,byte[day_bounds+eax*2+1]
244
    add  ecx,ebx
244
    add  ecx,ebx
245
    test eax,eax
245
    test eax,eax
246
    jz	 .chk0
246
    jz	 .chk0
247
    cmp  ecx,eax
247
    cmp  ecx,eax
248
    ja	 still
248
    ja	 still
249
  .ok:
249
  .ok:
250
    mov  [day_sel],ecx
250
    mov  [day_sel],ecx
251
    call draw_days
251
    call draw_days
252
    jmp  still
252
    jmp  still
253
  .chk0:
253
  .chk0:
254
    cmp  ecx,eax
254
    cmp  ecx,eax
255
    jle  still
255
    jle  still
256
    jmp  .ok
256
    jmp  .ok
257
 
257
 
258
day_bounds db -1,0,7,0,-7,0,1,0 ; left,down,up,right
258
day_bounds db -1,0,7,0,-7,0,1,0 ; left,down,up,right
259
 
259
 
260
  button:
260
  button:
261
    mcall 17
261
    mcall 17
262
    movzx ebx,ah
262
    movzx ebx,ah
263
    cmp  ah,200
263
    cmp  ah,200
264
    jbe  nodayselect
264
    jbe  nodayselect
265
    sub  ah,200
265
    sub  ah,200
266
    mov  byte[day_sel],ah
266
    mov  byte[day_sel],ah
267
    cmp  ebp,5
267
    cmp  ebp,5
268
    jne  .redraw
268
    jne  .redraw
269
    call draw_days
269
    call draw_days
270
    jmp  still
270
    jmp  still
271
  .redraw:
271
  .redraw:
272
    mov  [focus],4
272
    mov  [focus],4
273
    jmp  red
273
    jmp  red
274
  nodayselect:
274
  nodayselect:
275
    cmp  ah,100
275
    cmp  ah,100
276
    jb	 no_list
276
    jb	 no_list
277
    sub  ah,100
277
    sub  ah,100
278
    mov  byte[Month],ah
278
    mov  byte[Month],ah
279
    mov  [focus],2
279
    mov  [focus],2
280
    jmp  upd
280
    jmp  upd
281
  no_list:
281
  no_list:
282
    cmp  ah,1
282
    cmp  ah,1
283
    jne  noclose
283
    jne  noclose
284
  close:
284
  close:
285
    mcall -1		; clore programm
285
    mcall -1		; clore programm
286
 
286
 
287
  noclose:
287
  noclose:
288
 
288
 
289
    cmp  ah,72
289
    cmp  ah,72
290
    je	 plus_he
290
    je	 plus_he
291
 
291
 
292
    cmp  ah,73
292
    cmp  ah,73
293
    je	 plus_hd
293
    je	 plus_hd
294
 
294
 
295
    cmp  ah,74
295
    cmp  ah,74
296
    je	 minus_he
296
    je	 minus_he
297
 
297
 
298
    cmp  ah,75
298
    cmp  ah,75
299
    je	 minus_hd
299
    je	 minus_hd
300
 
300
 
301
    cmp  ah,76
301
    cmp  ah,76
302
    je	 plus_me
302
    je	 plus_me
303
 
303
 
304
    cmp  ah,77
304
    cmp  ah,77
305
    je	 plus_md
305
    je	 plus_md
306
 
306
 
307
    cmp  ah,78
307
    cmp  ah,78
308
    je	 minus_me
308
    je	 minus_me
309
 
309
 
310
    cmp  ah,79
310
    cmp  ah,79
311
    je	 minus_md
311
    je	 minus_md
312
 
312
 
313
    cmp  ah,80
313
    cmp  ah,80
314
    je	 reset
314
    je	 reset
315
 
315
 
316
    cmp  ah,81
316
    cmp  ah,81
317
    je	 set_date
317
    je	 set_date
318
 
318
 
319
    cmp  ah,2		; drop down list
319
    cmp  ah,2		; drop down list
320
    jne  no_dropdn
320
    jne  no_dropdn
321
  .drop:
321
  .drop:
322
    mov  [focus],2
322
    mov  [focus],2
323
    cmp  [dropped],al	; ==0
323
    cmp  [dropped],al	; ==0
324
    jne  red
324
    jne  red
325
    call draw_window
325
    call draw_window
326
    mov  edx,1 shl 31+231
326
    mov  edx,1 shl 31+231
327
    mov  ecx,31
327
    mov  ecx,31
328
    mov  eax,8
328
    mov  eax,8
329
  .bremove:
329
  .bremove:
330
    mcall
330
    mcall
331
    dec  edx
331
    dec  edx
332
    loop .bremove
332
    loop .bremove
333
    call draw_dropdown
333
    call draw_dropdown
334
    jmp  still
334
    jmp  still
335
  no_dropdn:
335
  no_dropdn:
336
    cmp  ah,3		; year -1
336
    cmp  ah,3		; year -1
337
    jne  noy_dn
337
    jne  noy_dn
338
  year_dec:
338
  year_dec:
339
    dec  [Year]
339
    dec  [Year]
340
    mov  [focus],3
340
    mov  [focus],3
341
    jmp  upd
341
    jmp  upd
342
  noy_dn:
342
  noy_dn:
343
    cmp  ah,4		; year+1
343
    cmp  ah,4		; year+1
344
    jne  noy_up
344
    jne  noy_up
345
  year_inc:
345
  year_inc:
346
    inc  [Year]
346
    inc  [Year]
347
    mov  [focus],3
347
    mov  [focus],3
348
    jmp  upd
348
    jmp  upd
349
  noy_up:
349
  noy_up:
350
    cmp  ah,5
350
    cmp  ah,5
351
    jne  noy_click
351
    jne  noy_click
352
    mov  [focus],3
352
    mov  [focus],3
353
    call draw_window
353
    call draw_window
354
  .still:
354
  .still:
355
    mcall 10
355
    mcall 10
356
    cmp  eax,2
356
    cmp  eax,2
357
    jne  still.evt
357
    jne  still.evt
358
    mcall 2
358
    mcall 2
359
  .year_evt:
359
  .year_evt:
360
    cmp  ah,176
360
    cmp  ah,176
361
    je	 year_dec
361
    je	 year_dec
362
    cmp  ah,179
362
    cmp  ah,179
363
    je	 year_inc
363
    je	 year_inc
364
	
364
	
365
    mov  ebx,10
365
    mov  ebx,10
366
    cmp  ah,9
366
    cmp  ah,9
367
    je	 key.tab
367
    je	 key.tab
368
    cmp  ah,8		; backspace
368
    cmp  ah,8		; backspace
369
    jne  .nobsp
369
    jne  .nobsp
370
    mov  eax,[Year]
370
    mov  eax,[Year]
371
    xor  edx,edx
371
    xor  edx,edx
372
    div  ebx
372
    div  ebx
373
  .ch_year:
373
  .ch_year:
374
    mov  [Year],eax
374
    mov  [Year],eax
375
    call draw_year
375
    call draw_year
376
    jmp  .still
376
    jmp  .still
377
  .nobsp:
377
  .nobsp:
378
    cmp  ah,13		; enter
378
    cmp  ah,13		; enter
379
    je	 upd
379
    je	 upd
380
    cmp  ah,182
380
    cmp  ah,182
381
    jne  .noclear	; del
381
    jne  .noclear	; del
382
    xor  eax,eax
382
    xor  eax,eax
383
    jmp  .ch_year
383
    jmp  .ch_year
384
  .noclear:
384
  .noclear:
385
    cmp  ah,48
385
    cmp  ah,48
386
    jb	 .still
386
    jb	 .still
387
    cmp  ah,57
387
    cmp  ah,57
388
    ja	 .still
388
    ja	 .still
389
    cmp  [Year],1000
389
    cmp  [Year],1000
390
    jae  .still
390
    jae  .still
391
    shr  eax,8
391
    shr  eax,8
392
    lea  ecx,[eax-48]
392
    lea  ecx,[eax-48]
393
    mov  eax,[Year]
393
    mov  eax,[Year]
394
    imul eax,ebx
394
    imul eax,ebx
395
    add  eax,ecx
395
    add  eax,ecx
396
    jmp  .ch_year
396
    jmp  .ch_year
397
  noy_click:
397
  noy_click:
398
    cmp  ah,10
398
    cmp  ah,10
399
    jne  START
399
    jne  START
400
    xor  [new_style],1
400
    xor  [new_style],1
401
    jmp  upd
401
    jmp  upd
-
 
402
 
-
 
403
update_clock:
-
 
404
    mcall 22,0x00000000 
-
 
405
    call draw_clock	
402
 
406
    jmp  still
403
 
407
 
404
reset:
408
reset:
405
    mcall 3
409
    mcall 3
406
    mov  ecx,eax
410
    mov  ecx,eax
407
    shl  ecx,16
411
    shl  ecx,16
408
    shr  ecx,16
412
    shr  ecx,16
409
    mcall 22,0x00000000 
-
 
410
    jmp  still
413
    jmp  update_clock
411
 
414
 
412
plus_hd:
415
plus_hd:
413
    mcall 3
416
    mcall 3
414
    mov  ecx,eax
417
    mov  ecx,eax
415
    add  ecx,1
418
    add  ecx,1
416
    mcall 22,0x00000000 
-
 
417
    jmp  still
419
    jmp  update_clock
418
 
420
 
419
plus_he:
421
plus_he:
420
    mcall 3
422
    mcall 3
421
    mov  ecx,eax
423
    mov  ecx,eax
422
    add  ecx,16
424
    add  ecx,16
423
    mcall 22,0x00000000 
-
 
424
    jmp  still
425
    jmp  update_clock
425
 
426
 
426
minus_hd:
427
minus_hd:
427
    mcall 3
428
    mcall 3
428
    mov  ecx,eax
429
    mov  ecx,eax
429
    sub  ecx,1
430
    sub  ecx,1
430
	mcall 22,0x00000000
-
 
431
    jmp  still
431
    jmp  update_clock
432
 
432
 
433
minus_he:
433
minus_he:
434
    mcall 3
434
    mcall 3
435
    mov  ecx,eax
435
    mov  ecx,eax
436
    sub  ecx,16
436
    sub  ecx,16
437
	mcall 22,0x00000000 
-
 
438
    jmp  still
437
    jmp  update_clock
439
 
438
 
440
plus_md:
439
plus_md:
441
    mcall 3
440
    mcall 3
442
    mov  ecx,eax
441
    mov  ecx,eax
443
    add  ecx,256
442
    add  ecx,256
444
	mcall 22,0x00000000 
-
 
445
    jmp  still
443
    jmp  update_clock
446
 
444
 
447
plus_me:
445
plus_me:
448
    mcall 3
446
    mcall 3
449
    mov  ecx,eax
447
    mov  ecx,eax
450
    add  ecx,4096
448
    add  ecx,4096
451
    mcall 22,0x00000000 
-
 
452
    jmp  still
449
    jmp  update_clock
453
 
450
 
454
minus_md:
451
minus_md:
455
    mcall 3
452
    mcall 3
456
    mov  ecx,eax
453
    mov  ecx,eax
457
    sub  ecx,256
454
    sub  ecx,256
458
    mcall 22,0x00000000
-
 
459
    jmp  still
455
    jmp  update_clock
460
 
456
 
461
minus_me:
457
minus_me:
462
    mcall 3
458
    mcall 3
463
    mov  ecx,eax
459
    mov  ecx,eax
464
    sub  ecx,4096
460
    sub  ecx,4096
465
    mcall 22,0x00000000
-
 
466
    jmp  still
461
    jmp  update_clock
467
 
462
 
468
set_date:
463
set_date:
469
    mov  eax,0x00000000
464
    mov  eax,0x00000000
470
    mov ebx,[day_sel]
465
    mov ebx,[day_sel]
471
    call additem
466
    call additem
472
    shl  eax,8
467
    shl  eax,8
473
    mov  ebx,[Month]
468
    mov  ebx,[Month]
474
    add  ebx,1
469
    add  ebx,1
475
    call additem
470
    call additem
476
    shl  eax,8
471
    shl  eax,8
477
    mov  ebx,[Year]
472
    mov  ebx,[Year]
478
    call additem
473
    call additem
479
    mov  ecx,eax
474
    mov  ecx,eax
480
    mcall 22,1
475
    mcall 22,1
481
    jmp  START
476
    jmp  START
482
 
477
 
483
additem:
478
additem:
484
    add  eax,1
479
    add  eax,1
485
    daa
480
    daa
486
    sub  ebx,1
481
    sub  ebx,1
487
    cmp  ebx,0
482
    cmp  ebx,0
488
    jne  additem
483
    jne  additem
489
    ret
484
    ret
490
 
485
 
491
 
486
 
492
;   *********************************************
487
;   *********************************************
493
;   *******	     DRAW WINDOW	  *******
488
;   *******	     DRAW WINDOW	  *******
494
;   *********************************************
489
;   *********************************************
495
 
490
 
496
draw_clock:
491
draw_clock:
497
 
492
 
498
    mcall 3
493
    mcall 3
499
    mov  ecx,eax
494
    mov  ecx,eax
500
    mcall 47,0x00020100, ,195*65536+298,0x50CCCCCC,COL_TOOLBAR_BG
495
    mcall 47,0x00020100, ,195*65536+298,0x50CCCCCC,COL_TOOLBAR_BG
501
 
496
 
502
    shr  ecx,8
497
    shr  ecx,8
503
    add  edx,22*65536
498
    add  edx,22*65536
504
    mcall
499
    mcall
505
 
500
 
506
    shr  ecx,8
501
    shr  ecx,8
507
    add  edx,22*65536
502
    add  edx,22*65536
508
    mcall
503
    mcall
509
    ret
504
    ret
510
 
505
 
511
define_window:
506
define_window:
512
 
507
 
513
    mcall 12,1
508
    mcall 12,1
514
	mcall 48, 5	; GetClientTop, fix for case when @patel in the top
509
	mcall 48, 5	; GetClientTop, fix for case when @patel in the top
515
	shr ebx, 16
510
	shr ebx, 16
516
	mov ecx,ebx
511
	mov ecx,ebx
517
	shl ecx,16
512
	shl ecx,16
518
	cmp ecx,0
513
	cmp ecx,0
519
	jne  panel_top
514
	jne  panel_top
520
	; panel bottom
515
	; panel bottom
521
	mcall 48,5 ;get screen size
516
	mcall 48,5 ;get screen size
522
	mov ecx, ebx
517
	mov ecx, ebx
523
	sub ecx, WIN_H
518
	sub ecx, WIN_H
524
	shl ecx, 16
519
	shl ecx, 16
525
panel_top:
520
panel_top:
526
	add ecx, WIN_H	 ; [y start] *65536 + [y size]
521
	add ecx, WIN_H	 ; [y start] *65536 + [y size]
527
	mov ebx, eax
522
	mov ebx, eax
528
	sub eax, WIN_W
523
	sub eax, WIN_W
529
	shl ebx, 16
524
	shl ebx, 16
530
	add ebx, WIN_W	
525
	add ebx, WIN_W	
531
    mcall 0,,,COL_WINDOW_BG, ,title ; define window
526
    mcall 0,,,COL_WINDOW_BG, ,title ; define window
532
	mcall 12,2
527
	mcall 12,2
533
	GetSkinHeight
528
	GetSkinHeight
534
	mov ecx, eax
529
	mov ecx, eax
535
	shl ecx, 16
530
	shl ecx, 16
536
	add ecx, 43
531
	add ecx, 43
537
	mcall 13,B_WBAR_X, ,COL_TOOLBAR_BG ; draw toolbar background
532
	mcall 13,B_WBAR_X, ,COL_TOOLBAR_BG ; draw toolbar background
538
	mcall 13,B_WBAR_X,BT_WBAR_Y,COL_TOOLBAR_BG ; draw toolbar background
533
	mcall 13,B_WBAR_X,BT_WBAR_Y,COL_TOOLBAR_BG ; draw toolbar background
539
	mcall 13,0*65536+B_WBAR_X,84*65536+199,0xE7E7E7
534
	mcall 13,0*65536+B_WBAR_X,84*65536+199,0xE7E7E7
540
	
535
	
541
draw_window:
536
draw_window:
542
    call draw_clock
537
    call draw_clock
543
    call draw_week
538
    call draw_week
544
    mcall 8,193*65536+8,285*65536+10,72,COL_TOOLBAR_BG
539
    mcall 8,193*65536+8,285*65536+10,72,COL_TOOLBAR_BG
545
    mov  ebx,202*65536+8
540
    mov  ebx,202*65536+8
546
    inc  edx ;73
541
    inc  edx ;73
547
    mcall
542
    mcall
548
    mov  ebx,193*65536+8
543
    mov  ebx,193*65536+8
549
    mov  ecx,315*65536+10
544
    mov  ecx,315*65536+10
550
    inc  edx ;74
545
    inc  edx ;74
551
    mcall
546
    mcall
552
    mov  ebx,202*65536+8
547
    mov  ebx,202*65536+8
553
    inc  edx ;75
548
    inc  edx ;75
554
    mcall
549
    mcall
555
    mov  ebx,215*65536+8
550
    mov  ebx,215*65536+8
556
    mov  ecx,285*65536+10
551
    mov  ecx,285*65536+10
557
    inc  edx ;76
552
    inc  edx ;76
558
    mcall
553
    mcall
559
    mov  ebx,224*65536+8
554
    mov  ebx,224*65536+8
560
    inc  edx ;77
555
    inc  edx ;77
561
    mcall
556
    mcall
562
    mov  ebx,215*65536+8
557
    mov  ebx,215*65536+8
563
    mov  ecx,315*65536+10
558
    mov  ecx,315*65536+10
564
    inc  edx ;78
559
    inc  edx ;78
565
    mcall
560
    mcall
566
    mov  ebx,224*65536+8
561
    mov  ebx,224*65536+8
567
    inc  edx ;79
562
    inc  edx ;79
568
    mcall
563
    mcall
569
    mov  ebx,25*65536+110
564
    mov  ebx,25*65536+110
570
    mov  ecx,293*65536+22
565
    mov  ecx,293*65536+22
571
    mov  esi,COL_TOOLBAR_BG
566
    mov  esi,COL_TOOLBAR_BG
572
    mov  edx,81
567
    mov  edx,81
573
    mcall
568
    mcall
574
 
569
 
575
    mov  esi,COL_MONTH_YEAR_B	; new style
570
    mov  esi,COL_MONTH_YEAR_B	; new style
576
    mov  edx,10
571
    mov  edx,10
577
    or	 edx,1 shl 29+1 shl 30
572
    or	 edx,1 shl 29+1 shl 30
578
    mov  ebx,B_NS_X
573
    mov  ebx,B_NS_X
579
    mov  ecx,B_NS_Y
574
    mov  ecx,B_NS_Y
580
    mcall
575
    mcall
581
    add  edx,1-1 shl 29
576
    add  edx,1-1 shl 29
582
    mov  ebx,B_TODAY_X+8*(today_end-today_msg)
577
    mov  ebx,B_TODAY_X+8*(today_end-today_msg)
583
    mov  ecx,B_TODAY_Y
578
    mov  ecx,B_TODAY_Y
584
    mcall
579
    mcall
585
    mov  ecx,B_Y
580
    mov  ecx,B_Y
586
    mov  ebx,B_MONTH_X
581
    mov  ebx,B_MONTH_X
587
    mov  edx,2
582
    mov  edx,2
588
    mcall
583
    mcall
589
    mov  ebx,B_SPIN_X ; <
584
    mov  ebx,B_SPIN_X ; <
590
    inc  edx
585
    inc  edx
591
    mcall
586
    mcall
592
    add  ebx,55 shl 16 ; >
587
    add  ebx,55 shl 16 ; >
593
    inc  edx
588
    inc  edx
594
    mcall
589
    mcall
595
    call draw_days
590
    call draw_days
596
 
591
 
597
	; draw text in window
592
	; draw text in window
598
    mcall 4,157*65536+301,0x80CCCCCC,sys_text
593
    mcall 4,157*65536+301,0x80CCCCCC,sys_text
599
    mcall  ,211*65536+301,,separator
594
    mcall  ,211*65536+301,,separator
600
    mcall  ,233*65536+301
595
    mcall  ,233*65536+301
601
    mcall  ,185*65536+287, ,plus
596
    mcall  ,185*65536+287, ,plus
602
    mcall  ,185*65536+317, ,minus
597
    mcall  ,185*65536+317, ,minus
603
    mcall  , 35*65536+300,0x00CCCCCC,set_date_t,15 ;set date text
598
    mcall  , 35*65536+300,0x00CCCCCC,set_date_t,15 ;set date text
604
 
599
 
605
    mov  ecx,COL_GO_TODAY_T
600
    mov  ecx,COL_GO_TODAY_T
606
    mov  edx,today_msg
601
    mov  edx,today_msg
607
    mov  ebx,B_TODAY
602
    mov  ebx,B_TODAY
608
    mov  esi,today_end-today_msg
603
    mov  esi,today_end-today_msg
609
    mcall
604
    mcall
610
 
605
 
611
    mov  ebx,B_SPIN
606
    mov  ebx,B_SPIN
612
    mov  edx,spinner
607
    mov  edx,spinner
613
    mov  esi,8
608
    mov  esi,8
614
    mov  ecx,COL_DROPDOWN_T
609
    mov  ecx,COL_DROPDOWN_T
615
    mcall
610
    mcall
616
 
611
 
617
    mov  edx,[Month]
612
    mov  edx,[Month]
618
    movzx  esi,byte[month_name]
613
    movzx  esi,byte[month_name]
619
    imul edx,esi
614
    imul edx,esi
620
    add  edx,month_name+1
615
    add  edx,month_name+1
621
    mov  ebx,B_MONTH
616
    mov  ebx,B_MONTH
622
    ShowFocus 2
617
    ShowFocus 2
623
    mcall
618
    mcall
624
 
619
 
625
    call draw_year
620
    call draw_year
626
    mov  [dropped],0
621
    mov  [dropped],0
627
    ret
622
    ret
628
 
623
 
629
draw_year:
624
draw_year:
630
    ShowFocus 3,esi
625
    ShowFocus 3,esi
631
    mcall 47,0x40001,Year,B_YEAR
626
    mcall 47,0x40001,Year,B_YEAR
632
    ret
627
    ret
633
 
628
 
634
draw_dropdown:
629
draw_dropdown:
635
    mov  [dropped],1
630
    mov  [dropped],1
636
    push [Month]
631
    push [Month]
637
    pop  [focus]
632
    pop  [focus]
638
    add  [focus],100
633
    add  [focus],100
639
    mov  ecx,12
634
    mov  ecx,12
640
    mov  edx,100
635
    mov  edx,100
641
    push dword month_name+1
636
    push dword month_name+1
642
    push dword B_DROP
637
    push dword B_DROP
643
    push dword B_Y+16 shl 16
638
    push dword B_Y+16 shl 16
644
  .ddd_loop:
639
  .ddd_loop:
645
    mov  edi,edx
640
    mov  edi,edx
646
    push ecx
641
    push ecx
647
    mov  esi,COL_DROPDOWN_BG
642
    mov  esi,COL_DROPDOWN_BG
648
    mcall 8,B_MONTH_X,[esp+4]
643
    mcall 8,B_MONTH_X,[esp+4]
649
    mov eax,4
644
    mov eax,4
650
    mov  ebx,[esp+8]
645
    mov  ebx,[esp+8]
651
    xchg edx,[esp+12]
646
    xchg edx,[esp+12]
652
    movzx esi,byte[month_name]
647
    movzx esi,byte[month_name]
653
    ShowFocus edi
648
    ShowFocus edi
654
    mcall
649
    mcall
655
    add  edx,esi
650
    add  edx,esi
656
    xchg edx,[esp+12]
651
    xchg edx,[esp+12]
657
    add  dword[esp+8],16
652
    add  dword[esp+8],16
658
    add  dword[esp+4],16 shl 16
653
    add  dword[esp+4],16 shl 16
659
    inc  edx
654
    inc  edx
660
    pop  ecx
655
    pop  ecx
661
    loop .ddd_loop
656
    loop .ddd_loop
662
    add  esp,12
657
    add  esp,12
663
    ret
658
    ret
664
 
659
 
665
draw_week:
660
draw_week:
666
    mov  eax,13
661
    mov  eax,13
667
    mov  ebx,B_WBAR_X
662
    mov  ebx,B_WBAR_X
668
    mov  ecx,B_WBAR_Y
663
    mov  ecx,B_WBAR_Y
669
    mov  edx,COL_WEEKDAY_BG
664
    mov  edx,COL_WEEKDAY_BG
670
    mcall
665
    mcall
671
    movzx esi,byte[week_days]
666
    movzx esi,byte[week_days]
672
    movzx edi,byte[week_days+1]
667
    movzx edi,byte[week_days+1]
673
    mov  ebx,B_WEEK
668
    mov  ebx,B_WEEK
674
    mov  ecx,7
669
    mov  ecx,7
675
    mov  edx,week_days+2
670
    mov  edx,week_days+2
676
    mov  eax,4
671
    mov  eax,4
677
  .week:
672
  .week:
678
    push ecx
673
    push ecx
679
    cmp  ecx,edi
674
    cmp  ecx,edi
680
    je	 .holiday
675
    je	 .holiday
681
    mov  ecx,0x10000000
676
    mov  ecx,0x10000000
682
    jmp  .noholiday
677
    jmp  .noholiday
683
  .holiday:
678
  .holiday:
684
    mov  ecx,0x10cc1010
679
    mov  ecx,0x10cc1010
685
  .noholiday:
680
  .noholiday:
686
    mcall
681
    mcall
687
    add  edx,esi
682
    add  edx,esi
688
    add  ebx,B_WX_SHIFT
683
    add  ebx,B_WX_SHIFT
689
    pop  ecx
684
    pop  ecx
690
    loop .week
685
    loop .week
691
    ret
686
    ret
692
 
687
 
693
draw_days:
688
draw_days:
694
    call count_days
689
    call count_days
695
    cmp  ecx,[day_sel]
690
    cmp  ecx,[day_sel]
696
    jae  .ok
691
    jae  .ok
697
    mov  [day_sel],ecx
692
    mov  [day_sel],ecx
698
  .ok:
693
  .ok:
699
    mov  [number],0
694
    mov  [number],0
700
    mov  eax,47
695
    mov  eax,47
701
    mov  edx,B_DAYS_Y
696
    mov  edx,B_DAYS_Y
702
    mov  ebx,0x10001
697
    mov  ebx,0x10001
703
    mov  edi,[firstday]
698
    mov  edi,[firstday]
704
    push ecx
699
    push ecx
705
  .dayloop:
700
  .dayloop:
706
    movzx edx,dx
701
    movzx edx,dx
707
    mov  esi,edi
702
    mov  esi,edi
708
    shl  esi,21
703
    shl  esi,21
709
    lea  edx,[edx+esi+34 shl 16]
704
    lea  edx,[edx+esi+34 shl 16]
710
    mov  ecx,edi
705
    mov  ecx,edi
711
    add  cl,[week_days+1]
706
    add  cl,[week_days+1]
712
    cmp  ecx,7
707
    cmp  ecx,7
713
    je	 .holiday
708
    je	 .holiday
714
    mov  esi,0x10313138 ; COL_DATE_TEXT
709
    mov  esi,0x10313138 ; COL_DATE_TEXT
715
    jmp  .noholiday
710
    jmp  .noholiday
716
  .holiday:
711
  .holiday:
717
    mov  esi,0x10cc1010
712
    mov  esi,0x10cc1010
718
  .noholiday:
713
  .noholiday:
719
    mov  ecx,number
714
    mov  ecx,number
720
    inc  dword[ecx]
715
    inc  dword[ecx]
721
    pusha
716
    pusha
722
    sub  edx,8 shl 16 + 8
717
    sub  edx,8 shl 16 + 8
723
    mov  ebx,edx
718
    mov  ebx,edx
724
    mov  bx,DATE_BUTTON_WIDTH-1
719
    mov  bx,DATE_BUTTON_WIDTH-1
725
    shrd ecx,edx,16
720
    shrd ecx,edx,16
726
    mov  cx,DATE_BUTTON_HEIGHT-1
721
    mov  cx,DATE_BUTTON_HEIGHT-1
727
    mov  edx,[number]
722
    mov  edx,[number]
728
    cmp  edx,[day_sel]
723
    cmp  edx,[day_sel]
729
    je	 .draw_sel
724
    je	 .draw_sel
730
    mov  esi,COL_DATE_BUTTONS
725
    mov  esi,COL_DATE_BUTTONS
731
    jmp  .draw_but
726
    jmp  .draw_but
732
.draw_sel:				    ;draw selected button
727
.draw_sel:				    ;draw selected button
733
	add  edx,1 shl 30
728
	add  edx,1 shl 30
734
	add  edx,200+1 shl 29
729
	add  edx,200+1 shl 29
735
	mcall 8
730
	mcall 8
736
    cmp  [focus],4
731
    cmp  [focus],4
737
    jne  .not_active
732
    jne  .not_active
738
	DrawRect COL_DATE_ACTIVE_1,COL_DATE_ACTIVE_2,COL_DATE_ACTIVE_3,COL_DATE_ACTIVE_4
733
	DrawRect COL_DATE_ACTIVE_1,COL_DATE_ACTIVE_2,COL_DATE_ACTIVE_3,COL_DATE_ACTIVE_4
739
	jmp .out
734
	jmp .out
740
.not_active:
735
.not_active:
741
	DrawRect COL_DATE_INACTIVE_1,COL_DATE_INACTIVE_2,COL_DATE_INACTIVE_3,COL_DATE_INACTIVE_4
736
	DrawRect COL_DATE_INACTIVE_1,COL_DATE_INACTIVE_2,COL_DATE_INACTIVE_3,COL_DATE_INACTIVE_4
742
	jmp .out
737
	jmp .out
743
.draw_but:				     ;draw non selected button
738
.draw_but:				     ;draw non selected button
744
    add  edx,200+1 shl 29
739
    add  edx,200+1 shl 29
745
    mcall 8
740
    mcall 8
746
	DrawRect COL_DATE_1,COL_DATE_2,COL_DATE_3,COL_DATE_4
741
	DrawRect COL_DATE_1,COL_DATE_2,COL_DATE_3,COL_DATE_4
747
	mov eax,[Year]
742
	mov eax,[Year]
748
	cmp [curYear],eax
743
	cmp [curYear],eax
749
	jne .out
744
	jne .out
750
	mov eax,[Month]
745
	mov eax,[Month]
751
	cmp [curMonth],eax
746
	cmp [curMonth],eax
752
	jne .out
747
	jne .out
753
	mov eax,[number]
748
	mov eax,[number]
754
	cmp [curDay],eax
749
	cmp [curDay],eax
755
	jne .out
750
	jne .out
756
	mov edx,0xff0000
751
	mov edx,0xff0000
757
	mov bx,DATE_BUTTON_WIDTH-1
752
	mov bx,DATE_BUTTON_WIDTH-1
758
	mov cx,3
753
	mov cx,3
759
	sub ebx,2 shl 16
754
	sub ebx,2 shl 16
760
	sub ecx,1 shl 16
755
	sub ecx,1 shl 16
761
	mcall 13
756
	mcall 13
762
.out:
757
.out:
763
	mov	eax, [number]
758
	mov	eax, [number]
764
	xor	edx, edx
759
	xor	edx, edx
765
	mov	ecx, 10
760
	mov	ecx, 10
766
	div	ecx
761
	div	ecx
767
	mov	[remainder], edx
762
	mov	[remainder], edx
768
	mov	[quotient],  eax
763
	mov	[quotient],  eax
769
	popa
764
	popa
770
 
765
 
771
; first number
766
; first number
772
	mov	ecx,quotient
767
	mov	ecx,quotient
773
	mcall
768
	mcall
774
	add	edx,1 shl 16
769
	add	edx,1 shl 16
775
	mcall
770
	mcall
776
; second number
771
; second number
777
	mov	ecx,remainder
772
	mov	ecx,remainder
778
	add	edx,8 shl 16
773
	add	edx,8 shl 16
779
	mcall
774
	mcall
780
	add	edx,1 shl 16
775
	add	edx,1 shl 16
781
	mcall
776
	mcall
782
	sub	edx,10 shl 16
777
	sub	edx,10 shl 16
783
	inc	edi
778
	inc	edi
784
	cmp	edi,7
779
	cmp	edi,7
785
	jne	.nowrap
780
	jne	.nowrap
786
	xor	edi,edi
781
	xor	edi,edi
787
	add	dx,B_DAYS_SHIFT
782
	add	dx,B_DAYS_SHIFT
788
.nowrap:
783
.nowrap:
789
	dec	dword [esp]
784
	dec	dword [esp]
790
	jnz	.dayloop
785
	jnz	.dayloop
791
	pop	ecx
786
	pop	ecx
792
	ret
787
	ret
793
 
788
 
794
count_days:    ; ecx -days in month
789
count_days:    ; ecx -days in month
795
    call is_leap_year
790
    call is_leap_year
796
    mov  ecx,[Month]
791
    mov  ecx,[Month]
797
    mov  eax,1
792
    mov  eax,1
798
    movzx ecx,byte[day_count+ecx]
793
    movzx ecx,byte[day_count+ecx]
799
    add  ecx,28
794
    add  ecx,28
800
    cmp  eax,[leap_year]
795
    cmp  eax,[leap_year]
801
    jne  .noleap
796
    jne  .noleap
802
    cmp  eax,[Month]
797
    cmp  eax,[Month]
803
    jne  .noleap
798
    jne  .noleap
804
    inc  ecx
799
    inc  ecx
805
  .noleap:
800
  .noleap:
806
    mov  [day_bounds+3],cl
801
    mov  [day_bounds+3],cl
807
    mov  [day_bounds+7],cl
802
    mov  [day_bounds+7],cl
808
    ret
803
    ret
809
 
804
 
810
is_leap_year:
805
is_leap_year:
811
    mov  [leap_year],0
806
    mov  [leap_year],0
812
    mov  eax,[Year]
807
    mov  eax,[Year]
813
    mov  bl,100
808
    mov  bl,100
814
    div  bl	     ; ah=Year mod 100, al=Year%100
809
    div  bl	     ; ah=Year mod 100, al=Year%100
815
    test ah,ah
810
    test ah,ah
816
    jz	.century
811
    jz	.century
817
    shr  ax,8	     ; ax - last 2 digits
812
    shr  ax,8	     ; ax - last 2 digits
818
  .century:
813
  .century:
819
    test al,11b
814
    test al,11b
820
    jnz  .noleap
815
    jnz  .noleap
821
    inc  [leap_year]
816
    inc  [leap_year]
822
  .noleap:
817
  .noleap:
823
    ret
818
    ret
824
 
819
 
825
calculate:
820
calculate:
826
    mov  ebx,[Year]
821
    mov  ebx,[Year]
827
    mov  eax,[Month]
822
    mov  eax,[Month]
828
    sub  eax,2
823
    sub  eax,2
829
    jge  .nojf
824
    jge  .nojf
830
    dec  ebx
825
    dec  ebx
831
    add  eax,12
826
    add  eax,12
832
  .nojf:
827
  .nojf:
833
    add  eax,4
828
    add  eax,4
834
    xor  edx,edx
829
    xor  edx,edx
835
    mov  ecx,153
830
    mov  ecx,153
836
    imul cx
831
    imul cx
837
    mov  ecx,5
832
    mov  ecx,5
838
    div  cx
833
    div  cx
839
    inc  eax
834
    inc  eax
840
    mov  ecx,365
835
    mov  ecx,365
841
    imul ecx,ebx
836
    imul ecx,ebx
842
    add  eax,ecx
837
    add  eax,ecx
843
    mov  ecx,ebx
838
    mov  ecx,ebx
844
    shr  ecx,2
839
    shr  ecx,2
845
    add  eax,ecx
840
    add  eax,ecx
846
    dec  eax
841
    dec  eax
847
    add  eax,2
842
    add  eax,2
848
    xchg eax,ebx
843
    xchg eax,ebx
849
    mov  ecx,100
844
    mov  ecx,100
850
    xor  edx,edx
845
    xor  edx,edx
851
    div  cx
846
    div  cx
852
    sub  ebx,eax
847
    sub  ebx,eax
853
    shr  eax,2
848
    shr  eax,2
854
    add  ebx,eax
849
    add  ebx,eax
855
    add  ebx,5
850
    add  ebx,5
856
    mov  eax,ebx
851
    mov  eax,ebx
857
    xor  edx,edx
852
    xor  edx,edx
858
    movzx ebx,byte[week_days+1]
853
    movzx ebx,byte[week_days+1]
859
    sub  eax,ebx
854
    sub  eax,ebx
860
    inc  eax
855
    inc  eax
861
    mov  ebx,7
856
    mov  ebx,7
862
    div  bx
857
    div  bx
863
    mov  [firstday],edx
858
    mov  [firstday],edx
864
    ret
859
    ret
865
 
860
 
866
I_END:
861
I_END:
867
>
862
>