home *** CD-ROM | disk | FTP | other *** search
/ Kyūkyoku!! X68000 Emulator / X68000Book.dat / mac / OLS / X68000 / Ko-Window / uclock12.lzh / uclock.c < prev    next >
C/C++ Source or Header  |  1995-05-26  |  7KB  |  297 lines

  1. /*    uclock 1995 H.Ogasawara(COR.)    */
  2.  
  3. #include    <corlib.h>
  4.  
  5. #define        REVERSE        1
  6. #define        REDRAW        0
  7. #define        FONT        12
  8.  
  9. #if REDRAW
  10. # define    ATTR    (ColorGray|OptionXor)
  11. #else
  12. # define    ATTR    (ColorBlack)
  13. #endif
  14.  
  15.  
  16. typedef struct {
  17.     int    x, y;
  18. } T_BTBL;
  19. typedef struct {
  20.     unsigned short    x1, y1, x2, y2;
  21. } T_STBL;
  22. typedef struct {
  23.     unsigned short    x1, y1, x2, y2, x3, y3, x4, y4;
  24. } T_MTBL;
  25. typedef struct {
  26.     unsigned short    x1, y1, x2, y2, x3, y3, x4, y4;
  27. } T_HTBL;
  28.  
  29. static T_BTBL    BaseTable[]= {
  30.     {    0,    -65536    },
  31.     {    6850,    -65176    },
  32.     {    13625,    -64103    },
  33.     {    20251,    -62328    },
  34.     {    26655,    -59870    },
  35.     {    32767,    -56755    },
  36.     {    38521,    -53019    },
  37.     {    43852,    -48702    },
  38.     {    48702,    -43852    },
  39.     {    53019,    -38521    },
  40.     {    56755,    -32768    },
  41.     {    59870,    -26655    },
  42.     {    62328,    -20251    },
  43.     {    64103,    -13625    },
  44.     {    65176,    -6850    },
  45.     {    65536,    0    },
  46.     {    65176,    6850    },
  47.     {    64103,    13625    },
  48.     {    62328,    20251    },
  49.     {    59870,    26655    },
  50.     {    56755,    32767    },
  51.     {    53019,    38521    },
  52.     {    48702,    43852    },
  53.     {    43852,    48702    },
  54.     {    38521,    53019    },
  55.     {    32768,    56755    },
  56.     {    26655,    59870    },
  57.     {    20251,    62328    },
  58.     {    13625,    64103    },
  59.     {    6850,    65176    },
  60.     {    0,    65536    },
  61.     {    -6850,    65176    },
  62.     {    -13625,    64103    },
  63.     {    -20251,    62328    },
  64.     {    -26655,    59870    },
  65.     {    -32767,    56755    },
  66.     {    -38521,    53019    },
  67.     {    -43852,    48702    },
  68.     {    -48702,    43852    },
  69.     {    -53019,    38521    },
  70.     {    -56755,    32768    },
  71.     {    -59870,    26655    },
  72.     {    -62328,    20251    },
  73.     {    -64103,    13625    },
  74.     {    -65176,    6850    },
  75.     {    -65536,    0    },
  76.     {    -65176,    -6850    },
  77.     {    -64103,    -13625    },
  78.     {    -62328,    -20251    },
  79.     {    -59870,    -26655    },
  80.     {    -56755,    -32767    },
  81.     {    -53019,    -38521    },
  82.     {    -48702,    -43852    },
  83.     {    -43852,    -48702    },
  84.     {    -38521,    -53019    },
  85.     {    -32768,    -56755    },
  86.     {    -26655,    -59870    },
  87.     {    -20251,    -62328    },
  88.     {    -13625,    -64103    },
  89.     {    -6850,    -65176    },
  90.     {    0,    -65536    },
  91. };
  92. static T_STBL    Stable[61];
  93. static T_MTBL    Mtable[61];
  94. static T_HTBL    Htable[13];
  95.  
  96. static int    Xc, Yc, Ho, Mo, So, Hn, Mn, Sn, FontX, FontY, T;
  97. static char    timebuf[]= { 0,0,':',0,0,0 };
  98.  
  99. static void
  100. MakeTable( h, v )
  101. {
  102.     int    i;
  103.     Xc= h/2;
  104.     Yc= v/2;
  105.     for( i= 0 ; i< 61 ; i++ ){
  106.         int    hh, vv, xx, yy;
  107.         Stable[i].x1= ((h*4*BaseTable[i].x/ 9)>>16)+Xc;
  108.         Stable[i].y1= ((v*4*BaseTable[i].y/ 9)>>16)+Yc;
  109.         Stable[i].x2= ((h*1*BaseTable[i].x/20)>>16)+Xc;
  110.         Stable[i].y2= ((v*1*BaseTable[i].y/20)>>16)+Yc;
  111.         Mtable[i].x1= ((h*2*BaseTable[i].x/ 5)>>16)+Xc;
  112.         Mtable[i].y1= ((v*2*BaseTable[i].y/ 5)>>16)+Yc;
  113.             hh= h*1*BaseTable[i].y/32;
  114.             vv= v*1*BaseTable[i].x/32;
  115.             xx= h*1*BaseTable[i].x/20;
  116.             yy= v*1*BaseTable[i].y/20;
  117.         Mtable[i].x2= ((xx+ hh)>>16)+Xc;
  118.         Mtable[i].y2= ((yy- vv)>>16)+Yc;
  119.         Mtable[i].x3= ((xx- hh)>>16)+Xc;
  120.         Mtable[i].y3= ((yy+ vv)>>16)+Yc;
  121.     }
  122.     for( i= 0 ; i< 13 ; i++ ){
  123.         int    hh= h*1*BaseTable[i*5].y/48,
  124.             vv= v*1*BaseTable[i*5].x/48,
  125.             xx= h*2*BaseTable[i*5].x/ 8,
  126.             yy= v*2*BaseTable[i*5].y/ 8;
  127.         Htable[i].x1= ((xx+ hh)>>16)+Xc;
  128.         Htable[i].y1= ((yy- vv)>>16)+Yc;
  129.         Htable[i].x3= ((xx- hh)>>16)+Xc;
  130.         Htable[i].y3= ((yy+ vv)>>16)+Yc;
  131.             xx= h*1*BaseTable[i*5].x/20;
  132.             yy= v*1*BaseTable[i*5].y/20;
  133.         Htable[i].x2= ((xx+ hh)>>16)+Xc;
  134.         Htable[i].y2= ((yy- vv)>>16)+Yc;
  135.         Htable[i].x4= ((xx- hh)>>16)+Xc;
  136.         Htable[i].y4= ((yy+ vv)>>16)+Yc;
  137.     }
  138.     FontX= Xc-(FONT*5/4);
  139.     FontY= Yc+(FONT/3+v*1/4);
  140. }
  141.  
  142. static void
  143. TimeSet()
  144. {
  145.     T= TIMEBIN( TIMEGET() );
  146.     Hn= (T >> 16) & 255;
  147.     if( Hn >= 12 )
  148.         Hn-= 12;
  149.     Mn= (T >>  8) & 255;
  150.     Sn=  T        & 255;
  151.  
  152.     /* nazo */
  153. #if REVERSE
  154.     Hn= 12-Hn;
  155.     Mn= 60-Mn;
  156.     Sn= 60-Sn;
  157. #endif
  158. }
  159.  
  160. static
  161. U_Draw( wp, up )
  162. WindowID    wp;
  163. {
  164.     int    i= 0;
  165.     DrawBuf    dbuf[50], *dp= dbuf;
  166. #if REDRAW
  167.     if( !up )
  168. #else
  169. # if REVERSE
  170.     if( Sn == 60 || !up )
  171. # else
  172.     if( !Sn || !up )
  173. # endif
  174. #endif
  175.     {
  176.         DrawSetClear( dp++, ColorGray ); i++;
  177.         DrawSetCircle( dp++, Xc, Yc, Xc-2, Yc-2,
  178.                     ShadowDown, OptionShadow ); i++;
  179.         DrawSetCircle( dp++, Xc, Yc, Xc>>4, Yc>>4,
  180.                     ShadowUp, OptionShadow ); i++;
  181.         Ho= Mo= So= -1;
  182.         {
  183.         int    h= (T>>16)&255,
  184.             m= (T>>8)&255;
  185.         timebuf[0]= h/10+'0';
  186.         timebuf[1]= h%10+'0';
  187.         timebuf[3]= m/10+'0';
  188.         timebuf[4]= m%10+'0';
  189.         DrawSetSymbol( dp++, FontX, FontY, timebuf,
  190.                     ColorGray|AttrReverse, FONT ); i++;
  191.         }
  192.     }
  193.     if( Ho != Hn ){
  194. #if REDRAW
  195.         if( Ho >= 0 ){
  196.             DrawSetLine( dp++,  Htable[Ho].x1, Htable[Ho].y1,
  197.                     Htable[Ho].x2, Htable[Ho].y2,
  198.                     ColorGray|OptionXor, OptionLine ); i++;
  199.             DrawSetLine( dp++,  Htable[Ho].x3, Htable[Ho].y3,
  200.                     Htable[Ho].x4, Htable[Ho].y4,
  201.                     ColorGray|OptionXor, OptionLine ); i++;
  202.             DrawSetLine( dp++,  Htable[Ho].x1, Htable[Ho].y1,
  203.                     Htable[Ho].x3, Htable[Ho].y3,
  204.                     ColorGray|OptionXor, OptionLine ); i++;
  205.         }
  206. #endif
  207.         DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
  208.                     Htable[Hn].x2, Htable[Hn].y2,
  209.                 ATTR, OptionLine ); i++;
  210.         DrawSetLine( dp++, Htable[Hn].x3, Htable[Hn].y3,
  211.                     Htable[Hn].x4, Htable[Hn].y4,
  212.                 ATTR, OptionLine ); i++;
  213.         DrawSetLine( dp++, Htable[Hn].x1, Htable[Hn].y1,
  214.                     Htable[Hn].x3, Htable[Hn].y3,
  215.                 ATTR, OptionLine ); i++;
  216.         Ho= Hn;
  217.     }
  218.     if( Mo != Mn ){
  219. #if REDRAW
  220.         if( Mo >= 0 ){
  221.             DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
  222.                         Mtable[Mo].x2, Mtable[Mo].y2,
  223.                     ColorGray|OptionXor, OptionLine ); i++;
  224.             DrawSetLine( dp++, Mtable[Mo].x1, Mtable[Mo].y1,
  225.                         Mtable[Mo].x3, Mtable[Mo].y3,
  226.                     ColorGray|OptionXor, OptionLine ); i++;
  227.         }
  228. #endif
  229.         DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
  230.                         Mtable[Mn].x2, Mtable[Mn].y2,
  231.                 ATTR, OptionLine ); i++;
  232.         DrawSetLine( dp++, Mtable[Mn].x1, Mtable[Mn].y1,
  233.                         Mtable[Mn].x3, Mtable[Mn].y3,
  234.                 ATTR, OptionLine ); i++;
  235.         Mo= Mn;
  236.     }
  237.     if( So != Sn ){
  238.         if( So >= 0 ){
  239.             DrawSetLine( dp++,
  240.                         Stable[So].x1, Stable[So].y1,
  241.                         Stable[So].x2, Stable[So].y2,
  242.                     ColorGray|OptionXor, OptionLine ); i++;
  243.         }
  244.         DrawSetLine( dp++,
  245.                         Stable[Sn].x1, Stable[Sn].y1,
  246.                         Stable[Sn].x2, Stable[Sn].y2,
  247.                 ColorGray|OptionXor, OptionLine ); i++;
  248.         So= Sn;
  249.     }
  250.     WindowDraw( wp, dbuf, i );
  251.  
  252. }
  253.  
  254. static
  255. Exec( wp, info )
  256. WindowID    wp;
  257. EventInfo    *info;
  258. {
  259.     static work;
  260.     switch( info->option ){
  261.     case EventInterval:
  262.         if( IntervalWait( 100, &work ) ){
  263.             TimeSet();
  264.             U_Draw( wp, TRUE );
  265.             return    TRUE;
  266.         }
  267.         return    FALSE;
  268.     case EventRedraw:
  269.         U_Draw( wp, FALSE );
  270.         return    TRUE;
  271.     case EventOpen:
  272.         TimeSet();
  273.         WindowRedraw( wp );
  274.         WindowSetEventAttr( wp, EventAttrDefault|EventIntervalON );
  275.         return    TRUE;
  276.     case EventClose:
  277.         WindowClose( wp );
  278.         WindowConnectionClose();
  279.         return    TRUE;
  280.     case EventResize:
  281.         MakeTable( info->h, info->v );
  282.         WindowResize( wp, info->x, info->y, info->h, info->v );
  283.         return    TRUE;
  284.     }
  285.     return    FALSE;
  286. }
  287.  
  288. WindowMain( argc, argv )
  289. char    **argv;
  290. {
  291.     int    x= 0, y= 0, h= 100, v= 100;
  292.     AnalyzeArgs( argc, argv, &x, &y, &h, &v );
  293.     MakeTable( h, v );
  294.     WindowTitleOpen( x, y, h, v, NULL, "uclock 1.2",
  295.                     Resize|Close|Push, Exec );
  296. }
  297.