home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 259_01 / timer.c < prev    next >
Text File  |  1988-02-25  |  3KB  |  130 lines

  1.  
  2. /***************************************************************************/
  3. /* TIMER - Utility used to time the execution of other MSDOS programs.       */
  4. /*                                       */
  5. /*                                       */
  6. /*                                       */
  7. /***************************************************************************/
  8. /*                 Modification Log                   */
  9. /***************************************************************************/
  10. /* Version   Date   Programmer     -----------  Description  --------------- */
  11. /*                                       */
  12. /* V01.00   010788  Bob Withers  Program intially complete.           */
  13. /*                                       */
  14. /*                                       */
  15. /***************************************************************************/
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <dos.h>
  20. #include <process.h>
  21. #include <string.h>
  22. #ifdef __TURBOC__
  23. #include <alloc.h>
  24. #else
  25. #include <malloc.h>
  26. #endif
  27.  
  28. #define MSDOS_GET_TIME             0x2c
  29.  
  30.  
  31. static void    near pascal ErrorMsg(char *);
  32.  
  33. static short        nStartHour;
  34. static short        nStartMin;
  35. static short        nStartSec;
  36. static short        nStartHund;
  37. static short        nEndHour;
  38. static short        nEndMin;
  39. static short        nEndSec;
  40. static short        nEndHund;
  41. static union REGS    r;
  42. static char        cPathName[64];
  43. static char        cWrk[80];
  44.  
  45.  
  46. main(argc, argv)
  47. int        argc;
  48. char      **argv;
  49. {
  50.     auto     short    nRetCode;
  51.     auto     char     **pArgs;
  52.  
  53.  
  54.     if (argc < 2)
  55.     {
  56.     ErrorMsg("\nError - command usage is:");
  57.     ErrorMsg("        TIMER pgmname [pgmarg ...]");
  58.     ErrorMsg("           ^     ^         ^");
  59.     ErrorMsg("           |     |         |");
  60.     ErrorMsg("           |     |         +-- Optional pgm parameters");
  61.     ErrorMsg("           |     +------------ Name of program to run");
  62.     ErrorMsg("           +------------------ Utility program name");
  63.     return(1);
  64.     }
  65.     strcpy(cPathName, strupr(argv[1]));
  66.     pArgs = (char **) calloc(1, argc * sizeof(char *));
  67.     if (NULL == pArgs)
  68.     {
  69.     ErrorMsg("\nUnable to allocate memory - aborting");
  70.     return(2);
  71.     }
  72.     while (--argc >= 0)
  73.     pArgs[argc] = argv[argc + 1];
  74.     r.h.ah = MSDOS_GET_TIME;
  75.     intdos(&r, &r);
  76.     nStartHour = r.h.ch;
  77.     nStartMin  = r.h.cl;
  78.     nStartSec  = r.h.dh;
  79.     nStartHund = r.h.dl;
  80.     nRetCode = spawnvp(P_WAIT, cPathName, pArgs);
  81.     r.h.ah = MSDOS_GET_TIME;
  82.     intdos(&r, &r);
  83.     nEndHour = r.h.ch;
  84.     nEndMin  = r.h.cl;
  85.     nEndSec  = r.h.dh;
  86.     nEndHund = r.h.dl;
  87.     if (-1 == nRetCode)
  88.     {
  89.     sprintf(cWrk, "Unable to run program %s", cPathName);
  90.     ErrorMsg(cWrk);
  91.     return(3);
  92.     }
  93.     printf("\nProgram started %d:%02d:%02d.%d Ended %d:%02d:%02d.%d\n",
  94.        nStartHour, nStartMin, nStartSec, nStartHund,
  95.        nEndHour,   nEndMin,   nEndSec,   nEndHund);
  96.     if (nEndHour < nStartHour)
  97.     nEndHour += 24;
  98.     nEndHund -= nStartHund;
  99.     if (nEndHund < 0)
  100.     {
  101.     nEndHund += 99;
  102.     nEndSec--;
  103.     }
  104.     nEndSec -= nStartSec;
  105.     if (nEndSec < 0)
  106.     {
  107.     nEndSec += 59;
  108.     nEndMin--;
  109.     }
  110.     nEndMin -= nStartMin;
  111.     if (nEndMin < 0)
  112.     {
  113.     nEndMin += 59;
  114.     nEndHour--;
  115.     }
  116.     nEndHour -= nStartHour;
  117.     printf("Elapsed time %d hours, %d minutes, %d.%02d seconds\n",
  118.        nEndHour,   nEndMin,   nEndSec,   nEndHund);
  119.     free((char *) pArgs);
  120.     return(0);
  121. }
  122.  
  123.  
  124. static void near pascal ErrorMsg(pStr)
  125. char        *pStr;
  126. {
  127.     fprintf(stderr, "%s\n", pStr);
  128.     return;
  129. }
  130.