Subversion Repositories Kolibri OS

Rev

Rev 3892 | Rev 3895 | 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
;
3892 leency 3
; v1.2 - v1.45 - 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
3894 heavyiron 473
    mcall 47,0x00020100, ,198*65536+287,0x50000000,COL_WINDOW_BG
452 heavyiron 474
 
475
    shr  ecx,8
3894 heavyiron 476
    add  edx,22*65536
452 heavyiron 477
    mcall
478
 
479
    shr  ecx,8
3894 heavyiron 480
    add  edx,22*65536
452 heavyiron 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
 
3894 heavyiron 495
    mcall 8,196*65536+8,272*65536+10,72,COL_DATE_BUTTONS
452 heavyiron 496
 
3894 heavyiron 497
    mov  ebx,205*65536+8
452 heavyiron 498
    inc  edx
499
    mcall
500
 
3894 heavyiron 501
    mov  ebx,196*65536+8
502
    mov  ecx,298*65536+10
452 heavyiron 503
    inc  edx
504
    mcall
505
 
3894 heavyiron 506
    mov  ebx,205*65536+8
452 heavyiron 507
    inc  edx
508
    mcall
509
 
3894 heavyiron 510
    mov  ebx,218*65536+8
511
    mov  ecx,272*65536+10
452 heavyiron 512
    inc  edx
513
    mcall
514
 
3894 heavyiron 515
    mov  ebx,227*65536+8
452 heavyiron 516
    inc  edx
517
    mcall
518
 
3894 heavyiron 519
    mov  ebx,218*65536+8
520
    mov  ecx,298*65536+10
452 heavyiron 521
    inc  edx
522
    mcall
523
 
3894 heavyiron 524
    mov  ebx,227*65536+8
452 heavyiron 525
    inc  edx
526
    mcall
527
 
3894 heavyiron 528
    mov  ebx,240*65536+21
529
    mov  ecx,273*65536+35
452 heavyiron 530
    inc  edx
3894 heavyiron 531
    or   edx,0x40000000
452 heavyiron 532
    mcall
533
 
3887 leency 534
    mov  ebx,14*65536+110
535
    mov  ecx,285*65536+22
3889 leency 536
    mov  esi,COL_DATE_BUTTONS
3894 heavyiron 537
    mov  edx,81
485 heavyiron 538
    mcall
539
 
3889 leency 540
    mov  esi,COL_MONTH_YEAR_B   ; new style
31 halyavin 541
    mov  edx,10
135 diamond 542
    or	 edx,1 shl 29+1 shl 30
31 halyavin 543
    mov  ebx,B_NS_X
544
    mov  ecx,B_NS_Y
452 heavyiron 545
    mcall
31 halyavin 546
    add  edx,1-1 shl 29
547
    mov  ebx,B_TODAY_X+8*(today_end-today_msg)
548
    mov  ecx,B_TODAY_Y
452 heavyiron 549
    mcall
31 halyavin 550
    mov  ecx,B_Y
551
    mov  ebx,B_MONTH_X
552
    mov  edx,2
452 heavyiron 553
    mcall
3889 leency 554
    mov  ebx,B_SPIN_X ; <
31 halyavin 555
    inc  edx
452 heavyiron 556
    mcall
3889 leency 557
    add  ebx,61 shl 16 ; >
31 halyavin 558
    inc  edx
452 heavyiron 559
    mcall
31 halyavin 560
    call draw_days
561
 
3891 leency 562
	; draw text in window
3894 heavyiron 563
    mcall 4,153*65536+287,0x80000000,sys_text
564
    mcall 4,183*65536+287, ,separator
565
    mcall  ,214*65536+287
566
    mcall  ,236*65536+287
567
    mcall  ,188*65536+274, ,plus
568
    mcall  ,188*65536+300, ,minus
3887 leency 569
    mcall  , 24*65536+292,0x00000000,set_date_t,15 ;set date text
452 heavyiron 570
 
3894 heavyiron 571
 
3891 leency 572
    mov  ecx,0x10ddeeff
31 halyavin 573
    mov  edx,n_style
574
    mov  esi,ns_end-n_style
575
    mov  ebx,B_NS
576
    cmp  [new_style],1
135 diamond 577
    je	 .high
31 halyavin 578
    mov  ecx,0xa0a0a0
579
    jmp  .int
580
  .high:
3887 leency 581
    mov  ecx,COL_NEW_STYLE_T
31 halyavin 582
  .int:
452 heavyiron 583
    mcall
31 halyavin 584
 
3887 leency 585
    mov  ecx,COL_GO_TODAY_T
31 halyavin 586
    mov  edx,today_msg
587
    mov  ebx,B_TODAY
588
    mov  esi,today_end-today_msg
452 heavyiron 589
    mcall
31 halyavin 590
 
591
    mov  ebx,B_SPIN
592
    mov  edx,spinner
