home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / sysutl / clock.arc / CLKFAC.C < prev    next >
Text File  |  1986-12-22  |  7KB  |  182 lines

  1. /***************************************************** CLKFAC.C
  2.  * NAME:    CLKFAC
  3.  *
  4.  * FUNCTION:    Paint clock's face on screen.
  5.  *
  6.  * EXAMPLE:    CLKFAC();
  7.  *
  8.  * INPUTS:    determined from global definitions
  9.  *
  10.  * OUTPUT:    placed into global definitions
  11.  *
  12.  **************************************************************
  13.  * 11/22/86 -RBM- original implementation
  14.  **************************************************************/
  15. #define XTRNALGLOBALS 1        /* globals externally defined    */
  16. #include "E:CLKGBL.H"        /* setup global storage */
  17.  
  18. /**************************************************************
  19.  * BEGIN ROUTINE
  20.  **************************************************************/
  21.  
  22. CLKFAC()
  23. {
  24. int    i;            /* temporary counter        */
  25. int    hour;            /* hour under consideration    */
  26. int    hourhand;        /* hour hand to draw        */
  27. struct    ACTIMAGE acnumbrs[100];    /* draw image structure        */
  28.  
  29. /**** loop thru all 12 hours ******/
  30. for (hour=1; hour<=12; hour++)
  31.     { /*--- build "hand" --- */
  32.       if (hour == 12) hourhand=0; else hourhand=hour;
  33.       clkimgh (&acnumbrs[0], hourhand*5);
  34.  
  35.       /*--- draw "hand" -----*/
  36.       drawit (&acnumbrs[0], fccol);
  37.  
  38.       /*--- locate, position and draw hour # ---*/
  39.       for (i=0; acnumbrs[i].row != 0; i++);
  40.       i--;  /* point to the last position in draw image    */
  41.       drawnum (acnumbrs[i].row, acnumbrs[i].col, hour, fccol);
  42.  
  43.     };
  44.  
  45. }                /***** end of routine ******/
  46.  
  47. /************************************************************************
  48. * drawnum - draws number on screen in graphics mode.            *
  49. *************************************************************************/
  50. drawnum (row, col, numbr, color)
  51. int     row;            /* row position of center of number     */
  52. int    col;            /* column position of center of number    */
  53. int    numbr;            /* number to draw            */
  54. int    color;            /* color to draw it            */
  55. {
  56. #define DRWWTH 15         /* images are 15 lines wide        */
  57. #define DRWDPH 15         /* images are 15 lines deep        */ 
  58. #define NIMGS   4        /* number of images            */
  59. static struct IMG { int image;    /* bit = 1 means draw dot        */
  60.             int blank;    /* bit = 1 means blank background    */
  61.             int num;    /* the number that this image draws    */
  62.           }
  63.           imgary[NIMGS*DRWDPH]
  64.         = {    /**** # 3 ***/
  65.             0x0000,    0x0FF8,    3,  /* ............... */
  66.             0x05C0,    0x0FF8,    3,  /* ....X.XXX...... */
  67.             0x07E0,    0x0FF8,    3,  /* ....XXXXXX..... */
  68.             0x0430,    0x0FF8,    3,  /* ....X....XX.... */
  69.             0x0030,    0x0FF8,    3,  /* .........XX.... */
  70.             0x0030,    0x0FF8,    3,  /* .........XX.... */
  71.             0x01E0,    0x0FF8,    3,  /* ......XXXX..... */
  72.             0x01C0,    0x0FF8,    3,  /* ......XXX...... */
  73.             0x0060,    0x0FF8,    3,  /* ........XX..... */
  74.             0x0030,    0x0FF8,    3,  /* .........XX.... */
  75.             0x0430,    0x0FF8,    3,  /* ....X....XX.... */
  76.             0x0670,    0x0FF8,    3,  /* ....XX..XXX.... */
  77.             0x07E0,    0x0FF8,    3,  /* ....XXXXXX..... */
  78.             0x05C0,    0x0FF8,    3,  /* ....X.XXX...... */
  79.             0x0000,    0x0FF8,    3,  /* ............... */
  80.             /**** # 6 ***/
  81.             0x0000,    0x1FF0,    6,  /* ............... */
  82.             0x03C0,    0x1FF0,    6,  /* .....XXXX...... */
  83.             0x0660,    0x1FF0,    6,  /* ....XX..XX..... */
  84.             0x0C00,    0x1FF0,    6,  /* ...XX.......... */
  85.             0x0C00,    0x1FF0,    6,  /* ...XX.......... */
  86.             0x0C00,    0x1FF0,    6,  /* ...XX.......... */
  87.             0x0FC0,    0x1FF0,    6,  /* ...XXXXXX...... */
  88.             0x0FE0,    0x1FF0,    6,  /* ...XXXXXXX..... */
  89.             0x0E60,    0x1FF0,    6,  /* ...XXX..XX..... */
  90.             0x0C20,    0x1FF0,    6,  /* ...XX....X..... */
  91.             0x0C20,    0x1FF0,    6,  /* ...XX....X..... */
  92.             0x0E60,    0x1FF0,    6,  /* ...XXX..XX..... */
  93.             0x07C0,    0x1FF0,    6,  /* ....XXXXX...... */
  94.             0x0380,    0x1FF0,    6,  /* .....XXX....... */
  95.             0x0000,    0x1FF0,    6,  /* ............... */
  96.             /**** # 9 ***/
  97.             0x0000,    0x1FF0,    9,  /* ............... */
  98.             0x0380,    0x1FF0,    9,  /* .....XXX....... */
  99.             0x07C0,    0x1FF0,    9,  /* ....XXXXX...... */
  100.             0x0CE0,    0x1FF0,    9,  /* ...XX..XXX..... */
  101.             0x0860,    0x1FF0,    9,  /* ...X....XX..... */
  102.             0x0860,    0x1FF0,    9,  /* ...X....XX..... */
  103.             0x0CE0,    0x1FF0,    9,  /* ...XX..XXX..... */
  104.             0x0FE0,    0x1FF0,    9,  /* ...XXXXXXX..... */
  105.             0x07E0,    0x1FF0,    9,  /* ....XXXXXX..... */
  106.             0x0060,    0x1FF0,    9,  /* ........XX..... */
  107.             0x0060,    0x1FF0,    9,  /* ........XX..... */
  108.             0x0060,    0x1FF0,    9,  /* ........XX..... */
  109.             0x0CC0,    0x1FF0,    9,  /* ...XX..XX...... */
  110.             0x0780,    0x1FF0,    9,  /* ....XXXX....... */
  111.             0x0000,    0x1FF0,    9,  /* ............... */
  112.             /**** # 12 ***/
  113.             0x0000,    0x3FFE,    12,  /* ............... */
  114.             0x0C38,    0x3FFE,    12,  /* ...XX....XXX... */
  115.             0x1C7C,    0x3FFE,    12,  /* ..XXX...XXXXX.. */
  116.             0x1CCC,    0x3FFE,    12,  /* ..XXX..XX..XX.. */
  117.             0x0484,    0x3FFE,    12,  /* ....X..X....X.. */
  118.             0x040C,    0x3FFE,    12,  /* ....X......XX.. */
  119.             0x0418,    0x3FFE,    12,  /* ....X.....XX... */
  120.             0x0430,    0x3FFE,    12,  /* ....X....XX.... */
  121.             0x0460,    0x3FFE,    12,  /* ....X...XX..... */
  122.             0x04C0,    0x3FFE,    12,  /* ....X..XX...... */
  123.             0x04C0,    0x3FFE,    12,  /* ....X..XX...... */
  124.             0x04C4,    0x3FFE,    12,  /* ....X..XX...X.. */
  125.             0x1EFC,    0x3FFE,    12,  /* ..XXXX.XXXXXX.. */
  126.             0x1EFC,    0x3FFE,    12,  /* ..XXXX.XXXXXX.. */
  127.             0x0000,    0x3FFE,    12   /* ............... */
  128.           };
  129. int    ntry;        /* table entry                    */
  130. int    bitx;        /* bit being accessed (1=lsbit)            */
  131. int    mask;        /* bit mask                    */
  132.  
  133. /******* BEGIN PROCESSING ***********************************************/
  134. /*DEBUG printf("<drawnum>%5d%5d%5d%5d\n",row,col,numbr,color);
  135. */
  136. /*----- adjust row & col to point to upper right corner of char --------*/
  137. row -= DRWDPH/2;
  138. col += DRWWTH/2;
  139. switch (numbr)        /* adjust for hand width */
  140.     {
  141.     case  3 : row += mnwth/2; break;
  142.     case  6 : col += mnwth/2; break;
  143.     case  9 : row += mnwth/2; break;
  144.     case 12 : col += mnwth/2; break;
  145.     };
  146.  
  147. /*----- find entry in table, exit if not found -------------------------*/
  148. for (ntry=0; ntry<(NIMGS*DRWDPH); ntry++)
  149.     {
  150. /*DEBUG printf("found.. %5x%5x%5x%5d%5d%5d\n",imgary[ntry].image,
  151.  imgary[ntry].blank, imgary[ntry].num, ntry, row, col);
  152. */
  153.     if (imgary[ntry].num == numbr) 
  154.     {
  155.     sreg.bx = 0;            /* unused            */
  156.     sreg.cx = col;            /* setup column            */
  157.     sreg.dx = row;            /* setup row            */
  158.  
  159.     /*--- get line entry, scan thru dots ---------------------------*/
  160.     for (bitx=1; bitx<=DRWWTH; bitx++,sreg.cx--)
  161.         {mask = 1;        /* build dot mask        */
  162.          mask <<= bitx;
  163. /*DEBUG printf("       bitx=3d%5d  mask=%4x\n",bitx,mask);
  164. */
  165.         /*--- check blank, draw dot if so ----------------------*/
  166.         if ((imgary[ntry].blank & mask) != 0)
  167.             {
  168.             /*--- if dot off (=0) color = bkgnd ------------*/
  169.             /*    if dot on  (=1) color = color             */
  170.             if ((imgary[ntry].image & mask) == 0)
  171.                 sreg.ax = 3072 + bkcol; /* =0, bkgnd    */
  172.             else    sreg.ax = 3072 + color; /* =1, dot colr */
  173.  
  174.             /*--- draw dot ---------------------------------*/
  175.             csysint (VIDEO, &sreg, &rreg);
  176.             };
  177.         };
  178.     row++;
  179.     };
  180.     };
  181. }
  182.