home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2002 December (Special) / DOSV2002_12.iso / utility / tcl230ja95.lzh / source.lzh / exe / pageformat.c < prev    next >
C/C++ Source or Header  |  2001-02-17  |  15KB  |  595 lines

  1. /*-------------------------------------------
  2.   pageformat.c
  3.   "Format" page of properties
  4.                        KAZUBON 1997-1998
  5. ---------------------------------------------*/
  6.  
  7. #include "tclock.h"
  8.  
  9. static void OnInit(HWND hDlg);
  10. static void OnApply(HWND hDlg);
  11. static void OnLocale(HWND hDlg);
  12. static void OnCustom(HWND hDlg, BOOL bmouse);
  13. static void On12Hour(HWND hDlg);
  14. static void OnFormatCheck(HWND hDlg, WORD id);
  15.  
  16. static HWND hwndPage;
  17. static int ilang;  // language code. ex) 0x411 - Japanese
  18. static int idate;  // 0: mm/dd/yy 1: dd/mm/yy 2: yy/mm/dd
  19. static BOOL bDayOfWeekIsLast;   // yy/mm/dd ddd
  20. static BOOL bTimeMarkerIsFirst; // AM/PM hh:nn:ss
  21. static char sMon[11];  //
  22. static char *pCustomFormat = NULL;
  23.  
  24. BOOL CALLBACK DlgProcFormat2(HWND, UINT, WPARAM, LPARAM);
  25.  
  26. __inline void SendPSChanged(HWND hDlg)
  27. {
  28.     g_bApplyClock = TRUE;
  29.     SendMessage(GetParent(hDlg), PSM_CHANGED, (WPARAM)(hDlg), 0);
  30. }
  31.  
  32. /*------------------------------------------------
  33.    Dialog Procedure for the "Format" page
  34. --------------------------------------------------*/
  35. BOOL CALLBACK PageFormatProc(HWND hDlg, UINT message,
  36.     WPARAM wParam, LPARAM lParam)
  37. {
  38.     switch(message)
  39.     {
  40.         case WM_INITDIALOG:
  41.             OnInit(hDlg);
  42.             return TRUE;
  43.         case WM_COMMAND:
  44.         {
  45.             WORD id, code;
  46.             id = LOWORD(wParam); code = HIWORD(wParam);
  47.             if(id == IDC_LOCALE && code == CBN_SELCHANGE)
  48.                 OnLocale(hDlg);
  49.             // format textbox
  50.             else if(id == IDC_FORMAT && code == EN_CHANGE)
  51.                 SendPSChanged(hDlg);
  52.             // "Custumize Format"
  53.             else if(id == IDC_CUSTOM)
  54.                 OnCustom(hDlg, TRUE);
  55.             // "12H"
  56.             else if(id == IDC_12HOUR)
  57.                 On12Hour(hDlg);
  58.             // "year" -- "Internet Time"
  59.             else if(IDC_YEAR4 <= id && id <= IDC_AMPM)
  60.                 OnFormatCheck(hDlg, id);
  61.             // "detail..."
  62.             else if(id == IDC_FORMATDETAIL)
  63.             {
  64.                 int r;
  65.                 r = DialogBoxParam(GetLangModule(),
  66.                     MAKEINTRESOURCE(IDD_FORMAT2),
  67.                     g_hwndSheet, DlgProcFormat2, (LPARAM)ilang);
  68.                 if(r == IDOK) SendPSChanged(hDlg);
  69.             }
  70.             return TRUE;
  71.         }
  72.         case WM_NOTIFY:
  73.             switch(((NMHDR *)lParam)->code)
  74.             {
  75.                 case PSN_APPLY: OnApply(hDlg); break;
  76.                 case PSN_HELP: MyHelp(GetParent(hDlg), 2); break;
  77.             }
  78.             return TRUE;
  79.         case WM_DESTROY:
  80.             if(pCustomFormat) free(pCustomFormat); pCustomFormat = NULL;
  81.             break;
  82.     }
  83.     return FALSE;
  84. }
  85.  
  86. char *entrydate[] = { "Year4", "Year", "Month", "MonthS", "Day", "Weekday",
  87.     "Hour", "Minute", "Second", "Kaigyo", "InternetTime",
  88.     "AMPM", "Hour12", "Custom",  };
  89. #define ENTRY(id) entrydate[(id)-IDC_YEAR4]
  90.  
  91. /*------------------------------------------------
  92.   Initialize Locale Infomation
  93. --------------------------------------------------*/
  94. void InitLocale(HWND hwnd)
  95. {
  96.     char s[21];
  97.     int i, sel;
  98.     int aLangDayOfWeekIsLast[] =
  99.         { LANG_JAPANESE, LANG_KOREAN, 0 };
  100.     int aTimeMarkerIsFirst[] = 
  101.         { LANG_CHINESE, LANG_JAPANESE, LANG_KOREAN, 0 };
  102.     
  103.     if(hwnd)
  104.     {
  105.         sel = CBGetCurSel(hwnd, IDC_LOCALE);
  106.         ilang = CBGetItemData(hwnd, IDC_LOCALE, sel);
  107.     }
  108.     else
  109.     {
  110.         ilang = GetMyRegLong("", "Locale", (int)GetUserDefaultLangID());
  111.     }
  112. //    ilang = (int)GetUserDefaultLangID();
  113. //    ilang = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
  114.     GetLocaleInfoWA(ilang, LOCALE_IDATE, s, 20);
  115.     idate = atoi(s);
  116.     GetLocaleInfoWA(ilang, LOCALE_SABBREVDAYNAME1, sMon, 10);
  117.     
  118.     bDayOfWeekIsLast = FALSE;
  119.     for(i = 0; aLangDayOfWeekIsLast[i]; i++)
  120.     {
  121.         if((ilang & 0x00ff) == aLangDayOfWeekIsLast[i])
  122.         {
  123.             bDayOfWeekIsLast = TRUE; break;
  124.         }
  125.     }
  126.     bTimeMarkerIsFirst = FALSE;
  127.     for(i = 0; aTimeMarkerIsFirst[i]; i++)
  128.     {
  129.         if((ilang & 0x00ff) == aTimeMarkerIsFirst[i])
  130.         {
  131.             bTimeMarkerIsFirst = TRUE; break;
  132.         }
  133.     }
  134. }
  135.  
  136. /*------------------------------------------------
  137.   for EnumSystemLocales function
  138. --------------------------------------------------*/
  139. BOOL CALLBACK EnumLocalesProc(LPTSTR lpLocaleString)
  140. {
  141.     char s[81];
  142.     int x, index;
  143.     
  144.     x = atox(lpLocaleString);
  145.     if(GetLocaleInfoWA(x, LOCALE_SLANGUAGE, s, 80) > 0)
  146.         index = CBAddString(hwndPage, IDC_LOCALE, (LPARAM)s);
  147.     else
  148.         index = CBAddString(hwndPage, IDC_LOCALE, (LPARAM)lpLocaleString);
  149.     CBSetItemData(hwndPage, IDC_LOCALE, index, x);
  150.     return TRUE;
  151. }
  152.  
  153. /*------------------------------------------------
  154.   Initialize the "Format" page
  155. --------------------------------------------------*/
  156. void OnInit(HWND hDlg)
  157. {
  158.     HFONT hfont;
  159.     char s[1024];
  160.     int i, count, nKaigyo;
  161.     
  162.     hwndPage = hDlg;
  163.     
  164.     hfont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
  165.     if(hfont)
  166.     {
  167.         SendDlgItemMessage(hDlg, IDC_LOCALE, WM_SETFONT, (WPARAM)hfont, 0);
  168.         SendDlgItemMessage(hDlg, IDC_AMSYMBOL, WM_SETFONT, (WPARAM)hfont, 0);
  169.         SendDlgItemMessage(hDlg, IDC_PMSYMBOL, WM_SETFONT, (WPARAM)hfont, 0);
  170.     }
  171.     hfont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT);
  172.     if(hfont)
  173.         SendDlgItemMessage(hDlg, IDC_FORMAT, WM_SETFONT, (WPARAM)hfont, 0);
  174.     
  175.     // Fill and select the "Locale" combobox
  176.     EnumSystemLocales(EnumLocalesProc, LCID_INSTALLED);
  177.     CBSetCurSel(hDlg, IDC_LOCALE, 0);
  178.     ilang = GetMyRegLong("", "Locale", (int)GetUserDefaultLangID());
  179.     count = CBGetCount(hDlg, IDC_LOCALE);
  180.     for(i = 0; i < count; i++)
  181.     {
  182.         int x;
  183.         x = CBGetItemData(hDlg, IDC_LOCALE, i);
  184.         if(x == ilang)
  185.         {
  186.             CBSetCurSel(hDlg, IDC_LOCALE, i); break;
  187.         }
  188.     }
  189.     
  190.     InitLocale(hDlg);
  191.     
  192.     // "year" -- "second"
  193.     for(i = IDC_YEAR4; i <= IDC_SECOND; i++)
  194.     {
  195.         CheckDlgButton(hDlg, i,
  196.             GetMyRegLong("", ENTRY(i), TRUE));
  197.     }
  198.     
  199.     if(IsDlgButtonChecked(hDlg, IDC_YEAR))
  200.         CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
  201.     if(IsDlgButtonChecked(hDlg, IDC_YEAR4))
  202.         CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
  203.     
  204.     if(IsDlgButtonChecked(hDlg, IDC_MONTH))
  205.         CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
  206.     if(IsDlgButtonChecked(hDlg, IDC_MONTHS))
  207.         CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
  208.     
  209.     nKaigyo = GetMyRegLong("", ENTRY(IDC_KAIGYO), -1);
  210.     if(nKaigyo < 0)
  211.     {
  212.         RECT rc;
  213.         HWND hwnd;
  214.         nKaigyo = 1;
  215.         hwnd = FindWindow("Shell_TrayWnd", NULL);
  216.         if(hwnd != NULL)
  217.         {
  218.             GetClientRect(hwnd, &rc);
  219.             // if the task bar is positioned horizontally
  220.             if(rc.right > rc.bottom) nKaigyo = 0;
  221.         }
  222.     }
  223.     CheckDlgButton(hDlg, IDC_KAIGYO, nKaigyo);
  224.     
  225.     // "Internet Time" -- "Customize format"
  226.     for(i = IDC_INTERNETTIME; i <= IDC_CUSTOM; i++)
  227.     {
  228.         CheckDlgButton(hDlg, i,
  229.             GetMyRegLong("", ENTRY(i), FALSE));
  230.     }
  231.     
  232.     GetMyRegStr("", "Format", s, 1024, "");
  233.     SetDlgItemText(hDlg, IDC_FORMAT, s);
  234.     
  235.     pCustomFormat = malloc(1024);
  236.     if(pCustomFormat)
  237.         GetMyRegStr("", "CustomFormat", pCustomFormat, 1024, "");
  238.     
  239.     On12Hour(hDlg);
  240.     OnCustom(hDlg, FALSE);
  241. }
  242.  
  243. /*------------------------------------------------
  244.   "Apply" button
  245. --------------------------------------------------*/
  246. void OnApply(HWND hDlg)
  247. {
  248.     char s[1024];
  249.     int i;
  250.     
  251.     SetMyRegLong("", "Locale",
  252.         CBGetItemData(hDlg, IDC_LOCALE, CBGetCurSel(hDlg, IDC_LOCALE)));
  253.     
  254.     for(i = IDC_YEAR4; i <= IDC_CUSTOM; i++)
  255.     {
  256.         SetMyRegLong("", ENTRY(i), IsDlgButtonChecked(hDlg, i));
  257.     }
  258.     
  259.     GetDlgItemText(hDlg, IDC_FORMAT, s, 1024);
  260.     SetMyRegStr("", "Format", s);
  261.     
  262.     if(pCustomFormat)
  263.     {
  264.         if(IsDlgButtonChecked(hDlg, IDC_CUSTOM))
  265.         {
  266.             strcpy(pCustomFormat, s);
  267.             SetMyRegStr("", "CustomFormat", pCustomFormat);
  268.         }
  269.     }
  270. }
  271.  
  272. /*------------------------------------------------
  273.   When changed "Locale" combobox
  274. --------------------------------------------------*/
  275. void OnLocale(HWND hDlg)
  276. {
  277.     InitLocale(hDlg);
  278.     OnCustom(hDlg, FALSE);
  279. }
  280.  
  281. /*------------------------------------------------
  282.   "Customize format" checkbox
  283. --------------------------------------------------*/
  284. void OnCustom(HWND hDlg, BOOL bmouse)
  285. {
  286.     BOOL b;
  287.     int i;
  288.     
  289.     b = IsDlgButtonChecked(hDlg, IDC_CUSTOM);
  290.     EnableDlgItem(hDlg, IDC_FORMAT, b);
  291.     
  292.     for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
  293.         EnableDlgItem(hDlg, i, !b);
  294.     
  295.     if(pCustomFormat && bmouse)
  296.     {
  297.         if(b)
  298.         {
  299.             if(pCustomFormat[0])
  300.                 SetDlgItemText(hDlg, IDC_FORMAT, pCustomFormat);
  301.         }
  302.         else GetDlgItemText(hDlg, IDC_FORMAT, pCustomFormat, 1024);
  303.     }
  304.     
  305.     if(!b) OnFormatCheck(hDlg, 0);
  306.     
  307.     SendPSChanged(hDlg);
  308. }
  309.  
  310. /*------------------------------------------------
  311.    "12H" combobox
  312. --------------------------------------------------*/
  313. void On12Hour(HWND hDlg)
  314. {
  315.     BOOL b;
  316.     b = IsDlgButtonChecked(hDlg, IDC_12HOUR);
  317.     if(!b)
  318.     {
  319.         CheckDlgButton(hDlg, IDC_AMPM, 0);
  320.         if(!IsDlgButtonChecked(hDlg, IDC_CUSTOM))
  321.             OnFormatCheck(hDlg, 0);
  322.     }
  323.     
  324.     SendPSChanged(hDlg);
  325. }
  326.  
  327. #define CHECKS(a) checks[(a)-IDC_YEAR4]
  328.  
  329. /*------------------------------------------------
  330.   When clicked "year" -- "am/pm"
  331. --------------------------------------------------*/
  332. void OnFormatCheck(HWND hDlg, WORD id)
  333. {
  334.     char s[1024];
  335.     int checks[15];
  336.     int i;
  337.     
  338.     for(i = IDC_YEAR4; i <= IDC_AMPM; i++)
  339.     {
  340.         CHECKS(i) = IsDlgButtonChecked(hDlg, i);
  341.     }
  342.     
  343.     if(id == IDC_YEAR4 || id == IDC_YEAR)
  344.     {
  345.         if(id == IDC_YEAR4 && CHECKS(IDC_YEAR4))
  346.         {
  347.             CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR4);
  348.             CHECKS(IDC_YEAR) = FALSE;
  349.         }
  350.         if(id == IDC_YEAR && CHECKS(IDC_YEAR))
  351.         {
  352.             CheckRadioButton(hDlg, IDC_YEAR4, IDC_YEAR, IDC_YEAR);
  353.             CHECKS(IDC_YEAR4) = FALSE;
  354.         }
  355.     }
  356.     
  357.     if(id == IDC_MONTH || id == IDC_MONTHS)
  358.     {
  359.         if(id == IDC_MONTH && CHECKS(IDC_MONTH))
  360.         {
  361.             CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTH);
  362.             CHECKS(IDC_MONTHS) = FALSE;
  363.         }
  364.         if(id == IDC_MONTHS && CHECKS(IDC_MONTHS))
  365.         {
  366.             CheckRadioButton(hDlg, IDC_MONTH, IDC_MONTHS, IDC_MONTHS);
  367.             CHECKS(IDC_MONTH) = FALSE;
  368.         }
  369.     }
  370.     
  371.     if(id == IDC_AMPM)
  372.     {
  373.         CheckDlgButton(hDlg, IDC_12HOUR, 1);
  374.         On12Hour(hDlg);
  375.     }
  376.     
  377.     CreateFormat(s, checks);
  378.     SetDlgItemText(hDlg, IDC_FORMAT, s);
  379.     SendPSChanged(hDlg);
  380. }
  381.  
  382. /*------------------------------------------------
  383.   Initialize a format string. Called from main.c
  384. --------------------------------------------------*/
  385. void InitFormat(void)
  386. {
  387.     char s[1024];
  388.     int i, checks[15];
  389.     RECT rc;
  390.     HWND hwnd;
  391.     BOOL b;
  392.     
  393.     if(GetMyRegLong("", ENTRY(IDC_CUSTOM), FALSE))
  394.         return;
  395.     
  396.     InitLocale(NULL);
  397.     
  398.     for(i = IDC_YEAR4; i <= IDC_SECOND; i++)
  399.     {
  400.         CHECKS(i) = GetMyRegLong("", ENTRY(i), TRUE);
  401.     }
  402.     
  403.     if(CHECKS(IDC_YEAR))  CHECKS(IDC_YEAR4) = FALSE;
  404.     if(CHECKS(IDC_YEAR4)) CHECKS(IDC_YEAR) = FALSE;
  405.     
  406.     if(CHECKS(IDC_MONTH))  CHECKS(IDC_MONTHS) = FALSE;
  407.     if(CHECKS(IDC_MONTHS)) CHECKS(IDC_MONTH) = FALSE;
  408.     
  409.     CHECKS(IDC_INTERNETTIME) = GetMyRegLong("",
  410.         ENTRY(IDC_INTERNETTIME), FALSE);
  411.     
  412.     b = FALSE;
  413.     hwnd = FindWindow("Shell_TrayWnd", NULL);
  414.     if(hwnd != NULL)
  415.     {
  416.         GetClientRect(hwnd, &rc);
  417.         if(rc.right < rc.bottom) b = TRUE;
  418.     }
  419.     CHECKS(IDC_KAIGYO) = 
  420.         GetMyRegLong("", ENTRY(IDC_KAIGYO), b);
  421.     CHECKS(IDC_AMPM) = GetMyRegLong("", ENTRY(IDC_AMPM), FALSE);
  422.     
  423.     CreateFormat(s, checks);
  424.     SetMyRegStr("", "Format", s);
  425. }
  426.  
  427. /*------------------------------------------------
  428.   Create a format string automatically
  429. --------------------------------------------------*/
  430. void CreateFormat(char* dst, int* checks)
  431. {
  432.     BOOL bdate = FALSE, btime = FALSE;
  433.     int i;
  434.     
  435.     for(i = IDC_YEAR4; i <= IDC_WEEKDAY; i++)
  436.     {
  437.         if(CHECKS(i)) { bdate = TRUE; break; }
  438.     }
  439.     for(i = IDC_HOUR; i <= IDC_AMPM; i++)
  440.     {
  441.         if(CHECKS(i)) { btime = TRUE; break; }
  442.     }
  443.     
  444.     dst[0] = 0;
  445.     
  446.     if(!bDayOfWeekIsLast && CHECKS(IDC_WEEKDAY))
  447.     {
  448.         strcat(dst, "ddd");
  449.         for(i = IDC_YEAR4; i <= IDC_DAY; i++)
  450.         {
  451.             if(CHECKS(i))
  452.             {
  453.                 if((ilang & 0x00ff) == LANG_CHINESE) strcat(dst, " ");
  454.                 else if(sMon[0] && sMon[ strlen(sMon) - 1 ] == '.')
  455.                     strcat(dst, " ");
  456.                 else strcat(dst, ", ");
  457.                 break;
  458.             }
  459.         }
  460.     }
  461.     
  462.     if(idate == 0)
  463.     {
  464.         if(CHECKS(IDC_MONTH) || CHECKS(IDC_MONTHS))
  465.         {
  466.             if(CHECKS(IDC_MONTH)) strcat(dst, "mm");
  467.             if(CHECKS(IDC_MONTHS)) strcat(dst, "mmm");
  468.             if(CHECKS(IDC_DAY) || CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR))
  469.             {
  470.                 if(CHECKS(IDC_MONTH)) strcat(dst, "/");
  471.                 else strcat(dst, " ");
  472.             }
  473.         }
  474.         if(CHECKS(IDC_DAY))
  475.         {
  476.             strcat(dst, "dd");
  477.             if(CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR))
  478.             {
  479.                 if(CHECKS(IDC_MONTH)) strcat(dst, "/");
  480.                 else strcat(dst, ", ");
  481.             }
  482.         }
  483.         if(CHECKS(IDC_YEAR4)) strcat(dst, "yyyy");
  484.         if(CHECKS(IDC_YEAR)) strcat(dst, "yy");
  485.     }
  486.     else if(idate == 1)
  487.     {
  488.         if(CHECKS(IDC_DAY))
  489.         {
  490.             strcat(dst, "dd");
  491.             if(CHECKS(IDC_MONTH) || CHECKS(IDC_MONTHS))
  492.             {
  493.                 if(CHECKS(IDC_MONTH)) strcat(dst, "/");
  494.                 else strcat(dst, " ");
  495.             }
  496.             else if(CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR)) strcat(dst, "/");
  497.         }
  498.         if(CHECKS(IDC_MONTH) || CHECKS(IDC_MONTHS))
  499.         {
  500.             if(CHECKS(IDC_MONTH)) strcat(dst, "mm");
  501.             if(CHECKS(IDC_MONTHS)) strcat(dst, "mmm");
  502.             if(CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR))
  503.             {
  504.                 if(CHECKS(IDC_MONTH)) strcat(dst, "/");
  505.                 else strcat(dst, " ");
  506.             }
  507.         }
  508.         if(CHECKS(IDC_YEAR4)) strcat(dst, "yyyy");
  509.         if(CHECKS(IDC_YEAR)) strcat(dst, "yy");
  510.     }
  511.     else
  512.     {
  513.         if(CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR))
  514.         {
  515.             if(CHECKS(IDC_YEAR4)) strcat(dst, "yyyy");
  516.             if(CHECKS(IDC_YEAR)) strcat(dst, "yy");
  517.             if(CHECKS(IDC_MONTH) || CHECKS(IDC_MONTHS)
  518.                 || CHECKS(IDC_DAY))
  519.             {
  520.                 if(CHECKS(IDC_MONTHS)) strcat(dst, " ");
  521.                 else strcat(dst, "/");
  522.             }
  523.         }
  524.         if(CHECKS(IDC_MONTH) || CHECKS(IDC_MONTHS))
  525.         {
  526.             if(CHECKS(IDC_MONTH)) strcat(dst, "mm");
  527.             if(CHECKS(IDC_MONTHS)) strcat(dst, "mmm");
  528.             if(CHECKS(IDC_DAY))
  529.             {
  530.                 if(CHECKS(IDC_MONTHS)) strcat(dst, " ");
  531.                 else strcat(dst, "/");
  532.             }
  533.         }
  534.         if(CHECKS(IDC_DAY)) strcat(dst, "dd");
  535.     }
  536.     
  537.     if(bDayOfWeekIsLast && CHECKS(IDC_WEEKDAY))
  538.     {
  539.         for(i = IDC_YEAR4; i <= IDC_DAY; i++)
  540.         {
  541.             if(CHECKS(i)) { strcat(dst, " "); break; }
  542.         }
  543.         strcat(dst, "ddd");
  544.     }
  545.     
  546.     if(bdate && btime)
  547.     {
  548.         if(CHECKS(IDC_KAIGYO)) strcat(dst, "\\n");
  549.         else
  550.         {
  551.             if(idate < 2 && CHECKS(IDC_MONTHS) &&
  552.                 (CHECKS(IDC_YEAR4) || CHECKS(IDC_YEAR)))
  553.                 strcat(dst, " ");
  554.             strcat(dst, " ");
  555.         }
  556.     }
  557.     
  558.     if(bTimeMarkerIsFirst && CHECKS(IDC_AMPM))
  559.     {
  560.         strcat(dst, "tt");
  561.         if(CHECKS(IDC_HOUR) || CHECKS(IDC_MINUTE) || 
  562.             CHECKS(IDC_SECOND) || CHECKS(IDC_INTERNETTIME))
  563.             strcat(dst, " ");
  564.     }
  565.     
  566.     if(CHECKS(IDC_HOUR))
  567.     {
  568.         strcat(dst, "hh");
  569.         if(CHECKS(IDC_MINUTE) || CHECKS(IDC_SECOND)) strcat(dst, ":");
  570.         else if(CHECKS(IDC_INTERNETTIME) || 
  571.             (!bTimeMarkerIsFirst && CHECKS(IDC_AMPM))) strcat(dst, " ");
  572.     }
  573.     if(CHECKS(IDC_MINUTE))
  574.     {
  575.         strcat(dst, "nn");
  576.         if(CHECKS(IDC_SECOND)) strcat(dst, ":");
  577.         else if(CHECKS(IDC_INTERNETTIME) || 
  578.             (!bTimeMarkerIsFirst && CHECKS(IDC_AMPM))) strcat(dst, " ");
  579.     }
  580.     if(CHECKS(IDC_SECOND))
  581.     {
  582.         strcat(dst, "ss");
  583.         if(CHECKS(IDC_INTERNETTIME) || 
  584.             (!bTimeMarkerIsFirst && CHECKS(IDC_AMPM))) strcat(dst, " ");
  585.     }
  586.     
  587.     if(!bTimeMarkerIsFirst && CHECKS(IDC_AMPM))
  588.     {
  589.         strcat(dst, "tt");
  590.         if(CHECKS(IDC_INTERNETTIME)) strcat(dst, " ");
  591.     }
  592.     
  593.     if(CHECKS(IDC_INTERNETTIME)) strcat(dst, "@@@");
  594. }
  595.