home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff311.lzh / Etime / etime.c < prev    next >
C/C++ Source or Header  |  1990-01-31  |  7KB  |  202 lines

  1. /*-------------------------------------------------------------------------*/
  2. /*      Program:  etime                                                    */
  3. /*   Programmer:  George Kerber                                            */
  4. /*      Written:  07/16/89                                                 */
  5. /*     Compiler:  Lattice 5.04                                             */
  6. /*-------------------------------------------------------------------------*/
  7.  
  8. #include <stdio.h>
  9. #include <time.h>
  10. #include <string.h>
  11. #include <dos.h>
  12. #include <stdlib.h>
  13. #include <ctype.h>
  14.  
  15. #define WRITTEN "07/16/89 - 01/01/90"
  16. #define VERSION "v1.05c"
  17.  
  18.  
  19. void main();
  20. void mistake();
  21. void helpscreen();
  22. void makeline();
  23. void exitcode();
  24.   
  25. void main(int argc, char *argv[])
  26. {
  27. FILE *tfile;
  28. char node1[FNSIZE];
  29. char spacer[80] = "", *odata, option, opts[] = "";
  30. char filename[80] = "Multiple Color Options";
  31. char storedtime[80] = "Can't RETAIN and DELETE/START";
  32. char drive[FNSIZE], path[FMSIZE], node[FNSIZE], ext[FESIZE];
  33. long time1,time2;
  34. int i, next, hour = 0, minute = 0, second = 0;
  35. int rflag = 1, sflag = 0, nflag = 1, dflag = 0, cflag = 0;
  36.  
  37. stcgfn(node1,argv[0]);
  38. if(argc == 1 || (argc == 2 && argv[1][0] == '?')) {
  39.    printf("\x0c\n\n\n"); helpscreen(node1); }
  40.  
  41.  
  42. for( next = 1 ; (odata = argopt(argc,argv,opts,&next,&option)) != NULL ; ) {
  43.    switch(option) {
  44.       case 'r':   rflag = 0;
  45.                   if(dflag) mistake(storedtime,node1);
  46.                   break ;                          /*  retain file         */
  47.       case 's':   sflag++ ; break ;                /*  seconds             */
  48.       case 'n':   nflag = 0; break ;               /*  noline              */
  49.       case 'd':   dflag++;
  50.                   if(!rflag) mistake(storedtime,node1);
  51.                   break ;                          /*  delete/start only   */
  52.       case '3':   printf(""); 
  53.                   if(cflag) mistake(filename,node1); cflag++;
  54.                   break ;                          /*  orange              */
  55.       case '2':   printf("");
  56.                   if(cflag) mistake(filename,node1); cflag++;
  57.                   break ;                          /*  black               */
  58.       case '1':   printf("");
  59.                   if(cflag) mistake(filename,node1); cflag++;
  60.                   break ;                          /*  white (default)     */
  61.       case '5':   printf("");  break ;        /*  bold                */
  62.       case '6':   printf("");  break ;        /*  underline      */
  63.       case '7':   printf("");  break ;        /*  italics        */
  64.  
  65.       case 'm':   if(!strcmp(odata,"")) 
  66.                      mistake("Requires # of Spaces to Add",node1);
  67.                   for(i = (strlen(odata)) ; i >= 1 ; i--) {    
  68.                   if(!isdigit(odata[i - 1]))
  69.                      mistake("Only Numeric Entries",node1);
  70.                   } 
  71.                   i = atoi(odata);
  72.                   if(!i || i > 69) mistake("Entry must be 1 - 69",node1);
  73.                   for( ; i > 0 ;strcat(spacer," "), i--) ;
  74.                   break;
  75.         default:  mistake("Invalid Option",node1);
  76.       }
  77.    }
  78.  
  79. /*----- Begin error & option checking.-------------------------------------*/
  80. if(next >= argc) mistake("Missing TIMER Name",node1);
  81. if(argv[next][0] == '-') mistake("Missing TIMER Name",node1);
  82. if(argc > (next + 1)) mistake("Invalid Option Count",node1);
  83.  
  84. /*----- End error checking ------------------------------------------------*/
  85.  
  86. strsfn(argv[next],drive,path,node,ext);
  87.  
  88. if(strcmp(ext,"") && strcmp(ext,"etime")) 
  89.    mistake("Filename extension defaults to \".etime\"",node1);
  90.  
  91. strcpy(ext,"etime");
  92. if(drive[0] == '\0' && path[0] == '\0') { 
  93.    strcpy(drive,"ram:");
  94.    strcpy(path,"etime");
  95.    if(access("ram:etime",0)) mkdir("ram:etime"); }
  96.  
  97. if(drive[0] == '\0' && path[0] != '\0') 
  98.    mistake("Full path must be specified",node1);
  99.  
  100. strmfn(filename,drive,path,node,ext);   /*  create destination file name   */
  101.  
  102. /*-------------------------------------------------------------------------*/
  103.  
  104. if(dflag) remove(filename);
  105.  
  106. time(&time1);
  107. if(access(filename,0)) {
  108.    tfile = fopen(filename,"w");
  109.    if(tfile == (FILE *)NULL) mistake("Can't create etime file.",node1);
  110.    fprintf(tfile,"%ld\n",time1);
  111.    fflush(tfile);
  112.    fclose(tfile);
  113.    exitcode(0);
  114.    }
  115.    else {
  116.    tfile = fopen(filename,"r+");
  117.    if(tfile == (FILE *)NULL) mistake("Can't open file",node1);
  118.    fgets(storedtime,20,tfile);
  119.    fclose(tfile);
  120.    if(rflag) remove(filename);      /*  remove file unless -r (retain)     */
  121.    time2 = atol(storedtime);        /*  insure stored data is a long value */
  122.    if(time2 < 500000000) mistake("Invalid TIMER file format",node1);
  123.    time2 = time1 - time2;
  124.    if(time2 < 0) mistake("Invalid ETIME, check system clock",node1);
  125.    if(sflag) {
  126.       printf("%s%ld",spacer,time2); /*   output in total seconds           */
  127.       }
  128.       else {
  129.       second = time2 % 60;          /*   Calculate hours, minutes & seconds*/
  130.       time2 = time2 - second;
  131.       minute = (time2 / 60) % 60;
  132.       time2 = time2 - (minute * 60);
  133.       hour = time2 / 3600;
  134.       printf("%s%02d:%02d:%02d",spacer,hour,minute,second);  /* hh:mm:ss  */
  135.       }
  136.    }
  137.  
  138. if(nflag) printf("\n");             /*  output newline unless NOLINE       */
  139. exitcode(0);  
  140.  
  141. }  /*  ending brace for main  */
  142.  
  143. /*-------------------------------------------------------------------------*/
  144.  
  145. /*  EXITCODE FUNCTION  */
  146.  
  147. void exitcode(int x)
  148. {
  149. printf("");
  150. exit(x);
  151. }
  152.  
  153. /*-------------------------------------------------------------------------*/
  154.  
  155. /*  HELPSCREEN FUNCTION  */
  156.  
  157. void helpscreen(char node1[])
  158. {
  159. printf("     %s            George Kerber  %9s  %24s\n\n",node1,VERSION,WRITTEN);
  160. printf("     SYNTAX:  %s [[-s -r -n -d -1 -2 -3 -5 -6 -7] TIMERNAME]]\n\n",node1);
  161. printf("                  -s   Elapsed time is returned in seconds.\n");
  162. printf("                  -r   Stored time is not removed.\n");
  163. printf("                  -n   Newline will not be output.\n");
  164. printf("                  -d   Unconditionally deletes etime file & resets.\n");
  165. printf("                  -#   Color, boldface, underline & italics.\n\n");
  166. printf("     %s will return an elapsed time between the first and second\n",node1);
  167. printf("     execution of the program with the same argument.\n");
  168. printf("     Elapsed time will be returned as hh:mm:ss.\n\n");
  169. printf("     Execute %s with a TIMER name to start the timer.  Execute it\n",node1);
  170. printf("     a 2nd time with the same TIMER name to display the elapsed time.\n\n");
  171. exitcode(0);
  172. }
  173.  
  174. /*-------------------------------------------------------------------------*/
  175.  
  176. /*  MAKELINE FUNCTION  */
  177.  
  178. void makeline()
  179. {
  180. printf("  ___________________________________________________________________________\n\n");
  181. }
  182.  
  183. /*-------------------------------------------------------------------------*/
  184.  
  185. /*  MISTAKE FUNCTION  */
  186.  
  187. void mistake(char description[],char node1[])
  188. {
  189. printf("\n\07  ERROR:  %s --> %s.\n\n",node1,description);
  190. exitcode(5);
  191. }
  192.  
  193. /*-------------------------------------------------------------------------*/
  194. /*
  195.  
  196. 08/05/89 v1.03:   Changed default directory to ram:etime instead of env:.
  197.                   Added -r -n -d options.
  198. 11/01/89 v1.05b:  Re-compiled with Lattice 5.04
  199. 01/01/90 v1.05c:  Removed all global variables.
  200.  
  201. */
  202.