home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 458.lha / UpTime / UpTime.c < prev    next >
C/C++ Source or Header  |  1990-12-12  |  3KB  |  109 lines

  1. /*    UpTime.c
  2.  
  3.     Written by Christopher A. Wichura  (caw@miroc.chi.il.us)
  4.  
  5.     Status:  Public Domain.  Do with it as you wish.
  6.  
  7.     In using this program, you accept the responsibility for any and
  8.     all damages, loss of money/productivity/etc that may occur while
  9.     UpTime is in use.  C. Wichura can not and will not be held accountable.
  10.  
  11.     Description:
  12.         UpTime should be run as part of your startup sequence with
  13.         the SET option.  This will create a global environment
  14.         variable with the time the system was booted.  Running
  15.         UpTime with no arguements will then read this variable and
  16.         print out the time the system booted.  Useful for people
  17.         who leave their system on for great lengths of time and
  18.         would like to have an easy way to tell how long it has
  19.         been up.
  20.  
  21.         Note that the last boot message is displayed even when
  22.         the SET option is being used.  Therefor, you may wish to
  23.         redirect the output to NULL: (or, pray tell, NIL:) when
  24.         running UpTime in your Startup-Sequence.  Also, ENV: must
  25.         exist before UpTime is run.
  26. */
  27.  
  28. #include <exec/types.h>
  29. #include <proto/exec.h>
  30. #include <proto/dos.h>
  31. #include <exec/libraries.h>
  32. #include <dos/rdargs.h>
  33. #include <dos/datetime.h>
  34. #include <dos/var.h>
  35. #include <string.h>
  36.  
  37. #define ARG_TEMPLATE "SET/S"
  38. #define ARG_SET        0
  39. #define ARG_sizeof    1
  40.  
  41. LONG __saveds __asm UpTime(register __d0 LONG CmdLen, register __a0 char *CmdPtr)
  42. {
  43.     register struct Library *DOSBase;
  44.     struct RDArgs *ArgsPtr;
  45.     struct RDArgs MyArgs;
  46.     char *ArgArray[ARG_sizeof];
  47.     LONG    error = 0;
  48.     struct DateTime dt;
  49.     char Day [LEN_DATSTRING+1];
  50.     char Date[LEN_DATSTRING+1];
  51.     char Time[LEN_DATSTRING+1];
  52.  
  53.     if (!(DOSBase = OpenLibrary("dos.library", 36)))
  54.         return 20;
  55.  
  56.     memset((char *)&MyArgs, 0, sizeof(struct RDArgs));
  57.     memset(ArgArray, 0, sizeof(ArgArray));
  58.  
  59.     if (!(ArgsPtr = ReadArgs(ARG_TEMPLATE, (LONG *)&ArgArray, &MyArgs))) {
  60.         PrintFault(IoErr(), NULL);
  61.         error = 15;
  62.         goto MyExit;
  63.     }
  64.  
  65.     /* if we are to set the UpTime then we do so here */
  66.  
  67.     if (ArgArray[ARG_SET]) {
  68.         DateStamp((LONG *)&dt.dat_Stamp);
  69.  
  70.         if (!SetVar("UpTime", (UBYTE *)&dt.dat_Stamp, sizeof(struct DateStamp), LV_VAR|GVF_GLOBAL_ONLY|GVF_BINARY_VAR)) {
  71.             PutStr("Error writing UpTime data.\n");
  72.             error = 5;
  73.             goto MyExit;
  74.         }
  75.     }
  76.  
  77.     /* now read an print the UpTime */
  78.  
  79.     if (GetVar("UpTime", (UBYTE *)&dt.dat_Stamp, sizeof(struct DateStamp), LV_VAR|GVF_GLOBAL_ONLY|GVF_BINARY_VAR) != sizeof(struct DateStamp)) {
  80.         PutStr("Error reading UpTime data.\n");
  81.         error = 5;
  82.         goto MyExit;
  83.     }
  84.  
  85.     memset(Day,  0, LEN_DATSTRING + 1);
  86.     memset(Date, 0, LEN_DATSTRING + 1);
  87.     memset(Time, 0, LEN_DATSTRING + 1);
  88.  
  89.     dt.dat_Format = FORMAT_DOS;
  90.     dt.dat_Flags = 0;
  91.     dt.dat_StrDay = Day;
  92.     dt.dat_StrDate = Date;
  93.     dt.dat_StrTime = Time;
  94.     DateToStr(&dt);
  95.  
  96.     PutStr("System last booted on ");
  97.     PutStr(Day);
  98.     PutStr(", ");
  99.     PutStr(Date);
  100.     PutStr(" at ");
  101.     PutStr(Time);
  102.     PutStr(".\n");
  103.  
  104. MyExit:
  105.     CloseLibrary(DOSBase);
  106.  
  107.     return error;    
  108. }
  109.