--- np2/win9x/dclock.cpp 2003/10/16 17:58:52 1.1 +++ np2/win9x/dclock.cpp 2005/02/16 09:31:55 1.5 @@ -8,20 +8,13 @@ #include "palettes.h" - DCLOCK_T dclock; - BYTE dclock_dat[(DCLOCK_X * DCLOCK_Y / 8) + 4]; - RGB32 dclock_pal[4]; - -static BYTE dclocky[13] = {0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3}; -#define DCLOCKY_MAX 13 - -static DWORD outcolors[4][16]; -static UINT16 outcolors16[4]; + _DCLOCK dclock; + DCLOCKPAL dclockpal; // ------------------------------------------------------------------ font1 -static BYTE clockchr1[11][16] = { +static const UINT8 clockchr1[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78,}, {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,}, @@ -34,17 +27,17 @@ static BYTE clockchr1[11][16] = { {0x78, 0xcc, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0xcc, 0x78,}, {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70,}}; -static DCLOCK_POS dclockpos1[6] = { - {&dclock_dat[0], (WORD)(~0x00fc), 0, 0}, - {&dclock_dat[0], (WORD)(~0xf801), 7, 0}, - {&dclock_dat[2], (WORD)(~0x801f), 3, 0}, - {&dclock_dat[3], (WORD)(~0x003f), 2, 0}, - {&dclock_dat[4], (WORD)(~0xf003), 6, 0}, - {&dclock_dat[5], (WORD)(~0xe007), 5, 0}}; +static const DCPOS dclockpos1[6] = { + {dclock.dat + 0, (UINT16)(~0x00fc), 0, 0}, + {dclock.dat + 0, (UINT16)(~0xf801), 7, 0}, + {dclock.dat + 2, (UINT16)(~0x801f), 3, 0}, + {dclock.dat + 3, (UINT16)(~0x003f), 2, 0}, + {dclock.dat + 4, (UINT16)(~0xf003), 6, 0}, + {dclock.dat + 5, (UINT16)(~0xe007), 5, 0}}; static void resetfont1(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -53,17 +46,18 @@ static void resetfont1(void) { else { pat = 0x30008001; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 4 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 5 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 9 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------ font2 // 5x9 -static BYTE clockchr2[11][16] = { +static const UINT8 clockchr2[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x00, 0x00, 0x30, 0x48, 0x88, 0x88, 0x88, 0x88, 0x70,}, {0x10, 0x30, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20,}, @@ -76,17 +70,17 @@ static BYTE clockchr2[11][16] = { {0x38, 0x44, 0x44, 0x48, 0x30, 0x48, 0x88, 0x88, 0x70,}, {0x18, 0x24, 0x40, 0x44, 0x48, 0x38, 0x10, 0x20, 0x20,}}; -static DCLOCK_POS dclockpos2[6] = { - {&dclock_dat[0], (WORD)(~0x00fc), 0, 0}, - {&dclock_dat[0], (WORD)(~0xf003), 6, 0}, - {&dclock_dat[2], (WORD)(~0x00fc), 0, 0}, - {&dclock_dat[2], (WORD)(~0xf003), 6, 0}, - {&dclock_dat[4], (WORD)(~0x00fc), 0, 0}, - {&dclock_dat[4], (WORD)(~0xf003), 6, 0}}; +static const DCPOS dclockpos2[6] = { + {dclock.dat + 0, (UINT16)(~0x00fc), 0, 0}, + {dclock.dat + 0, (UINT16)(~0xf003), 6, 0}, + {dclock.dat + 2, (UINT16)(~0x00fc), 0, 0}, + {dclock.dat + 2, (UINT16)(~0xf003), 6, 0}, + {dclock.dat + 4, (UINT16)(~0x00fc), 0, 0}, + {dclock.dat + 4, (UINT16)(~0xf003), 6, 0}}; static void resetfont2(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -95,18 +89,19 @@ static void resetfont2(void) { else { pat = 0x00020002; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 4 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 5 * DCLOCK_YALIGN)) = pat; pat <<= 1; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 9 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------ font3 // 4x9 -static BYTE clockchr3[11][16] = { +static const UINT8 clockchr3[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x60, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60,}, {0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,}, @@ -119,17 +114,17 @@ static BYTE clockchr3[11][16] = { {0x60, 0x90, 0x90, 0x90, 0x60, 0x90, 0x90, 0x90, 0x60,}, {0x60, 0x90, 0x90, 0x90, 0x70, 0x10, 0x90, 0x90, 0x60,}}; -static DCLOCK_POS dclockpos3[6] = { - {&dclock_dat[0], (WORD)(~0x00f0), 0, 0}, - {&dclock_dat[0], (WORD)(~0x8007), 5, 0}, - {&dclock_dat[1], (WORD)(~0xc003), 6, 0}, - {&dclock_dat[2], (WORD)(~0x001e), 3, 0}, - {&dclock_dat[3], (WORD)(~0x000f), 4, 0}, - {&dclock_dat[4], (WORD)(~0x0078), 1, 0}}; +static const DCPOS dclockpos3[6] = { + {dclock.dat + 0, (UINT16)(~0x00f0), 0, 0}, + {dclock.dat + 0, (UINT16)(~0x8007), 5, 0}, + {dclock.dat + 1, (UINT16)(~0xc003), 6, 0}, + {dclock.dat + 2, (UINT16)(~0x001e), 3, 0}, + {dclock.dat + 3, (UINT16)(~0x000f), 4, 0}, + {dclock.dat + 4, (UINT16)(~0x0078), 1, 0}}; static void resetfont3(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -138,17 +133,18 @@ static void resetfont3(void) { else { pat = 0x00400010; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 4 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 5 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 9 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------ font4 // 5x8 -static BYTE clockchr4[11][16] = { +static const UINT8 clockchr4[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, {0x00, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70,}, @@ -163,7 +159,7 @@ static BYTE clockchr4[11][16] = { static void resetfont4(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -172,16 +168,17 @@ static void resetfont4(void) { else { pat = 0x00040004; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*6+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 5 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 6 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 9 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------ font5 -static BYTE clockchr5[11][16] = { +static const UINT8 clockchr5[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, {0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20,}, @@ -194,17 +191,17 @@ static BYTE clockchr5[11][16] = { {0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70,}, {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x10, 0x60,}}; -static DCLOCK_POS dclockpos5[6] = { - {&dclock_dat[0], (WORD)(~0x00f8), 0, 0}, - {&dclock_dat[0], (WORD)(~0xe003), 6, 0}, - {&dclock_dat[2], (WORD)(~0x007c), 1, 0}, - {&dclock_dat[2], (WORD)(~0xf001), 7, 0}, - {&dclock_dat[4], (WORD)(~0x003e), 2, 0}, - {&dclock_dat[5], (WORD)(~0x00f8), 0, 0}}; +static const DCPOS dclockpos5[6] = { + {dclock.dat + 0, (UINT16)(~0x00f8), 0, 0}, + {dclock.dat + 0, (UINT16)(~0xe003), 6, 0}, + {dclock.dat + 2, (UINT16)(~0x007c), 1, 0}, + {dclock.dat + 2, (UINT16)(~0xf001), 7, 0}, + {dclock.dat + 4, (UINT16)(~0x003e), 2, 0}, + {dclock.dat + 5, (UINT16)(~0x00f8), 0, 0}}; static void resetfont5(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -213,17 +210,18 @@ static void resetfont5(void) { else { pat = 0x00030006; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*6+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*7+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 6 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 7 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 9 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------ font6 // 4x6 -static BYTE clockchr6[11][16] = { +static const UINT8 clockchr6[11][16] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60,}, {0x00, 0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20,}, @@ -236,17 +234,17 @@ static BYTE clockchr6[11][16] = { {0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x90, 0x60,}, {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x70, 0x20, 0x40,}}; -static DCLOCK_POS dclockpos6[6] = { - {&dclock_dat[0], (WORD)(~0x00f0), 0, 0}, - {&dclock_dat[0], (WORD)(~0x8007), 5, 0}, - {&dclock_dat[1], (WORD)(~0x000f), 4, 0}, - {&dclock_dat[2], (WORD)(~0x0078), 1, 0}, - {&dclock_dat[3], (WORD)(~0x00f0), 0, 0}, - {&dclock_dat[3], (WORD)(~0x8007), 5, 0}}; +static const DCPOS dclockpos6[6] = { + {dclock.dat + 0, (UINT16)(~0x00f0), 0, 0}, + {dclock.dat + 0, (UINT16)(~0x8007), 5, 0}, + {dclock.dat + 1, (UINT16)(~0x000f), 4, 0}, + {dclock.dat + 2, (UINT16)(~0x0078), 1, 0}, + {dclock.dat + 3, (UINT16)(~0x00f0), 0, 0}, + {dclock.dat + 3, (UINT16)(~0x8007), 5, 0}}; static void resetfont6(void) { - DWORD pat; + UINT32 pat; if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -255,15 +253,21 @@ static void resetfont6(void) { else { pat = 0x00000220; } - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*8+1]) = pat; - *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; + *(UINT32 *)(dclock.dat + 1 + ( 8 * DCLOCK_YALIGN)) = pat; + *(UINT32 *)(dclock.dat + 1 + (10 * DCLOCK_YALIGN)) = pat; } } + // ------------------------------------------------------------------------ -static DCLOCK_FNT dclock_font = {clockchr1[0], dclockpos1, resetfont1}; -static DCLOCK_FNT fonttype[] = +typedef struct { +const UINT8 *fnt; +const DCPOS *pos; + void (*init)(void); +} DCLOCKFNT; + +static const DCLOCKFNT fonttype[] = {{clockchr1[0], dclockpos1, resetfont1}, {clockchr2[0], dclockpos2, resetfont2}, {clockchr3[0], dclockpos3, resetfont3}, @@ -271,17 +275,20 @@ static DCLOCK_FNT fonttype[] = {clockchr5[0], dclockpos5, resetfont5}, {clockchr6[0], dclockpos6, resetfont6}}; + // ------------------------------------------------------------------------ void dclock_init(void) { - pal_makegrad(dclock_pal, 4, np2oscfg.clk_color1, np2oscfg.clk_color2); + pal_makegrad(dclockpal.pal32, 4, + np2oscfg.clk_color1, np2oscfg.clk_color2); } -void dclock_init8(void) { +static void dclock_palset8(void) { - BYTE i, j; - DWORD work = 0; // vc++4.2 + UINT8 i; + UINT8 j; + UINT32 work = 0; // vc++4.2 for (i=0; i<16; i++) { for (j=1; j<0x10; j<<=1) { @@ -291,25 +298,41 @@ void dclock_init8(void) { } } for (j=0; j<4; j++) { - outcolors[j][i] = work * (START_PALORG + j); + dclockpal.pal8[j][i] = work * (START_PALORG + j); } } } -void dclock_init16(void) { +static void dclock_palset16(void) { UINT i; for (i=0; i<4; i++) { - outcolors16[i] = scrnmng_makepal16(dclock_pal[i]); + dclockpal.pal16[i] = scrnmng_makepal16(dclockpal.pal32[i]); } } +void dclock_palset(UINT bpp) { + + switch(bpp) { + case 8: + dclock_palset8(); + break; + + case 16: + dclock_palset16(); + break; + } +} + + + void dclock_reset(void) { +const DCLOCKFNT *fnt; + ZeroMemory(&dclock, sizeof(dclock)); - ZeroMemory(&dclock_dat, sizeof(dclock_dat)); if (np2oscfg.clk_x) { if (np2oscfg.clk_x <= 4) { @@ -322,12 +345,15 @@ void dclock_reset(void) { np2oscfg.clk_x = 0; } } - if (np2oscfg.clk_fnt >= (sizeof(fonttype) / sizeof(DCLOCK_FNT))) { + if (np2oscfg.clk_fnt >= NELEMENTS(fonttype)) { np2oscfg.clk_fnt = 0; } - dclock_font = fonttype[np2oscfg.clk_fnt]; - dclock_font.init(); + dclock.clk_x = np2oscfg.clk_x; + fnt = fonttype + np2oscfg.clk_fnt; + dclock.fnt = fnt->fnt; + dclock.pos = fnt->pos; + fnt->init(); dclock_callback(); dclock_redraw(); } @@ -335,25 +361,25 @@ void dclock_reset(void) { void dclock_callback(void) { int i; - BYTE count = 13; - BYTE buf[8]; + UINT8 count = 13; + UINT8 buf[8]; _SYSTIME st; - if ((scrnmng_isfullscreen()) && (np2oscfg.clk_x)) { + if ((scrnmng_isfullscreen()) && (dclock.clk_x)) { timemng_gettime(&st); buf[0] = (st.hour / 10) + 1; buf[1] = (st.hour % 10) + 1; buf[2] = (st.minute / 10) + 1; buf[3] = (st.minute % 10) + 1; - if (np2oscfg.clk_x > 4) { + if (dclock.clk_x > 4) { buf[4] = (st.second / 10) + 1; buf[5] = (st.second % 10) + 1; } - for (i=np2oscfg.clk_x; i--;) { - if (dclock.dclock_now[i] != buf[i]) { - dclock.dclock_now[i] = buf[i]; - dclock.dclock_flm[i] = count; - dclock.dclock_drawing |= (1 << i); + for (i=dclock.clk_x; i--;) { + if (dclock.now[i] != buf[i]) { + dclock.now[i] = buf[i]; + dclock.flm[i] = count; + dclock.drawing |= (1 << i); count += 4; } } @@ -362,214 +388,13 @@ void dclock_callback(void) { void dclock_redraw(void) { - dclock.dclock_drawing = 0x3f; + dclock.drawing = 0x3f; } BOOL dclock_disp(void) { - return((dclock.dclock_drawing != 0) || - (*(DWORD *)(&dclock.dclock_flm[0]) != 0) || - (*(DWORD *)(&dclock.dclock_flm[4]) != 0)); -} - -LABEL void __fastcall dclock_cntdown(BYTE value) { - - __asm { - cmp np2oscfg.clk_x, 0 - je dclock_cdn - cmp dword ptr (dclock.dclock_flm), 0 - jne dclock_cdn - cmp dword ptr (dclock.dclock_flm + 4), 0 - jne dclock_cdn - ret - -dclock_cdn: push ecx - xor edx, edx - cmp cl, 0 - jne dclock_cdnlp - inc cl -dclock_cdnlp: movzx eax, dclock[edx].dclock_flm - cmp eax, 0 - je dclock_cdned - cmp eax, DCLOCKY_MAX - jae dclock_upabove - mov ch, dclocky[eax] - sub al, cl - jc dclock_set0 - cmp ch, dclocky[eax] - je dclock_outflm - jmp dclock_setdraw - -dclock_upabove: sub al, cl - jc dclock_set0 - cmp al, DCLOCKY_MAX - jae dclock_outflm - jmp dclock_setdraw -dclock_set0: xor eax, eax -dclock_setdraw: bts dclock.dclock_drawing, dx -dclock_outflm: mov dclock[edx].dclock_flm, al -dclock_cdned: inc edx - cmp dl, np2oscfg.clk_x - jc dclock_cdnlp - pop ecx - ret - } -} - -LABEL void dclock_make(void) { - - __asm { - cmp np2oscfg.clk_x, 0 - je dclockmakeend - pushad - xor ebx, ebx -makedclock_lp: btr dclock.dclock_drawing, bx - jc makedclock_1 -makedclock_ed: inc ebx - cmp bl, np2oscfg.clk_x - jc makedclock_lp - popad -dclockmakeend: ret - -makedclock_1: mov eax, dclock_font.dclock_put - lea eax, [eax + ebx*8] - mov edi, [eax]DCLOCK_POS.dclock_pos - mov dx, [eax]DCLOCK_POS.dclock_mask - mov cl, [eax]DCLOCK_POS.dclock_rolbit - movzx eax, dclock[ebx].dclock_flm - cmp eax, 0 - je makedclock_y0 - cmp eax, DCLOCKY_MAX - jb makedclock_ani - movzx eax, dclock[ebx].dclock_bak - jmp makedclock0put - -makedclock_y0: movzx eax, dclock[ebx].dclock_now - mov dclock[ebx].dclock_bak, al - -makedclock0put: mov ch, 3 -makedclock0_up: and [edi], dx - add edi, (DCLOCK_X / 8) - dec ch - jne makedclock0_up - shl eax, 4 - add eax, dclock_font.dclock_fnt - mov esi, eax - mov ch, 9 -makedclock0_dn: movzx eax, byte ptr [esi] - ror ax, cl - and [edi], dx - or [edi], ax - inc esi - add edi, (DCLOCK_X / 8) - dec ch - jne makedclock0_dn - jmp makedclock_ed - -makedclock_ani: movzx eax, dclocky[eax] - push eax - mov ch, 3 - sub ch, al - je makedclock_an2 -makedclkani_up: and [edi], dx - add edi, (DCLOCK_X / 8) - dec ch - jne makedclkani_up -makedclock_an2: movzx esi, dclock[ebx].dclock_now - shl esi, 4 - add esi, dclock_font.dclock_fnt - mov ch, 9 -makedclkani_md: movzx eax, byte ptr [esi] - ror ax, cl - and [edi], dx - or [edi], ax - inc esi - add edi, (DCLOCK_X / 8) - dec ch - jne makedclkani_md - pop eax - - mov ch, al - movzx esi, dclock[ebx].dclock_bak - shl esi, 4 - sub esi, eax - add esi, 9 - add esi, dclock_font.dclock_fnt -makedclkani_dn: movzx eax, byte ptr [esi] - ror ax, cl - and [edi], dx - or [edi], ax - inc esi - add edi, (DCLOCK_X / 8) - dec ch - jne makedclkani_dn - jmp makedclock_ed - } -} - -LABEL void __fastcall dclock_out8(void *ptr, DWORD width) { - - __asm { - pushad - mov esi, offset dclock_dat - mov edi, offset outcolors - mov bh, 4 -dclockout_lp1: mov bl, 3 -dclockout_lp2: mov ebp, (DCLOCK_X/8) -dclockout_lp3: movzx eax, byte ptr [esi] - shr eax, 4 - mov eax, [eax*4 + edi] - mov [ecx], eax - movzx eax, byte ptr [esi] - and eax, 15 - mov eax, [eax*4 + edi] - mov [ecx+4], eax - inc esi - add ecx, 8 - dec ebp - jne dclockout_lp3 - lea ecx, [ecx + edx - DCLOCK_X] - dec bl - jne dclockout_lp2 - add edi, 4*16 - dec bh - jne dclockout_lp1 - popad - ret - } -} - -LABEL void __fastcall dclock_out16(void *ptr, DWORD width) { - - __asm { - pushad - mov esi, offset dclock_dat - mov edi, offset outcolors16 - mov bh, 4 -dclockout_lp1: mov bl, 3 -dclockout_lp2: push ebx - mov ebp, (DCLOCK_X/8) -dclockout_lp3: mov bl, [esi] - mov bh, 8 -dclockout_lp4: rcl bl, 1 - sbb ax, ax - and ax, [edi] - mov [ecx], ax - add ecx, 2 - dec bh - jne dclockout_lp4 - inc esi - dec ebp - jne dclockout_lp3 - pop ebx - lea ecx, [ecx + edx - DCLOCK_X*2] - dec bl - jne dclockout_lp2 - add edi, 2 - dec bh - jne dclockout_lp1 - popad - ret - } + return((dclock.drawing != 0) || + (*(UINT32 *)(dclock.flm + 0) != 0) || + (*(UINT32 *)(dclock.flm + 4) != 0)); }