Subversion Repositories Kolibri OS

Rev

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

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