3889 leency 593
    mov  esi,12
3890 leency 594
	mov  ecx,COL_DROPDOWN_T
452 heavyiron 595
    mcall
31 halyavin 596
 
597
    mov  edx,[Month]
598
    movzx  esi,byte[month_name]
599
    imul edx,esi
600
    add  edx,month_name+1
601
    mov  ebx,B_MONTH
602
    ShowFocus 2
452 heavyiron 603
    mcall
31 halyavin 604
 
605
    call draw_year
606
    mov  [dropped],0
3887 leency 607
    mcall 12,2
3889 leency 608
    ret
31 halyavin 609
 
610
draw_year:
3887 leency 611
    mcall 8,B_YEAR_X,B_Y,5,COL_MONTH_YEAR_B
31 halyavin 612
    ShowFocus 3,esi
613
    mcall 47,0x40001,Year,B_YEAR
614
    ret
615
 
616
draw_dropdown:
617
    mov  [dropped],1
618
    push [Month]
619
    pop  [focus]
620
    add  [focus],100
621
    mov  ecx,12
622
    mov  edx,100
623
    push dword month_name+1
624
    push dword B_DROP
625
    push dword B_Y+16 shl 16
626
  .ddd_loop:
627
    mov  edi,edx
628
    push ecx
3889 leency 629
    mov  esi,COL_DROPDOWN_BG
630
    mcall 8,B_MONTH_X,[esp+4]
31 halyavin 631
    shr  eax,1
632
    mov  ebx,[esp+8]
633
    xchg edx,[esp+12]
634
    movzx esi,byte[month_name]
635
    ShowFocus edi
452 heavyiron 636
    mcall
31 halyavin 637
    add  edx,esi
638
    xchg edx,[esp+12]
639
    add  dword[esp+8],16
640
    add  dword[esp+4],16 shl 16
641
    inc  edx
642
    pop  ecx
643
    loop .ddd_loop
644
    add  esp,12
645
    ret
646
 
647
draw_week:
648
    mov  eax,13
649
    mov  ebx,B_WBAR_X
650
    mov  ecx,B_WBAR_Y
3887 leency 651
    mov  edx,COL_WEEKDAY_BG
452 heavyiron 652
    mcall
31 halyavin 653
    movzx esi,byte[week_days]
654
    movzx edi,byte[week_days+1]
655
    mov  ebx,B_WEEK
656
    mov  ecx,7
657
    mov  edx,week_days+2
658
    mov  eax,4
659
  .week:
660
    push ecx
661
    cmp  ecx,edi
135 diamond 662
    je	 .holiday
31 halyavin 663
    mov  ecx,0x10000000
664
    jmp  .noholiday
665
  .holiday:
666
    mov  ecx,0x10cc1010
667
  .noholiday:
452 heavyiron 668
    mcall
31 halyavin 669
    add  edx,esi
670
    add  ebx,B_WX_SHIFT
671
    pop  ecx
672
    loop .week
673
    ret
674
 
675
draw_days:
676
    call count_days
677
    cmp  ecx,[day_sel]
678
    jae  .ok
679
    mov  [day_sel],ecx
680
  .ok:
681
    mov  [number],0
682
    mov  eax,47
683
    mov  edx,B_DAYS_Y
3889 leency 684
    mov  ebx,0x10001
31 halyavin 685
    mov  edi,[firstday]
686
  .dayloop:
687
    push ecx
688
    movzx edx,dx
689
    mov  esi,edi
690
    shl  esi,21
3889 leency 691
    lea  edx,[edx+esi+34 shl 16]
31 halyavin 692
    mov  ecx,edi
693
    add  cl,[week_days+1]
694
    cmp  ecx,7
135 diamond 695
    je	 .holiday
3891 leency 696
    mov  esi,0x10313138 ; COL_DATE_TEXT
31 halyavin 697
    jmp  .noholiday
698
  .holiday:
699
    mov  esi,0x10cc1010
700
  .noholiday:
701
    mov  ecx,number
702
    inc  dword[ecx]
703
    pusha
704
    mov  ebx,edx
3891 leency 705
    mov  bx,DATE_BUTTON_WIDTH-1
3887 leency 706
    sub  ebx,8 shl 16
31 halyavin 707
    shrd ecx,edx,16
3891 leency 708
    mov  cx,DATE_BUTTON_HEIGHT-1
3887 leency 709
    sub  ecx,12 shl 16
31 halyavin 710
    mov  edx,[number]
711
    cmp  edx,[day_sel]
135 diamond 712
    je	 .draw_sel
3887 leency 713
    mov  esi,COL_DATE_BUTTONS
31 halyavin 714
    jmp  .draw_but
3891 leency 715
.draw_sel:                                  ;draw selected button
716
	add  edx,1 shl 30
717
	add  edx,200+1 shl 29
718
	mcall 8
