home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume3 / do < prev    next >
Text File  |  1989-02-03  |  4KB  |  159 lines

  1. Path: xanth!mcnc!uvaarpa!umd5!purdue!decwrl!decvax!mandrill!hal!ncoast!allbery
  2. From: geof@nswitgould.OZ (Geoffrey Jones)
  3. Newsgroups: comp.sources.misc
  4. Subject: v03i001: do.c - a calendar-like utility
  5. Message-ID: <8548@nswitgould.OZ>
  6. Date: 20 Apr 88 03:03:47 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: geof@nswitgould.OZ (Geoffrey Jones)
  9. Organization: Comp Sci, NSWIT, Australia
  10. Lines: 146
  11. Approved: allbery@ncoast.UUCP
  12.  
  13. comp.sources.misc: Volume 3, Issue 1
  14. Submitted-By: "Geoffrey Jones" <geof@nswitgould.OZ>
  15. Archive-Name: do
  16.  
  17. [1.  This was not shar'ed; I "cheap-shar"'ed it from an editor.
  18.  2.  So why didn't this go to the Australian submoderator?  ++bsa]
  19.  
  20. echo x - do.c
  21. sed 's/^X//' <<\EOF >do.c
  22. X/*    NAME    
  23. X
  24. X        do.c
  25. X
  26. X
  27. X    SYNTAX
  28. X
  29. X        do [option] ...   command ...
  30. X    
  31. X
  32. X    OPTIONS
  33. X
  34. X        All options take the form -Xnumber, where X is
  35. X        a single alphabetic character and number is a
  36. X        sensible integer. Do not include spaces between
  37. X        the option flag and number.
  38. X
  39. X        -d    specifies the day of the month (1 -31).
  40. X        -m    specifies the month (1 - 12).
  41. X        -y    specifies the year (0 - 99).
  42. X        -D    specifies the day of the week (Mon = 1).
  43. X        -W    specifies the week of the month (1 - 5)
  44. X            calculated such that week 1 is the first 
  45. X            7-day block, week 2 the 2nd 7-day block, etc.
  46. X
  47. X
  48. X    DESCRIPTION
  49. X
  50. X        do executes command(s) if the system calendar agrees
  51. X        with the dates coded in the options. If no options are
  52. X        set then the command(s) are executed regardless of the
  53. X        system date.
  54. X
  55. X        if the commands are started they are run under bourne shell
  56. X        (sh). do returns the exit code returned by sh for the
  57. X        last of the executed commands.
  58. X
  59. X        If any command contains spaces, metacharacters, etc., then
  60. X        the whole command should be quoted so that the command is
  61. X        passed through to the command interpreter (sh) as a
  62. X        single string.
  63. X
  64. X
  65. X    EXAMPLE
  66. X
  67. X        do -D2 -m11 -W1 "echo Melbourne Cup Day\!"
  68. X
  69. X        First Tuesday in November.
  70. X
  71. X        do -d13 -D5 date "cat Black" "alias rm rm -i"
  72. X
  73. X        Do the obvious on black Fridays.
  74. X
  75. X
  76. X    COMPILE
  77. X
  78. X        cc do.c -o do
  79. X
  80. X
  81. X    AUTHOR, etc.
  82. X
  83. X        Geoffrey Jones, April 19 1988
  84. X        Computer Science Department,
  85. X        University of Technology, Sydney
  86. X
  87. X
  88. X    BUGS
  89. X
  90. X        Falls over after 1999.
  91. X
  92. X
  93. X    SEE ALSO
  94. X
  95. X        ctime(3)  calendar(1)
  96. X
  97. X*/
  98. X
  99. X#include <stdio.h>
  100. X#include <time.h>
  101. X
  102. Xmain(argc, argv)
  103. Xint    argc;
  104. Xchar    *argv[];
  105. X{
  106. X    long            time(),ti;
  107. X    static int    status, i;
  108. X    struct tm       *localtime(),*tms;
  109. X
  110. X    static int    day, month, year, wday, mweek;
  111. X    static int    dayflg, monthflg, yearflg, wdayflg, mweekflg;
  112. X
  113. X    for (i = 1; i < argc; i++)
  114. X        if (argv[i][0] == '-')
  115. X            switch (argv[i][1]) {
  116. X                case 'd' : day = atoi(&argv[i][2]);
  117. X                       dayflg++;
  118. X                       break;
  119. X                case 'm' : month = atoi(&argv[i][2]) - 1;
  120. X                       monthflg++;
  121. X                       break;
  122. X                case 'y' : year = atoi(&argv[i][2]);
  123. X                       yearflg++;
  124. X                       break;
  125. X                case 'D' : wday = atoi(&argv[i][2]) % 7;
  126. X                       wdayflg++;
  127. X                       break;
  128. X                case 'W' : mweek = atoi(&argv[i][2]) - 1;
  129. X                       mweekflg++;
  130. X                       break;
  131. X                default  : usage(argv);
  132. X            };
  133. X
  134. X    time(&ti);
  135. X    tms=localtime(&ti);
  136. X
  137. X    if (dayflg   && tms->tm_mday != day)             exit(0);
  138. X    if (monthflg && tms->tm_mon  != month)           exit(0);
  139. X    if (yearflg  && tms->tm_year != year)            exit(0);
  140. X    if (wdayflg  && tms->tm_wday != wday)            exit(0);
  141. X    if (mweekflg && (tms->tm_mday - 1) / 7 != mweek) exit(0);
  142. X
  143. X    for (i = 1; i < argc; i++)
  144. X        if (argv[i][0] != '-')
  145. X            status = system(argv[i]); 
  146. X
  147. X    exit(status);
  148. X}
  149. X
  150. Xusage(argv)
  151. Xchar    *argv[];
  152. X{
  153. X    printf("\tUsage:  %s -[dmyDW]number] ...  [command] ... \n",
  154. X           argv[0]);
  155. X    exit(1);
  156. X}
  157. EOF
  158. exit 0
  159.