home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / common / time.c < prev   
C/C++ Source or Header  |  1992-02-14  |  8KB  |  376 lines

  1. #include "../h/gsupport.h"
  2.  
  3. /*
  4.  * The following code is operating-system dependent [@time.01].  Include files
  5.  *  that are system-dependent.
  6.  */
  7.  
  8. #if PORT
  9.    /* probably needs something */
  10. Deliberate Syntax Error
  11. #endif                    /* PORT */
  12.  
  13. #if AMIGA
  14. #include "time.h"
  15. #endif                    /* AMIGA */
  16.  
  17. #if ATARI_ST
  18.    /* nothing is needed */
  19. #endif                    /* ATARI_ST */
  20.  
  21. #if ARM || MVS || VM
  22. #include <time.h>
  23. #endif                    /* ARM || MVS || ... */
  24.  
  25. #if MACINTOSH
  26. #if LSC
  27. #include <time.h>
  28. #endif                    /* LSC */
  29. #if MPW
  30. #include <types.h>
  31. #include "time.h"
  32. #include <OSUtils.h>
  33. #include <Events.h>
  34. #endif                    /* MPW */
  35. #endif                    /* MACINTOSH */
  36.  
  37. #if MSDOS
  38. #include <time.h>
  39. #if MICROSOFT
  40. #include <sys/types.h>
  41. #endif                    /* MICROSOFT */
  42. #endif                    /* MSDOS */
  43.  
  44. #if OS2
  45. #include <time.h>
  46. #include <sys/types.h>
  47. #endif                    /* OS2 */
  48.  
  49. #if UNIX
  50. #ifdef CRAY
  51. #define word    fubar_word
  52. #include <sys/types.h>
  53. #include <sys/times.h>
  54. #undef word
  55. #else                    /* CRAY */
  56. #include <sys/types.h>
  57. #include <sys/times.h>
  58. #endif                    /* CRAY */
  59. #include SysTime
  60. #endif                    /* UNIX */
  61.  
  62. #if VMS
  63. #include <types.h>
  64. #include <time.h>
  65. struct tms {
  66.     time_t    tms_utime;    /* user time */
  67.     time_t    tms_stime;    /* system time */
  68.     time_t    tms_cutime;    /* user time, children */
  69.     time_t    tms_cstime;    /* system time, children */
  70. };
  71. #endif                    /* VMS */
  72.  
  73. /*
  74.  * End of operating-system specific code.
  75.  */
  76.  
  77. int first_time = 1;
  78.  
  79. static char *day[] = {
  80.    "Sunday", "Monday", "Tuesday", "Wednesday",
  81.    "Thursday", "Friday", "Saturday"
  82.    };
  83.  
  84. static char *month[] = {
  85.    "January", "February", "March", "April", "May", "June",
  86.    "July", "August", "September", "October", "November", "December"
  87.    };
  88.  
  89.  
  90. /*
  91.  * getitime - fill in a "struct cal_time" with information about the current
  92.  *  time and date.
  93.  */
  94. novalue getitime(ct)
  95. struct cal_time *ct;
  96.    {
  97.  
  98. /*
  99.  * The following code is operating-system dependent [@time.02]. Declarations
  100.  *  for getting time.
  101.  */
  102.  
  103. #if PORT
  104.    long time();
  105.    long xclock;
  106. Deliberate Syntax Error
  107. #endif                    /* PORT */
  108.  
  109. #if AMIGA || OS2 || UNIX
  110.    long time();
  111.    long xclock;
  112. #endif                    /* AMIGA || OS2 || UNIX */
  113.  
  114. #if ARM || VMS
  115.    time_t xclock;
  116. #endif                    /* ARM || VMS */
  117.  
  118. #if ATARI_ST
  119.    struct tm {
  120.        short tm_year;
  121.        short tm_mon;
  122.        short tm_wday;
  123.        short tm_mday;
  124.        short tm_hour;
  125.        short tm_min;
  126.        short tm_sec;
  127.    };
  128.    long xclock;
  129. #endif                    /* ATARI_ST */
  130.  
  131. #if MACINTOSH
  132. #if LSC
  133.    unsigned long xclock;
  134.    unsigned long time();
  135. #else                    /* LSC */
  136.    time_t xclock;
  137. #endif                    /* LSC */
  138. #endif                    /* MACINTOSH */
  139.  
  140. #if MSDOS
  141. #if LATTICE || MICROSOFT || TURBO || INTEL_386 || ZTC_386
  142.    long time();
  143.    long xclock;
  144. #endif                    /* LATTICE || MICROSOFT || ... */
  145. #if MWC
  146.    long xclock;
  147.    time_t time();
  148. #endif                    /* MWC */
  149. #if HIGHC_386
  150.    long time();
  151.    time_t xclock;
  152. #endif                    /* HIGHC_386 */
  153. #endif                    /* MSDOS */
  154.  
  155. #if MVS || VM
  156.    time_t xclock;
  157. #endif                    /* MVS || VM */
  158.  
  159. /*
  160.  * End of operating-system specific code.
  161.  */
  162.  
  163.    struct tm *tbuf, *localtime();
  164. /*
  165.  * The following code is operating-system dependent [@time.03]. Code for
  166.  *  getting time.
  167.  */
  168.  
  169. #if PORT
  170.    time(&xclock);
  171.    tbuf = localtime(&xclock);
  172. Deliberate Syntax Error
  173. #endif                    /* PORT */
  174.  
  175. #if AMIGA || ARM || MACINTOSH || MSDOS || OS2 || UNIX || VMS || MVS || VM
  176.    time(&xclock);
  177.    tbuf = localtime(&xclock);
  178. #endif                    /* AMIGA || ARM || ... */
  179.  
  180. #if ATARI_ST
  181.     tbuf = localtime(&xclock);
  182. #endif                    /* ATARI_ST */
  183.  
  184. /*
  185.  * End of operating-system specific code.
  186.  */
  187.  
  188.    ct->year = 1900 + tbuf->tm_year;
  189.    ct->month_no = tbuf->tm_mon+1;
  190.    ct->month_nm = month[tbuf->tm_mon];
  191.    ct->mday = tbuf->tm_mday;
  192.    ct->wday = day[tbuf->tm_wday];
  193.    ct->hour = tbuf->tm_hour;
  194.    ct->minute = tbuf->tm_min;
  195.    ct->second = tbuf->tm_sec;
  196.    return;
  197.    }
  198.  
  199. /*
  200.  * getctime - fill a buffer with the "ctime" representation of the current
  201.  *  time and date. The buffer must be at least 26 characters.
  202.  */
  203. novalue getctime(sbuf)
  204. char *sbuf;
  205.    {
  206.    struct cal_time ct;
  207.  
  208.    getitime(&ct);
  209.    sprintf(sbuf, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n", ct.wday, ct.month_nm,
  210.       ct.mday, ct.hour, ct.minute, ct.second, ct.year);
  211.    return;
  212.    }
  213.  
  214. /*
  215.  * millisec - returns execution time in milliseconds. Time is measured
  216.  *  from the function's first call. The granularity of the time is
  217.  *  generally more than one millisecond and on some systems it my only
  218.  *  be accurate to the second.
  219.  */
  220. long millisec()
  221.    {
  222.  
  223. /*
  224.  * The following code is operating-system dependent [@time.04]. Declarations
  225.  *   that are system-dependent.
  226.  */
  227.  
  228. #if PORT
  229.    static long starttime;
  230.    long time();
  231. Deliberate Syntax Error
  232. #endif                    /* PORT */
  233.  
  234. #if AMIGA || ATARI_ST || OS2
  235.    static long starttime;
  236.    long time();
  237. #endif                    /* AMIGA || ATARI_ST || OS2 */
  238.  
  239. #if ARM
  240.    static clock_t strtime;
  241. #endif                    /* ARM */
  242.  
  243.  
  244. #if MACINTOSH
  245.    static long starttime;
  246. #endif                    /* MACINTOSH */
  247.  
  248. #if MSDOS
  249. #if LATTICE || MICROSOFT || TURBO || INTEL_386 || ZTC_386
  250.    static long starttime;
  251.    long time();
  252. #endif                    /* LATTICE || MICROSOFT || TURBO */
  253. #if HIGHC_386
  254.    static clock_t hc_strtime;
  255. #endif                    /* HIGHC_386 */
  256. #if MWC
  257.    time_t time();
  258. #endif                    /* MWC */
  259. #endif                    /* MSDOS */
  260.  
  261. #if MVS || VM
  262.    static clock_t starttime;
  263. #endif                                  /* MVS || VM */
  264.  
  265. #if UNIX || VMS
  266.    struct tms tp;
  267.    static long starttime;
  268. #endif                    /* UNIX || VMS */
  269.  
  270. /*
  271.  * End of operating-system specific code.
  272.  */
  273.  
  274.    if (first_time) {
  275.       first_time = 0;
  276.  
  277. /*
  278.  * The following code is operating-system dependent [@time.05].  Get start
  279.  *  time.
  280.  */
  281.  
  282. #if PORT
  283.       /* needs something */
  284. Deliberate Syntax Error
  285. #endif                    /* PORT */
  286.  
  287. #if AMIGA || ATARI_ST || OS2
  288.       time(&starttime);    /* note: this obtains time in various units */
  289. #endif                    /* AMIGA || ATARI_ST || OS2 */
  290.  
  291. #if MSDOS
  292. #if MICROSOFT || TURBO || ZTC_386
  293.       time(&starttime);    /* note: this obtains time in various units */
  294. #endif                    /* MICROSOFT || TURBO */
  295. #if INTEL_386
  296.       starttime = (long)clock();
  297. #endif                    /* INTEL_386 */
  298. #if HIGHC_386
  299.       hc_strtime = clock();
  300. #endif                    /* HIGHC_386 */
  301. #endif                    /* MSDOS */
  302.  
  303. #if ARM
  304.       strtime = clock();
  305. #endif                    /* ARM */
  306.  
  307.  
  308. #if MACINTOSH
  309.       starttime = TickCount();    /* 60 ticks / second */
  310. #endif                    /* MACINTOSH */
  311.  
  312. #if MVS || VM
  313.       starttime = clock();        /* clock ticks */
  314. #endif                    /* MVS || VM */
  315.  
  316. #if UNIX || VMS
  317.       times(&tp);
  318.       starttime = tp.tms_utime;
  319. #endif                    /* UNIX || VMS */
  320.  
  321. /*
  322.  * End of operating-system specific code.
  323.  */
  324.  
  325.       return 0L;
  326.       }
  327.    else {    /* not first time */
  328. /*
  329.  * The following code is operating-system dependent [@time.06].  Get time.
  330.  */
  331.  
  332. #if PORT
  333.    /* needs something */
  334. Deliberate Syntax Error
  335. #endif                    /* PORT */
  336.  
  337. #if MSDOS || AMIGA || OS2
  338. #if HIGHC_386
  339.       return (clock() - hc_strtime) * 10L;    /* thousandths */
  340. #endif                    /* HIGHC_386 */
  341. #if INTEL_386
  342.       return ((long)clock() - starttime) * (1000L / CLOCKS_PER_SEC);
  343. #endif                    /* INTEL_386 */
  344. #if MICROSOFT || TURBO || LATTICE || MWC
  345.       return 1000 * (time(NULL) - starttime);
  346. #endif                    /* HIGHC_386 */
  347. #endif                    /* AMIGA || MSDOS || OS2 */
  348.  
  349. #if ARM
  350.       /* thousandths; assumes CLOCKS_PER-SEC is 100 */
  351.       return (clock() - strtime) * 10L;
  352. #endif                    /* ARM */
  353.  
  354. #if ATARI_ST
  355.       return (time(NULL) - starttime) / 10;
  356. #endif                    /* ATARI_ST */
  357.  
  358. #if MACINTOSH
  359.       return 1000 * ((extended)(TickCount() - starttime) / (extended)Hz);
  360. #endif                    /* MACINTOSH */
  361.  
  362. #if MVS || VM
  363.       return (1000.0/CLOCKS_PER_SEC) * (clock() - starttime);
  364. #endif                    /* MVS || VM */
  365.  
  366. #if UNIX || VMS
  367.       times(&tp);
  368.       return 1000 * ((tp.tms_utime - starttime) / (double)Hz);
  369. #endif                    /* UNIX || VMS */
  370.  
  371. /*
  372.  * End of operating-system specific code.
  373.  */
  374.       }
  375.    }
  376.