home *** CD-ROM | disk | FTP | other *** search
/ Online Software 2: 1,000 Utilities / TK_OJ9711.iso / accessor / TCL170.LZH / DLLSRC.lzh / format.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-27  |  4.5 KB  |  220 lines

  1. /*-----------------------------------------------------
  2. ü@FORMAT.C
  3. ü@ü@ſīé⌐éτò╢ÄÜù±é≡é┬é¡éΘ
  4. ü@ü@Copyright (C) KAZUBON 1997
  5. -------------------------------------------------------*/
  6.  
  7. #include "tcdll.h"
  8.  
  9. char *YobiJpn[7] = { "ô·", "îÄ", "ë╬", "Éà", "û╪", "ïα", "ôy" };
  10. char *YobiEng[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
  11. char *MonthEng[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  12.     "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
  13.  
  14. extern char sDate, sTime;
  15. extern char sAM[11], sPM[11];
  16. extern BOOL bHour12;
  17.  
  18. /*------------------------------------------------
  19. ü@ſīé⌐éτò╢ÄÜù±é≡é┬é¡éΘ
  20. --------------------------------------------------*/
  21. void MakeFormat(char* s, SYSTEMTIME* pt, char* fmt)
  22. {
  23.     char *sp, *dp;
  24.     
  25.     sp = fmt; dp = s;
  26.     while(*sp)
  27.     {
  28.         if(*sp == '\"')
  29.         {
  30.             sp++;
  31.             while(*sp != '\"' && *sp) *dp++ = *sp++;
  32.             if(*sp == '\"') sp++;
  33.         }
  34.         else if(*sp == '/')
  35.         {
  36.             *dp++ = sDate; sp++;
  37.         }
  38.         else if(*sp == ':')
  39.         {
  40.             *dp++ = sTime; sp++;
  41.         }
  42.         else if(*sp == 'y' && *(sp + 1) == 'y')
  43.         {
  44.             if(*(sp + 2) == 'y' && *(sp + 3) == 'y')
  45.             {
  46.                 *dp++ = (char)((int)pt->wYear / 1000) + '0';
  47.                 *dp++ = (char)(((int)pt->wYear % 1000) / 100) + '0';
  48.                 sp += 2;
  49.             }
  50.             *dp++ = (char)(((int)pt->wYear % 100) / 10) + '0';
  51.             *dp++ = (char)((int)pt->wYear % 10) + '0';
  52.             sp += 2;
  53.         }
  54.         else if(*sp == 'm')
  55.         {
  56.             if(*(sp + 1) == 'm' && *(sp + 2) == 'm')
  57.             {
  58.                 *dp++ = MonthEng[pt->wMonth-1][0];
  59.                 *dp++ = MonthEng[pt->wMonth-1][1];
  60.                 *dp++ = MonthEng[pt->wMonth-1][2];
  61.                 sp += 3;
  62.             }
  63.             else
  64.             {
  65.                 if(*(sp + 1) == 'm')
  66.                 {
  67.                     *dp++ = (char)((int)pt->wMonth / 10) + '0';
  68.                     sp += 2;
  69.                 }
  70.                 else
  71.                 {
  72.                     if(pt->wMonth > 9)
  73.                         *dp++ = (char)((int)pt->wMonth / 10) + '0';
  74.                     sp++;
  75.                 }
  76.                 *dp++ = (char)((int)pt->wMonth % 10) + '0';
  77.             }
  78.         }
  79.         else if(*sp == 'd')
  80.         {
  81.             if(*(sp + 1) == 'd' && *(sp + 2) == 'd')
  82.             {
  83.                 *dp++ = YobiEng[pt->wDayOfWeek][0];
  84.                 *dp++ = YobiEng[pt->wDayOfWeek][1];
  85.                 *dp++ = YobiEng[pt->wDayOfWeek][2];
  86.                 sp += 3;
  87.             }
  88.             else
  89.             {
  90.                 if(*(sp + 1) == 'd')
  91.                 {
  92.                     *dp++ = (char)((int)pt->wDay / 10) + '0';
  93.                     sp += 2;
  94.                 }
  95.                 else
  96.                 {
  97.                     if(pt->wDay > 9)
  98.                         *dp++ = (char)((int)pt->wDay / 10) + '0';
  99.                     sp++;
  100.                 }
  101.                 *dp++ = (char)((int)pt->wDay % 10) + '0';
  102.             }
  103.         }
  104.         else if(*sp == 'a' && *(sp + 1) == 'a' && *(sp + 2) == 'a')
  105.         {
  106.             *dp++ = YobiJpn[pt->wDayOfWeek][0];
  107.             *dp++ = YobiJpn[pt->wDayOfWeek][1];
  108.             sp += 3;
  109.         }
  110.         else if(*sp == 'h')
  111.         {
  112.             int hour;
  113.             hour = pt->wHour;
  114.             if(bHour12)
  115.             {
  116.                 if(hour > 12) hour -= 12;
  117.                 else if(hour == 0) hour = 12;
  118.             }
  119.             if(*(sp + 1) == 'h')
  120.             {
  121.                 *dp++ = (char)(hour / 10) + '0';
  122.                 sp += 2;
  123.             }
  124.             else
  125.             {
  126.                 if(hour > 9)
  127.                     *dp++ = (char)(hour / 10) + '0';
  128.                 sp++;
  129.             }
  130.             *dp++ = (char)(hour % 10) + '0';
  131.         }
  132.         else if(*sp == 'n')
  133.         {
  134.             if(*(sp + 1) == 'n')
  135.             {
  136.                 *dp++ = (char)((int)pt->wMinute / 10) + '0';
  137.                 sp += 2;
  138.             }
  139.             else
  140.             {
  141.                 if(pt->wMinute > 9)
  142.                     *dp++ = (char)((int)pt->wMinute / 10) + '0';
  143.                 sp++;
  144.             }
  145.             *dp++ = (char)((int)pt->wMinute % 10) + '0';
  146.         }
  147.         else if(*sp == 's')
  148.         {
  149.             if(*(sp + 1) == 's')
  150.             {
  151.                 *dp++ = (char)((int)pt->wSecond / 10) + '0';
  152.                 sp += 2;
  153.             }
  154.             else
  155.             {
  156.                 if(pt->wSecond > 9)
  157.                     *dp++ = (char)((int)pt->wSecond / 10) + '0';
  158.                 sp++;
  159.             }
  160.             *dp++ = (char)((int)pt->wSecond % 10) + '0';
  161.         }
  162.         else if(*sp == 'A' && *(sp + 1) == 'M')
  163.         {
  164.             if(*(sp + 2) == '/' &&
  165.                 *(sp + 3) == 'P' && *(sp + 4) == 'M')
  166.             {
  167.                 if(pt->wHour < 12) *dp++ = 'A';
  168.                 else *dp++ = 'P';
  169.                 *dp++ = 'M'; sp += 5;
  170.             }
  171.             else if(*(sp + 2) == 'P' && *(sp + 3) == 'M')
  172.             {
  173.                 char *p;
  174.                 if(pt->wHour < 12) p = sAM; else p = sPM;
  175.                 while(*p) *dp++ = *p++;
  176.                 sp += 4;
  177.             }
  178.         }
  179.         else if(*sp == 'a' && *(sp + 1) == 'm' && *(sp + 2) == '/' &&
  180.             *(sp + 3) == 'p' && *(sp + 4) == 'm')
  181.         {
  182.             if(pt->wHour < 12) *dp++ = 'a';
  183.             else *dp++ = 'p';
  184.             *dp++ = 'm'; sp += 5;
  185.         }
  186.         else if(*sp == '\\' && *(sp + 1) == 'n')
  187.         {
  188.             *dp++ = 0x0d; *dp++ = 0x0a;
  189.             sp += 2;
  190.         }
  191.         else *dp++ = *sp++;
  192.     }
  193.     *dp = 0;
  194. }
  195.  
  196. /*------------------------------------------------
  197. ü@òbò\Īé¬éáéΘé⌐é╟éñé⌐
  198. --------------------------------------------------*/
  199. BOOL IsDispSecond(char* fmt)
  200. {
  201.     char *sp;
  202.     
  203.     sp = fmt;
  204.     while(*sp)
  205.     {
  206.         if(*sp == '\"')
  207.         {
  208.             sp++;
  209.             while(*sp != '\"' && *sp) sp++;
  210.             if(*sp == '\"') sp++;
  211.         }
  212.         else if(*sp == 's')
  213.         {
  214.             return TRUE;
  215.         }
  216.         else sp++;
  217.     }
  218.     return FALSE;
  219. }
  220.