| version 1.1, 2004/08/01 05:31:31 | version 1.3, 2004/08/08 09:12:06 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 | #include        <time.h> |  | 
 | #include        "parts.h" | #include        "parts.h" | 
 | #include        "xmil.h" | #include        "xmil.h" | 
 | #include        "scrnmng.h" | #include        "scrnmng.h" | 
 |  | #include        "timemng.h" | 
 | #include        "dclock.h" | #include        "dclock.h" | 
 | #include        "palettes.h" |  | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 |  | #include        "palettes.h" | 
 |  |  | 
 |  |  | 
| DCLOCK_T        dclock; | _DCLOCK         dclock; | 
| BYTE            dclock_dat[(DCLOCK_X * DCLOCK_Y / 8) + 4]; | DCLOCKPAL       dclockpal; | 
| 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  WORD    outcolors16[4]; |  | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font1 | // ------------------------------------------------------------------ font1 | 
 |  |  | 
| static  BYTE clockchr1[11][16] = { | static const UINT8 clockchr1[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78,}, | {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78,}, | 
 | {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,}, | {0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,}, | 
| Line 34  static BYTE clockchr1[11][16] = { | Line 27  static BYTE clockchr1[11][16] = { | 
 | {0x78, 0xcc, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0xcc, 0x78,}, | {0x78, 0xcc, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0xcc, 0x78,}, | 
 | {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70,}}; | {0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70,}}; | 
 |  |  | 
| static  DCLOCK_POS dclockpos1[6] = { | static const DCPOS dclockpos1[6] = { | 
| {&dclock_dat[0], (WORD)(~0x00fc), 0, 0}, | {&dclock.dat[0], (UINT16)(~0x00fc), 0, 0}, | 
| {&dclock_dat[0], (WORD)(~0xf801), 7, 0}, | {&dclock.dat[0], (UINT16)(~0xf801), 7, 0}, | 
| {&dclock_dat[2], (WORD)(~0x801f), 3, 0}, | {&dclock.dat[2], (UINT16)(~0x801f), 3, 0}, | 
| {&dclock_dat[3], (WORD)(~0x003f), 2, 0}, | {&dclock.dat[3], (UINT16)(~0x003f), 2, 0}, | 
| {&dclock_dat[4], (WORD)(~0xf003), 6, 0}, | {&dclock.dat[4], (UINT16)(~0xf003), 6, 0}, | 
| {&dclock_dat[5], (WORD)(~0xe007), 5, 0}}; | {&dclock.dat[5], (UINT16)(~0xe007), 5, 0}}; | 
 |  |  | 
| static void resetfont1(void) { | static void resetfont1(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00008001; | pat = 0x00008001; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x30008001; | pat = 0x30008001; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*4+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*5+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*9+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font2 | // ------------------------------------------------------------------ font2 | 
 |  |  | 
 | // 5x9 | // 5x9 | 
| static  BYTE clockchr2[11][16] = { | static const UINT8 clockchr2[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x00, 0x00, 0x30, 0x48, 0x88, 0x88, 0x88, 0x88, 0x70,}, | {0x00, 0x00, 0x30, 0x48, 0x88, 0x88, 0x88, 0x88, 0x70,}, | 
 | {0x10, 0x30, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20,}, | {0x10, 0x30, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20,}, | 
| Line 76  static BYTE clockchr2[11][16] = { | Line 70  static BYTE clockchr2[11][16] = { | 
 | {0x38, 0x44, 0x44, 0x48, 0x30, 0x48, 0x88, 0x88, 0x70,}, | {0x38, 0x44, 0x44, 0x48, 0x30, 0x48, 0x88, 0x88, 0x70,}, | 
 | {0x18, 0x24, 0x40, 0x44, 0x48, 0x38, 0x10, 0x20, 0x20,}}; | {0x18, 0x24, 0x40, 0x44, 0x48, 0x38, 0x10, 0x20, 0x20,}}; | 
 |  |  | 
| static  DCLOCK_POS dclockpos2[6] = { | static const DCPOS dclockpos2[6] = { | 
| {&dclock_dat[0], (WORD)(~0x00fc), 0, 0}, | {&dclock.dat[0], (UINT16)(~0x00fc), 0, 0}, | 
| {&dclock_dat[0], (WORD)(~0xf003), 6, 0}, | {&dclock.dat[0], (UINT16)(~0xf003), 6, 0}, | 
| {&dclock_dat[2], (WORD)(~0x00fc), 0, 0}, | {&dclock.dat[2], (UINT16)(~0x00fc), 0, 0}, | 
| {&dclock_dat[2], (WORD)(~0xf003), 6, 0}, | {&dclock.dat[2], (UINT16)(~0xf003), 6, 0}, | 
| {&dclock_dat[4], (WORD)(~0x00fc), 0, 0}, | {&dclock.dat[4], (UINT16)(~0x00fc), 0, 0}, | 
| {&dclock_dat[4], (WORD)(~0xf003), 6, 0}}; | {&dclock.dat[4], (UINT16)(~0xf003), 6, 0}}; | 
 |  |  | 
| static void resetfont2(void) { | static void resetfont2(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00000002; | pat = 0x00000002; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x00020002; | pat = 0x00020002; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*4+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*5+1]) = pat; | 
 | pat <<= 1; | pat <<= 1; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*9+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font3 | // ------------------------------------------------------------------ font3 | 
 |  |  | 
 | // 4x9 | // 4x9 | 
| static  BYTE clockchr3[11][16] = { | static const UINT8 clockchr3[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x60, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60,}, | {0x60, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x60,}, | 
 | {0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,}, | {0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,}, | 
| Line 119  static BYTE clockchr3[11][16] = { | Line 114  static BYTE clockchr3[11][16] = { | 
 | {0x60, 0x90, 0x90, 0x90, 0x60, 0x90, 0x90, 0x90, 0x60,}, | {0x60, 0x90, 0x90, 0x90, 0x60, 0x90, 0x90, 0x90, 0x60,}, | 
 | {0x60, 0x90, 0x90, 0x90, 0x70, 0x10, 0x90, 0x90, 0x60,}}; | {0x60, 0x90, 0x90, 0x90, 0x70, 0x10, 0x90, 0x90, 0x60,}}; | 
 |  |  | 
| static  DCLOCK_POS dclockpos3[6] = { | static const DCPOS dclockpos3[6] = { | 
| {&dclock_dat[0], (WORD)(~0x00f0), 0, 0}, | {&dclock.dat[0], (UINT16)(~0x00f0), 0, 0}, | 
| {&dclock_dat[0], (WORD)(~0x8007), 5, 0}, | {&dclock.dat[0], (UINT16)(~0x8007), 5, 0}, | 
| {&dclock_dat[1], (WORD)(~0xc003), 6, 0}, | {&dclock.dat[1], (UINT16)(~0xc003), 6, 0}, | 
| {&dclock_dat[2], (WORD)(~0x001e), 3, 0}, | {&dclock.dat[2], (UINT16)(~0x001e), 3, 0}, | 
| {&dclock_dat[3], (WORD)(~0x000f), 4, 0}, | {&dclock.dat[3], (UINT16)(~0x000f), 4, 0}, | 
| {&dclock_dat[4], (WORD)(~0x0078), 1, 0}}; | {&dclock.dat[4], (UINT16)(~0x0078), 1, 0}}; | 
 |  |  | 
| static void resetfont3(void) { | static void resetfont3(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00000010; | pat = 0x00000010; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x00400010; | pat = 0x00400010; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*4+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*4+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*5+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*9+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font4 | // ------------------------------------------------------------------ font4 | 
 |  |  | 
 | // 5x8 | // 5x8 | 
| static  BYTE clockchr4[11][16] = { | static const UINT8 clockchr4[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, | {0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, | 
 | {0x00, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70,}, | {0x00, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70,}, | 
| Line 161  static BYTE clockchr4[11][16] = { | Line 157  static BYTE clockchr4[11][16] = { | 
 | {0x00, 0x70, 0x88, 0x88, 0x70, 0x50, 0x88, 0x88, 0x70,}, | {0x00, 0x70, 0x88, 0x88, 0x70, 0x50, 0x88, 0x88, 0x70,}, | 
 | {0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x10, 0x20, 0xc0,}}; | {0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x10, 0x20, 0xc0,}}; | 
 |  |  | 
| static void resetfont4(void) { | static void resetfont4(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00000004; | pat = 0x00000004; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x00040004; | pat = 0x00040004; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*5+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*5+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*6+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*6+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*9+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font5 | // ------------------------------------------------------------------ font5 | 
 |  |  | 
| static  BYTE clockchr5[11][16] = { | static const UINT8 clockchr5[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, | {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x88, 0x88, 0x70,}, | 
 | {0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20,}, | {0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20, 0x20,}, | 
| Line 194  static BYTE clockchr5[11][16] = { | Line 191  static BYTE clockchr5[11][16] = { | 
 | {0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70,}, | {0x00, 0x00, 0x70, 0x88, 0x88, 0x70, 0x88, 0x88, 0x70,}, | 
 | {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x10, 0x60,}}; | {0x00, 0x00, 0x70, 0x88, 0x88, 0x88, 0x78, 0x10, 0x60,}}; | 
 |  |  | 
| static  DCLOCK_POS dclockpos5[6] = { | static const DCPOS dclockpos5[6] = { | 
| {&dclock_dat[0], (WORD)(~0x00f8), 0, 0}, | {&dclock.dat[0], (UINT16)(~0x00f8), 0, 0}, | 
| {&dclock_dat[0], (WORD)(~0xe003), 6, 0}, | {&dclock.dat[0], (UINT16)(~0xe003), 6, 0}, | 
| {&dclock_dat[2], (WORD)(~0x007c), 1, 0}, | {&dclock.dat[2], (UINT16)(~0x007c), 1, 0}, | 
| {&dclock_dat[2], (WORD)(~0xf001), 7, 0}, | {&dclock.dat[2], (UINT16)(~0xf001), 7, 0}, | 
| {&dclock_dat[4], (WORD)(~0x003e), 2, 0}, | {&dclock.dat[4], (UINT16)(~0x003e), 2, 0}, | 
| {&dclock_dat[5], (WORD)(~0x00f8), 0, 0}}; | {&dclock.dat[5], (UINT16)(~0x00f8), 0, 0}}; | 
 |  |  | 
| static void resetfont5(void) { | static void resetfont5(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00000006; | pat = 0x00000006; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x00030006; | pat = 0x00030006; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*6+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*6+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*7+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*7+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*9+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*9+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------ font6 | // ------------------------------------------------------------------ font6 | 
 |  |  | 
 | // 4x6 | // 4x6 | 
| static  BYTE clockchr6[11][16] = { | static const UINT8 clockchr6[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}, | 
 | {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60,}, | {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x90, 0x90, 0x60,}, | 
 | {0x00, 0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20,}, | {0x00, 0x00, 0x00, 0x20, 0x60, 0x20, 0x20, 0x20, 0x20,}, | 
| Line 236  static BYTE clockchr6[11][16] = { | Line 234  static BYTE clockchr6[11][16] = { | 
 | {0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x90, 0x60,}, | {0x00, 0x00, 0x00, 0x60, 0x90, 0x60, 0x90, 0x90, 0x60,}, | 
 | {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x70, 0x20, 0x40,}}; | {0x00, 0x00, 0x00, 0x60, 0x90, 0x90, 0x70, 0x20, 0x40,}}; | 
 |  |  | 
| static  DCLOCK_POS dclockpos6[6] = { | static const DCPOS dclockpos6[6] = { | 
| {&dclock_dat[0], (WORD)(~0x00f0), 0, 0}, | {&dclock.dat[0], (UINT16)(~0x00f0), 0, 0}, | 
| {&dclock_dat[0], (WORD)(~0x8007), 5, 0}, | {&dclock.dat[0], (UINT16)(~0x8007), 5, 0}, | 
| {&dclock_dat[1], (WORD)(~0x000f), 4, 0}, | {&dclock.dat[1], (UINT16)(~0x000f), 4, 0}, | 
| {&dclock_dat[2], (WORD)(~0x0078), 1, 0}, | {&dclock.dat[2], (UINT16)(~0x0078), 1, 0}, | 
| {&dclock_dat[3], (WORD)(~0x00f0), 0, 0}, | {&dclock.dat[3], (UINT16)(~0x00f0), 0, 0}, | 
| {&dclock_dat[3], (WORD)(~0x8007), 5, 0}}; | {&dclock.dat[3], (UINT16)(~0x8007), 5, 0}}; | 
 |  |  | 
| static void resetfont6(void) { | static void resetfont6(UINT8 clockx) { | 
 |  |  | 
| DWORD pat; | UINT32  pat; | 
 |  |  | 
| if (xmiloscfg.clockx) { | if (clockx) { | 
| if (xmiloscfg.clockx <= 4) { | if (clockx <= 4) { | 
 | pat = 0x00000020; | pat = 0x00000020; | 
 | } | } | 
 | else { | else { | 
 | pat = 0x00000220; | pat = 0x00000220; | 
 | } | } | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*8+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*8+1]) = pat; | 
| *(DWORD *)(&dclock_dat[(DCLOCK_X/8)*10+1]) = pat; | *(UINT32 *)(&dclock.dat[(DCLOCK_X/8)*10+1]) = pat; | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------------ | // ------------------------------------------------------------------------ | 
 |  |  | 
| static DCLOCK_FNT dclock_font = {clockchr1[0], dclockpos1, resetfont1}; | typedef struct { | 
| static DCLOCK_FNT fonttype[] = | const UINT8     *fnt; | 
|  | const DCPOS     *pos; | 
|  | void    (*init)(UINT8 clockx); | 
|  | } DCLOCKFNT; | 
|  |  | 
|  | static const DCLOCKFNT fonttype[] = | 
 | {{clockchr1[0], dclockpos1, resetfont1}, | {{clockchr1[0], dclockpos1, resetfont1}, | 
 | {clockchr2[0], dclockpos2, resetfont2}, | {clockchr2[0], dclockpos2, resetfont2}, | 
 | {clockchr3[0], dclockpos3, resetfont3}, | {clockchr3[0], dclockpos3, resetfont3}, | 
| Line 271  static DCLOCK_FNT fonttype[] = | Line 275  static DCLOCK_FNT fonttype[] = | 
 | {clockchr5[0], dclockpos5, resetfont5}, | {clockchr5[0], dclockpos5, resetfont5}, | 
 | {clockchr6[0], dclockpos6, resetfont6}}; | {clockchr6[0], dclockpos6, resetfont6}}; | 
 |  |  | 
 |  |  | 
 | // ------------------------------------------------------------------------ | // ------------------------------------------------------------------------ | 
 |  |  | 
 | void dclock_init(void) { | void dclock_init(void) { | 
 |  |  | 
| pal_makegrad(dclock_pal, 4, xmiloscfg.clockcolor1, xmiloscfg.clockcolor2); | pal_makegrad(dclockpal.pal32, 4, | 
|  | xmiloscfg.clockcolor1, xmiloscfg.clockcolor2); | 
 | } | } | 
 |  |  | 
 | void dclock_init8(void) { | void dclock_init8(void) { | 
 |  |  | 
| BYTE    i, j; | UINT    i; | 
| DWORD   work = 0;                                                       // vc++4.2 | UINT    j; | 
|  | UINT32  work; | 
 |  |  | 
 |  | work = 0; | 
 | for (i=0; i<16; i++) { | for (i=0; i<16; i++) { | 
 | for (j=1; j<0x10; j<<=1) { | for (j=1; j<0x10; j<<=1) { | 
 | work <<= 8; | work <<= 8; | 
| Line 291  void dclock_init8(void) { | Line 299  void dclock_init8(void) { | 
 | } | } | 
 | } | } | 
 | for (j=0; j<4; j++) { | for (j=0; j<4; j++) { | 
| outcolors[j][i] = work * ((START_PAL + TOTAL_PALS) + j); | dclockpal.pal8[j][i] = work * (START_PALORG + j); | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  |  | 
 | void dclock_init16(void) { | void dclock_init16(void) { | 
 |  |  | 
| int             i; | UINT    i; | 
 |  |  | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
| outcolors16[i] = scrnmng_makepal16(dclock_pal[i]); | dclockpal.pal16[i] = scrnmng_makepal16(dclockpal.pal32[i]); | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  |  | 
 | void dclock_reset(void) { | void dclock_reset(void) { | 
 |  |  | 
 |  | const DCLOCKFNT *fnt; | 
 |  |  | 
 | ZeroMemory(&dclock, sizeof(dclock)); | ZeroMemory(&dclock, sizeof(dclock)); | 
 | ZeroMemory(&dclock_dat, sizeof(dclock_dat)); |  | 
 |  |  | 
 | if (xmiloscfg.clockx) { | if (xmiloscfg.clockx) { | 
 | if (xmiloscfg.clockx <= 4) { | if (xmiloscfg.clockx <= 4) { | 
| Line 322  void dclock_reset(void) { | Line 330  void dclock_reset(void) { | 
 | xmiloscfg.clockx = 0; | xmiloscfg.clockx = 0; | 
 | } | } | 
 | } | } | 
| if (xmiloscfg.clockfnt >= (sizeof(fonttype) / sizeof(DCLOCK_FNT))) { | if (xmiloscfg.clockfnt >= (sizeof(fonttype) / sizeof(DCLOCKFNT))) { | 
 | xmiloscfg.clockfnt = 0; | xmiloscfg.clockfnt = 0; | 
 | } | } | 
 | dclock_font = fonttype[xmiloscfg.clockfnt]; |  | 
 |  |  | 
| dclock_font.init(); | dclock.clk_x = xmiloscfg.clockx; | 
|  | fnt = fonttype + xmiloscfg.clockfnt; | 
|  | dclock.fnt = fnt->fnt; | 
|  | dclock.pos = fnt->pos; | 
|  | fnt->init(dclock.clk_x); | 
 | dclock_callback(); | dclock_callback(); | 
 | dclock_redraw(); | dclock_redraw(); | 
 | } | } | 
| Line 335  void dclock_reset(void) { | Line 346  void dclock_reset(void) { | 
 | void dclock_callback(void) { | void dclock_callback(void) { | 
 |  |  | 
 | int                     i; | int                     i; | 
| BYTE            count = 13; | _SYSTIME        st; | 
| BYTE            buf[8]; | UINT8           buf[8]; | 
| time_t          ltime; | UINT8           count; | 
| struct tm       *nt; |  | 
 |  |  | 
 | if ((scrnmng_isfullscreen()) && (xmiloscfg.clockx)) { | if ((scrnmng_isfullscreen()) && (xmiloscfg.clockx)) { | 
| time(<ime); | timemng_gettime(&st); | 
| nt = localtime(<ime); | buf[0] = (st.hour / 10) + 1; | 
| buf[0] = (nt->tm_hour / 10) + 1; | buf[1] = (st.hour % 10) + 1; | 
| buf[1] = (nt->tm_hour % 10) + 1; | buf[2] = (st.minute / 10) + 1; | 
| buf[2] = (nt->tm_min / 10) + 1; | buf[3] = (st.minute % 10) + 1; | 
| buf[3] = (nt->tm_min % 10) + 1; |  | 
 | if (xmiloscfg.clockx > 4) { | if (xmiloscfg.clockx > 4) { | 
| buf[4] = (nt->tm_sec / 10) + 1; | buf[4] = (st.second / 10) + 1; | 
| buf[5] = (nt->tm_sec % 10) + 1; | buf[5] = (st.second % 10) + 1; | 
 | } | } | 
 |  | count = 13; | 
 | for (i=xmiloscfg.clockx; i--;) { | for (i=xmiloscfg.clockx; i--;) { | 
| if (dclock.dclock_now[i] != buf[i]) { | if (dclock.now[i] != buf[i]) { | 
| dclock.dclock_now[i] = buf[i]; | dclock.now[i] = buf[i]; | 
| dclock.dclock_flm[i] = count; | dclock.frm[i] = count; | 
| dclock.dclock_drawing |= (1 << i); | dclock.drawing |= (1 << i); | 
 | count += 4; | count += 4; | 
 | } | } | 
 | } | } | 
| Line 364  void dclock_callback(void) { | Line 374  void dclock_callback(void) { | 
 |  |  | 
 | void dclock_redraw(void) { | void dclock_redraw(void) { | 
 |  |  | 
| dclock.dclock_drawing = 0x3f; | dclock.drawing = 0x3f; | 
 | } | } | 
 |  |  | 
 | BOOL dclock_disp(void) { | BOOL dclock_disp(void) { | 
 |  |  | 
| return((dclock.dclock_drawing != 0) || | return((dclock.drawing != 0) || | 
| (*(DWORD *)(&dclock.dclock_flm[0]) != 0) || | (*(UINT32 *)(dclock.frm + 0) != 0) || | 
| (*(DWORD *)(&dclock.dclock_flm[4]) != 0)); | (*(UINT32 *)(dclock.frm + 4) != 0)); | 
 | } | } | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  | #if 0 | 
 |  | // ---- | 
 |  |  | 
 |  | #define DCLOCKY_MAX     13 | 
 |  | static const UINT8 dclocky[13] = {0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3}; | 
 |  |  | 
 | LABEL void __fastcall dclock_cntdown(BYTE value) { | LABEL void __fastcall dclock_cntdown(BYTE value) { | 
 |  |  | 
 | __asm { | __asm { | 
 | cmp             xmiloscfg.clockx, 0 | cmp             xmiloscfg.clockx, 0 | 
 | je              dclock_cdn | je              dclock_cdn | 
| cmp             dword ptr (dclock.dclock_flm), 0 | cmp             dword ptr (dclock.frm), 0 | 
 | jne             dclock_cdn | jne             dclock_cdn | 
| cmp             dword ptr (dclock.dclock_flm + 4), 0 | cmp             dword ptr (dclock.frm + 4), 0 | 
 | jne             dclock_cdn | jne             dclock_cdn | 
 | ret | ret | 
 |  |  | 
| Line 390  dclock_cdn:  push ecx | Line 408  dclock_cdn:  push ecx | 
 | cmp             cl, 0 | cmp             cl, 0 | 
 | jne             dclock_cdnlp | jne             dclock_cdnlp | 
 | inc             cl | inc             cl | 
| dclock_cdnlp:   movzx   eax, dclock[edx].dclock_flm | dclock_cdnlp:   movzx   eax, dclock[edx].frm | 
 | cmp             eax, 0 | cmp             eax, 0 | 
 | je              dclock_cdned | je              dclock_cdned | 
 | cmp             eax, DCLOCKY_MAX | cmp             eax, DCLOCKY_MAX | 
| Line 408  dclock_upabove: sub  al, cl | Line 426  dclock_upabove: sub  al, cl | 
 | jae             dclock_outflm | jae             dclock_outflm | 
 | jmp             dclock_setdraw | jmp             dclock_setdraw | 
 | dclock_set0:    xor             eax, eax | dclock_set0:    xor             eax, eax | 
| dclock_setdraw: bts             dclock.dclock_drawing, dx | dclock_setdraw: bts             dclock.drawing, dx | 
| dclock_outflm:  mov             dclock[edx].dclock_flm, al | dclock_outflm:  mov             dclock[edx].frm, al | 
 | dclock_cdned:   inc             edx | dclock_cdned:   inc             edx | 
 | cmp             dl, xmiloscfg.clockx | cmp             dl, xmiloscfg.clockx | 
 | jc              dclock_cdnlp | jc              dclock_cdnlp | 
| Line 425  LABEL void dclock_make(void) { | Line 443  LABEL void dclock_make(void) { | 
 | je              dclockmakeend | je              dclockmakeend | 
 | pushad | pushad | 
 | xor             ebx, ebx | xor             ebx, ebx | 
| makedclock_lp:  btr             dclock.dclock_drawing, bx | makedclock_lp:  btr             dclock.drawing, bx | 
 | jc              makedclock_1 | jc              makedclock_1 | 
 | makedclock_ed:  inc             ebx | makedclock_ed:  inc             ebx | 
 | cmp             bl, xmiloscfg.clockx | cmp             bl, xmiloscfg.clockx | 
| Line 433  makedclock_ed: inc  ebx | Line 451  makedclock_ed: inc  ebx | 
 | popad | popad | 
 | dclockmakeend:  ret | dclockmakeend:  ret | 
 |  |  | 
| makedclock_1:   mov             eax, dclock_font.dclock_put | makedclock_1:   mov             eax, dclock.pos | 
 | lea             eax, [eax + ebx*8] | lea             eax, [eax + ebx*8] | 
| mov             edi, [eax]DCLOCK_POS.dclock_pos | mov             edi, [eax]DCPOS.pos | 
| mov             dx, [eax]DCLOCK_POS.dclock_mask | mov             dx, [eax]DCPOS.mask | 
| mov             cl, [eax]DCLOCK_POS.dclock_rolbit | mov             cl, [eax]DCPOS.rolbit | 
| movzx   eax, dclock[ebx].dclock_flm | movzx   eax, dclock[ebx].frm | 
 | cmp             eax, 0 | cmp             eax, 0 | 
 | je              makedclock_y0 | je              makedclock_y0 | 
 | cmp             eax, DCLOCKY_MAX | cmp             eax, DCLOCKY_MAX | 
 | jb              makedclock_ani | jb              makedclock_ani | 
| movzx   eax, dclock[ebx].dclock_bak | movzx   eax, dclock[ebx].bak | 
 | jmp             makedclock0put | jmp             makedclock0put | 
 |  |  | 
| makedclock_y0:  movzx   eax, dclock[ebx].dclock_now | makedclock_y0:  movzx   eax, dclock[ebx].now | 
| mov             dclock[ebx].dclock_bak, al | mov             dclock[ebx].bak, al | 
 |  |  | 
 | makedclock0put: mov             ch, 3 | makedclock0put: mov             ch, 3 | 
 | makedclock0_up: and             [edi], dx | makedclock0_up: and             [edi], dx | 
| Line 455  makedclock0_up: and  [edi], dx | Line 473  makedclock0_up: and  [edi], dx | 
 | dec             ch | dec             ch | 
 | jne             makedclock0_up | jne             makedclock0_up | 
 | shl             eax, 4 | shl             eax, 4 | 
| add             eax, dclock_font.dclock_fnt | add             eax, dclock.fnt | 
 | mov             esi, eax | mov             esi, eax | 
 | mov             ch, 9 | mov             ch, 9 | 
 | makedclock0_dn: movzx   eax, byte ptr [esi] | makedclock0_dn: movzx   eax, byte ptr [esi] | 
| Line 477  makedclkani_up: and  [edi], dx | Line 495  makedclkani_up: and  [edi], dx | 
 | add             edi, (DCLOCK_X / 8) | add             edi, (DCLOCK_X / 8) | 
 | dec             ch | dec             ch | 
 | jne             makedclkani_up | jne             makedclkani_up | 
| makedclock_an2: movzx   esi, dclock[ebx].dclock_now | makedclock_an2: movzx   esi, dclock[ebx].now | 
 | shl             esi, 4 | shl             esi, 4 | 
| add             esi, dclock_font.dclock_fnt | add             esi, dclock.fnt | 
 | mov             ch, 9 | mov             ch, 9 | 
 | makedclkani_md: movzx   eax, byte ptr [esi] | makedclkani_md: movzx   eax, byte ptr [esi] | 
 | ror             ax, cl | ror             ax, cl | 
| Line 492  makedclkani_md: movzx eax, byte ptr [esi | Line 510  makedclkani_md: movzx eax, byte ptr [esi | 
 | pop             eax | pop             eax | 
 |  |  | 
 | mov             ch, al | mov             ch, al | 
| movzx   esi, dclock[ebx].dclock_bak | movzx   esi, dclock[ebx].bak | 
 | shl             esi, 4 | shl             esi, 4 | 
 | sub             esi, eax | sub             esi, eax | 
 | add             esi, 9 | add             esi, 9 | 
| add             esi, dclock_font.dclock_fnt | add             esi, dclock.fnt | 
 | makedclkani_dn: movzx   eax, byte ptr [esi] | makedclkani_dn: movzx   eax, byte ptr [esi] | 
 | ror             ax, cl | ror             ax, cl | 
 | and             [edi], dx | and             [edi], dx | 
| Line 509  makedclkani_dn: movzx eax, byte ptr [esi | Line 527  makedclkani_dn: movzx eax, byte ptr [esi | 
 | } | } | 
 | } | } | 
 |  |  | 
| LABEL void __fastcall dclock_out8(void *ptr, DWORD width) { | LABEL void __fastcall dclock_out8(void *ptr, UINT width) { | 
 |  |  | 
 | __asm { | __asm { | 
 | pushad | pushad | 
| mov             esi, offset dclock_dat | mov             esi, offset (dclock.dat) | 
| mov             edi, offset outcolors | mov             edi, offset (dclockpal.pal8) | 
 | mov             bh, 4 | mov             bh, 4 | 
 | dclockout_lp1:  mov             bl, 3 | dclockout_lp1:  mov             bl, 3 | 
 | dclockout_lp2:  mov             ebp, (DCLOCK_X/8) | dclockout_lp2:  mov             ebp, (DCLOCK_X/8) | 
| Line 541  dclockout_lp3: movzx eax, byte ptr [esi] | Line 559  dclockout_lp3: movzx eax, byte ptr [esi] | 
 | } | } | 
 | } | } | 
 |  |  | 
| LABEL void __fastcall dclock_out16(void *ptr, DWORD width) { | LABEL void __fastcall dclock_out16(void *ptr, UINT width) { | 
 |  |  | 
 | __asm { | __asm { | 
 | pushad | pushad | 
| mov             esi, offset dclock_dat | mov             esi, offset (dclock.dat) | 
| mov             edi, offset outcolors16 | mov             edi, offset (dclockpal.pal16) | 
 | mov             bh, 4 | mov             bh, 4 | 
 | dclockout_lp1:  mov             bl, 3 | dclockout_lp1:  mov             bl, 3 | 
 | dclockout_lp2:  push    ebx | dclockout_lp2:  push    ebx | 
| Line 574  dclockout_lp4: rcl  bl, 1 | Line 592  dclockout_lp4: rcl  bl, 1 | 
 | ret | ret | 
 | } | } | 
 | } | } | 
 |  | #endif | 
 |  |  |