home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Kyūkyoku!! X68000 Emulator
/
X68000Book.dat
/
mac
/
OLS
/
X68000
/
Ko-Window
/
uclock12.lzh
/
uclock.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-26
|
7KB
|
297 lines
/* uclock 1995 H.Ogasawara(COR.) */
#include <corlib.h>
#define REVERSE 1
#define REDRAW 0
#define FONT 12
#if REDRAW
# define ATTR (ColorGray|OptionXor)
#else
# define ATTR (ColorBlack)
#endif
typedef struct {
int x, y;
} T_BTBL;
typedef struct {
unsigned short x1, y1, x2, y2;
} T_STBL;
typedef struct {
unsigned short x1, y1, x2, y2, x3, y3, x4, y4;
} T_MTBL;
typedef struct {
unsigned short x1, y1, x2, y2, x3, y3, x4, y4;
} T_HTBL;
static T_BTBL BaseTable[]= {
{ 0, -65536 },
{ 6850, -65176 },
{ 13625, -64103 },
{ 20251, -62328 },
{ 26655, -59870 },
{ 32767, -56755 },
{ 38521, -53019 },
{ 43852, -48702 },
{ 48702, -43852 },
{ 53019, -38521 },
{ 56755, -32768 },
{ 59870, -26655 },
{ 62328, -20251 },
{ 64103, -13625 },
{ 65176, -6850 },
{ 65536, 0 },
{ 65176, 6850 },
{ 64103, 13625 },
{ 62328, 20251 },
{ 59870, 26655 },
{ 56755, 32767 },
{ 53019, 38521 },
{ 48702, 43852 },
{ 43852, 48702 },
{ 38521, 53019 },
{ 32768, 56755 },
{ 26655, 59870 },
{ 20251, 62328 },
{ 13625, 64103 },
{ 6850, 65176 },
{ 0, 65536 },
{ -6850, 65176 },
{ -13625, 64103 },
{ -20251, 62328 },
{ -26655, 59870 },
{ -32767, 56755 },
{ -38521, 53019 },
{ -43852, 48702 },
{ -48702, 43852 },
{ -53019, 38521 },
{ -56755, 32768 },
{ -59870, 26655 },
{ -62328, 20251 },
{ -64103, 13625 },
{ -65176, 6850 },
{ -65536, 0 },
{ -65176, -6850 },
{ -64103, -13625 },
{ -62328, -20251 },
{ -59870, -26655 },
{ -56755, -32767 },
{ -53019, -38521 },
{ -48702, -43852 },
{ -43852, -48702 },
{ -38521, -53019 },
{ -32768, -56755 },
{ -26655, -59870 },
{ -20251, -62328 },
{ -13625, -64103 },
{ -6850, -65176 },
{ 0, -65536 },
};
static T_STBL Stable[61];
static T_MTBL Mtable[61];
static T_HTBL Htable[13];
static int Xc, Yc, Ho, Mo, So, Hn, Mn, Sn, FontX, FontY, T;
static char timebuf[]= { 0,0,':',0,0,0 };
static void
MakeTable( h, v )
{
int i;
Xc= h/2;
Yc= v/2;
for( i= 0 ; i< 61 ; i++ ){
int hh, vv, xx, yy;
Stable[i].x1= ((h*4*BaseTable[i].x/ 9)>>16)+Xc;
Stable[i].y1= ((v*4*BaseTable[i].y/ 9)>>16)+Yc;
Stable[i].x2= ((h*1*BaseTable[i].x/20)>>16)+Xc;
Stable[i].y2= ((v*1*BaseTable[i].y/20)>>16)+Yc;
Mtable[i].x1= ((h*2*BaseTable[i].x/ 5)>>16)+Xc;
Mtable[i].y1= ((v*2*BaseTable[i].y/ 5)>>16)+Yc;
hh= h*1*BaseTable[i].y/32;
vv= v*1*BaseTable[i].x/32;
xx= h*1*BaseTable[i].x/20;
yy= v*1*BaseTable[i].y/20;
Mtable[i].x2= ((xx+ hh)>>16)+Xc;
Mtable[i].y2= ((yy- vv)>>16)+Yc;
Mtable[i].x3= ((xx- hh)>>16)+Xc;
Mtable[i].y3= ((yy+ vv)>>16)+Yc;
}
for( i= 0 ; i< 13 ; i++ ){
int hh= h*1*BaseTable[i*5].y/48,
vv= v*1*BaseTable[i*5].x/48,
xx= h*2*BaseTable[i*5].x/ 8,
yy= v*2*BaseTable[i*5].y/ 8;
Htable[i].x1= ((xx+ hh)>>16)+Xc;
Htable[i].y1= ((yy- vv)>>16)+Yc;
Htable[i].x3= ((xx- hh)>>16)+Xc;
Htable[i].y3= ((yy+ vv)>>16)+Yc;
xx= h*1*BaseTable[i*5].x/20;
yy= v*1*BaseTable[i*5].y/20;
Htable[i].x2= ((xx+ hh)>>16)+Xc;
Htable[i].y2= ((yy- vv)>>16)+Yc;
Htable[i].x4= ((xx- hh)>>16)+Xc;
Htable[i].y4= ((yy+ vv)>>16)+Yc;
}
FontX= Xc-(FONT*5/4);
FontY= Yc+(FONT/3+v*1/4);
}
static void
TimeSet()
{
T= TIMEBIN( TIMEGET() );
Hn= (T >> 16) & 255;
if( Hn >= 12 )
Hn-= 12;
Mn= (T >> 8) & 255;
Sn= T & 255;
/* nazo */
#if REVERSE
Hn= 12-Hn;
Mn= 60-Mn;
Sn= 60-Sn;
#endif
}
static
U_Draw( wp, up )
WindowID wp;
{
int i= 0;
DrawBuf dbuf[50], *dp= dbuf;
#if REDRAW
if( !up )
#else
# if REVERSE
if( Sn == 60 || !up )
# else
if( !Sn || !up )
# endif
#endif
{
DrawSetClear( dp++, ColorGray ); i++;
DrawSetCircle( dp++, Xc, Yc, Xc-2, Yc-2,
ShadowDown, OptionShadow ); i++;
DrawSetCircle( dp++, Xc, Yc, Xc>>4, Yc>>4,
ShadowUp, OptionShadow ); i++;
Ho= Mo= So= -1;
{
int h= (T>>16)&255,
m= (T>>8)&255;
timebuf[0]= h/10+'0';
timebuf[1]= h%10+'0';
timebuf[3]= m/10+'0';
timebuf[4]= m%10+'0';
DrawSetSymbol( dp++, FontX, FontY, timebuf,
ColorGray|AttrReverse, FONT ); i++;
}
}
if( Ho != Hn ){
#if REDRAW
if( Ho >= 0 ){
DrawSetLine( dp++, Htable[Ho].x1, Htable[Ho].y1,
Htable[Ho].x2, Htable[Ho].y2,
ColorGray|OptionXor, OptionLine ); i++;
DrawSetLine( dp++, Htable[Ho].x3, Htable[Ho].y3,
Htable[Ho].x4, Htable[Ho].y4,
ColorGray|OptionXor, OptionLine ); i++;
DrawSetLine( dp++, Htable[Ho].x1, Htable[Ho].y1,
Htable[Ho].x3, Htable[Ho].y3,
ColorGray|OptionXor, OptionLine ); i++;
}
#endif
DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
Htable[Hn].x2, Htable[Hn].y2,
ATTR, OptionLine ); i++;
DrawSetLine( dp++, Htable[Hn].x3, Htable[Hn].y3,
Htable[Hn].x4, Htable[Hn].y4,
ATTR, OptionLine ); i++;
DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
Htable[Hn].x3, Htable[Hn].y3,
ATTR, OptionLine ); i++;
Ho= Hn;
}
if( Mo != Mn ){
#if REDRAW
if( Mo >= 0 ){
DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
Mtable[Mo].x2, Mtable[Mo].y2,
ColorGray|OptionXor, OptionLine ); i++;
DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
Mtable[Mo].x3, Mtable[Mo].y3,
ColorGray|OptionXor, OptionLine ); i++;
}
#endif
DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
Mtable[Mn].x2, Mtable[Mn].y2,
ATTR, OptionLine ); i++;
DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
Mtable[Mn].x3, Mtable[Mn].y3,
ATTR, OptionLine ); i++;
Mo= Mn;
}
if( So != Sn ){
if( So >= 0 ){
DrawSetLine( dp++,
Stable[So].x1, Stable[So].y1,
Stable[So].x2, Stable[So].y2,
ColorGray|OptionXor, OptionLine ); i++;
}
DrawSetLine( dp++,
Stable[Sn].x1, Stable[Sn].y1,
Stable[Sn].x2, Stable[Sn].y2,
ColorGray|OptionXor, OptionLine ); i++;
So= Sn;
}
WindowDraw( wp, dbuf, i );
}
static
Exec( wp, info )
WindowID wp;
EventInfo *info;
{
static work;
switch( info->option ){
case EventInterval:
if( IntervalWait( 100, &work ) ){
TimeSet();
U_Draw( wp, TRUE );
return TRUE;
}
return FALSE;
case EventRedraw:
U_Draw( wp, FALSE );
return TRUE;
case EventOpen:
TimeSet();
WindowRedraw( wp );
WindowSetEventAttr( wp, EventAttrDefault|EventIntervalON );
return TRUE;
case EventClose:
WindowClose( wp );
WindowConnectionClose();
return TRUE;
case EventResize:
MakeTable( info->h, info->v );
WindowResize( wp, info->x, info->y, info->h, info->v );
return TRUE;
}
return FALSE;
}
WindowMain( argc, argv )
char **argv;
{
int x= 0, y= 0, h= 100, v= 100;
AnalyzeArgs( argc, argv, &x, &y, &h, &v );
MakeTable( h, v );
WindowTitleOpen( x, y, h, v, NULL, "uclock 1.2",
Resize|Close|Push, Exec );
}