3890 leency 719
    cmp  [focus],4
3891 leency 720
    jne  .not_active
721
	DrawRect COL_DATE_ACTIVE_1,COL_DATE_ACTIVE_2,COL_DATE_ACTIVE_3,COL_DATE_ACTIVE_4
3892 leency 722
	jmp .out
3891 leency 723
.not_active:
724
	DrawRect COL_DATE_INACTIVE_1,COL_DATE_INACTIVE_2,COL_DATE_INACTIVE_3,COL_DATE_INACTIVE_4
3892 leency 725
	jmp .out
3891 leency 726
.draw_but:                                   ;draw non selected button
31 halyavin 727
    add  edx,200+1 shl 29
3889 leency 728
    mcall 8
3891 leency 729
	mov eax,[Year]
730
	cmp [curYear],eax
731
	jne .out
732
	mov eax,[Month]
733
	cmp [curMonth],eax
734
	jne .out
735
	mov eax,[number]
736
	cmp [curDay],eax
737
	jne .out
3892 leency 738
	mov edx,0xff0000
739
	mov bx,DATE_BUTTON_WIDTH-2
740
	mov cx,2
741
	add ebx,1 shl 16
742
	add ecx,27 shl 16
743
	mcall 13
3891 leency 744
.out:
3889 leency 745
	mov    eax, [number]
746
    xor    edx, edx
747
    mov    ecx, 10
748
    div    ecx
749
    mov    [remainder], edx
750
    mov    [quotient],  eax
751
	popa
752
 
753
	;first number
754
	mov ecx,quotient
755
    mcall
3887 leency 756
	add edx,1 shl 16
757
	mcall
758
	sub edx,1 shl 16
3889 leency 759
 
760
	;second number
761
	mov ecx,remainder
762
	add edx,9 shl 16
763
    mcall
764
	add edx,1 shl 16
765
	mcall
766
	sub edx,10 shl 16
767
 
768
 
31 halyavin 769
    pop  ecx
770
    inc  edi
771
    cmp  edi,7
772
    jne  .nowrap
773
    xor  edi,edi
774
    add  dx,B_DAYS_SHIFT
775
  .nowrap:
776
    loop .eloop
777
    jmp  .ex
778
  .eloop:
779
    jmp  .dayloop
780
  .ex:
781
    ret
782
 
783
count_days:    ; ecx -days in month
784
    call is_leap_year
785
    mov  ecx,[Month]
786
    mov  eax,1
787
    movzx ecx,byte[day_count+ecx]
788
    add  ecx,28
789
    cmp  eax,[leap_year]
790
    jne  .noleap
791
    cmp  eax,[Month]
792
    jne  .noleap
793
    inc  ecx
794
  .noleap:
795
    mov  [day_bounds+3],cl
796
    mov  [day_bounds+7],cl
797
    ret
798
 
799
is_leap_year:
800
    mov  [leap_year],0
801
    mov  eax,[Year]
802
    mov  bl,100
135 diamond 803
    div  bl	     ; ah=Year mod 100, al=Year%100
31 halyavin 804
    test ah,ah
135 diamond 805
    jz	.century
806
    shr  ax,8	     ; ax - last 2 digits
31 halyavin 807
  .century:
808
    test al,11b
809
    jnz  .noleap
810
    inc  [leap_year]
811
  .noleap:
812
    ret
813
 
814
calculate:
815
    mov  ebx,[Year]
816
    mov  eax,[Month]
817
    sub  eax,2
818
    jge  .nojf
819
    dec  ebx
820
    add  eax,12
821
  .nojf:
822
    add  eax,4
823
    xor  edx,edx
824
    mov  ecx,153
825
    imul cx
826
    mov  ecx,5
827
    div  cx
828
    inc  eax
829
    mov  ecx,365
830
    imul ecx,ebx
831
    add  eax,ecx
832
    mov  ecx,ebx
833
    shr  ecx,2
834
    add  eax,ecx
835
    dec  eax
836
    cmp  [new_style],0
135 diamond 837
    je	 .nonew
31 halyavin 838
    add  eax,2
839
    xchg eax,ebx
840
    mov  ecx,100
841
    xor  edx,edx
842
    div  cx
843
    sub  ebx,eax
844
    shr  eax,2
845
    add  ebx,eax
846
  .nonew:
847
    add  ebx,5
848
    mov  eax,ebx
849
    xor  edx,edx
850
    movzx ebx,byte[week_days+1]
851
    sub  eax,ebx
852
    inc  eax
853
    mov  ebx,7
854
    div  bx
855
    mov  [firstday],edx
856
    ret
857
 
3889 leency 858
I_END:
859
 
31 halyavin 860
firstday  dd ?
861
Year dd   ?
862
Month dd  ?
863
day_sel   dd ?
864
 
865
datestr   dd  ?
866
leap_year dd ?
135 diamond 867
number	  dd ?