home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 mARCH / PCWK3A99.iso / Linux / DDD331 / DDD-3_1_.000 / DDD-3_1_ / ddd-3.1.1 / ddd / expired.C < prev    next >
C/C++ Source or Header  |  1998-04-29  |  4KB  |  141 lines

  1. // $Id: expired.C,v 1.12 1998/04/29 15:33:30 zeller Exp $ -*- C++ -*-
  2. // Check for expiration date
  3.  
  4. // Copyright (C) 1996 Technische Universitaet Braunschweig, Germany.
  5. // Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. // 
  7. // This file is part of DDD.
  8. // 
  9. // DDD is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public
  11. // License as published by the Free Software Foundation; either
  12. // version 2 of the License, or (at your option) any later version.
  13. // 
  14. // DDD is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  17. // See the GNU General Public License for more details.
  18. // 
  19. // You should have received a copy of the GNU General Public
  20. // License along with DDD -- see the file COPYING.
  21. // If not, write to the Free Software Foundation, Inc.,
  22. // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23. // 
  24. // DDD is the data display debugger.
  25. // For details, see the DDD World-Wide-Web page, 
  26. // `http://www.cs.tu-bs.de/softech/ddd/',
  27. // or send a mail to the DDD developers <ddd@ips.cs.tu-bs.de>.
  28.  
  29. char expired_rcsid[] = 
  30.     "$Id: expired.C,v 1.12 1998/04/29 15:33:30 zeller Exp $";
  31.  
  32. #ifdef __GNUG__
  33. #pragma implementation
  34. #endif
  35.  
  36. #include "expired.h"
  37.  
  38. #include "version.h"
  39. #include <stdio.h>
  40. #include <time.h>
  41. #if !HAVE_DIFFTIME
  42. inline double difftime(time_t time1, time_t time0) { return time1 - time0; }
  43. #endif
  44.  
  45.  
  46. //-----------------------------------------------------------------------------
  47. // Check expiration date
  48. //-----------------------------------------------------------------------------
  49.  
  50. // Return expiration time.  0: no expiration time, -1: invalid expiration time.
  51. static time_t ddd_expiration_time()
  52. {
  53.     string expiration_date = DDD_EXPIRES;
  54.     if (expiration_date == "")
  55.     {
  56.     // No expiration date given
  57.     return 0;
  58.     }
  59.  
  60.     int year  = 0;
  61.     int month = 0;
  62.     int day   = 0;
  63.     sscanf(expiration_date.chars(), "%d-%d-%d", &year, &month, &day);
  64.     if (year == 0 || month == 0 || day == 0)
  65.     return -1;
  66.  
  67.     struct tm expiration_tm;
  68.     expiration_tm.tm_sec   = 0;
  69.     expiration_tm.tm_min   = 0;
  70.     expiration_tm.tm_hour  = 0;
  71.     expiration_tm.tm_mday  = day;
  72.     expiration_tm.tm_mon   = month - 1;
  73.     expiration_tm.tm_year  = year - 1900; // No, this is no Y2K problem.  -AZ
  74.     expiration_tm.tm_wday  = -1;
  75.     expiration_tm.tm_yday  = -1;
  76.     expiration_tm.tm_isdst = -1;
  77.     
  78.     time_t expiration_time = mktime(&expiration_tm);
  79.     if (expiration_time < 0)
  80.     return -1;
  81.  
  82.     return expiration_time;
  83. }
  84.  
  85. string ddd_expiration_date()
  86. {
  87.     time_t expiration_time = ddd_expiration_time();
  88.     if (expiration_time == 0)
  89.     return "";        // No expiration
  90.     else if (expiration_time < 0)
  91.     return "the epoch";    // Invalid time
  92.  
  93.     string pretty_expiration_date;
  94.  
  95. #if HAVE_STRFTIME
  96.     char buffer[1024];
  97.     strftime(buffer, sizeof buffer, "%A, %Y-%m-%d, at %H:%M", 
  98.          localtime(&expiration_time));
  99.     pretty_expiration_date = buffer;
  100. #elif HAVE_ASCTIME
  101.     pretty_expiration_date = asctime(localtime(&expiration_time));
  102.     pretty_expiration_date.gsub("\n", "");
  103. #else
  104.     pretty_expiration_date = DDD_EXPIRES;
  105. #endif
  106.  
  107.     return pretty_expiration_date;
  108. }
  109.  
  110. bool ddd_expired()
  111. {
  112.     time_t expiration_time = ddd_expiration_time();
  113.     if (expiration_time == 0)
  114.     {
  115.     // No expiration time -- this never ever expires.
  116.     return false;
  117.     }
  118.     else if (expiration_time < 0)
  119.     {
  120.     // Invalid expiration time -- consider as expired.
  121.     return true;
  122.     }
  123.  
  124.     time_t current_time = time((time_t)0);
  125.     if (current_time < 0)
  126.     {
  127.     // No current time -- consider as expired.
  128.     return true;
  129.     }
  130.  
  131.     double seconds_since_expiration = difftime(current_time, expiration_time);
  132.     if (seconds_since_expiration <= 0)
  133.     {
  134.     // Still within expiration date
  135.     return false;
  136.     }
  137.  
  138.     // Expired.
  139.     return true;
  140. }
  141.