home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / lora299s.zip / LIMITS.CPP < prev    next >
C/C++ Source or Header  |  1998-05-12  |  9KB  |  332 lines

  1.  
  2. // LoraBBS Version 2.99 Free Edition
  3. // Copyright (C) 1987-98 Marco Maccaferri
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 2 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program; if not, write to the Free Software
  17. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  
  19. #include "_ldefs.h"
  20. #include "lora_api.h"
  21.  
  22. TLimits::TLimits (void)
  23. {
  24.    fdDat = -1;
  25.    New ();
  26.    strcpy (DatFile, "limits.dat");
  27. }
  28.  
  29. TLimits::TLimits (PSZ pszDataPath)
  30. {
  31.    fdDat = -1;
  32.    New ();
  33.    strcpy (DatFile, pszDataPath);
  34.    if (DatFile[0] != '\0') {
  35. #if defined(__LINUX__)
  36.       if (DatFile[strlen (DatFile) - 1] != '/')
  37.          strcat (DatFile, "/");
  38. #else
  39.       if (DatFile[strlen (DatFile) - 1] != '\\')
  40.          strcat (DatFile, "\\");
  41. #endif
  42.    }
  43.    strcat (DatFile, "limits.dat");
  44. }
  45.  
  46. TLimits::~TLimits (void)
  47. {
  48.    if (fdDat != -1)
  49.       close (fdDat);
  50. }
  51.  
  52. USHORT TLimits::Add (VOID)
  53. {
  54.    USHORT retVal = FALSE, closeFile = FALSE;
  55.    LIMITS Limits;
  56.  
  57.    if (fdDat == -1) {
  58.       fdDat = sopen (DatFile, O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  59.       closeFile = TRUE;
  60.    }
  61.  
  62.    if (fdDat != -1) {
  63.       lseek (fdDat, 0L, SEEK_END);
  64.  
  65.       memset (&Limits, 0, sizeof (Limits));
  66.       Limits.Size = sizeof (Limits);
  67.       strcpy (Limits.Key, Key);
  68.       strcpy (Limits.Description, Description);
  69.       Limits.Level = Level;
  70.       Limits.Flags = Flags;
  71.       Limits.DenyFlags = DenyFlags;
  72.       Limits.CallTimeLimit = CallTimeLimit;
  73.       Limits.DayTimeLimit = DayTimeLimit;
  74.       Limits.DownloadLimit = DownloadLimit;
  75.       Limits.DownloadAt2400 = DownloadAt2400;
  76.       Limits.DownloadAt9600 = DownloadAt9600;
  77.       Limits.DownloadAt14400 = DownloadAt14400;
  78.       Limits.DownloadAt28800 = DownloadAt28800;
  79.       Limits.DownloadAt33600 = DownloadAt33600;
  80.       Limits.DownloadRatio = DownloadRatio;
  81.       Limits.RatioStart = RatioStart;
  82.       Limits.DownloadSpeed = DownloadSpeed;
  83.  
  84.       write (fdDat, &Limits, sizeof (Limits));
  85.       strcpy (LastKey, Key);
  86.       retVal = TRUE;
  87.    }
  88.  
  89.    if (closeFile == TRUE && fdDat != -1) {
  90.       close (fdDat);
  91.       fdDat = -1;
  92.    }
  93.  
  94.    return (retVal);
  95. }
  96.  
  97. VOID TLimits::New (VOID)
  98. {
  99.    Key[0] = '\0';
  100.    Description[0] = '\0';
  101.    Level = 0;
  102.    Flags = 0L;
  103.    DenyFlags = 0L;
  104.    CallTimeLimit = 0;
  105.    DayTimeLimit = 0;
  106.    DownloadLimit = 0;
  107.    DownloadAt2400 = 0;
  108.    DownloadAt9600 = 0;
  109.    DownloadAt14400 = 0;
  110.    DownloadAt28800 = 0;
  111.    DownloadAt33600 = 0;
  112.    DownloadRatio = 0;
  113.    RatioStart = 0;
  114.    DownloadSpeed = 0;
  115. }
  116.  
  117. VOID TLimits::Delete (VOID)
  118. {
  119.    int fdNew;
  120.    USHORT CloseFile = FALSE;
  121.    LIMITS Limits;
  122.  
  123.    if (fdDat == -1) {
  124.       fdDat = sopen (DatFile, O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  125.       CloseFile = TRUE;
  126.    }
  127.  
  128.    fdNew = sopen ("temp3.dat", O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  129.  
  130.    if (fdDat != -1 && fdNew != -1) {
  131.       lseek (fdDat, 0L, SEEK_SET);
  132.  
  133.       while (read (fdDat, &Limits, sizeof (Limits)) == sizeof (Limits)) {
  134.          if (strcmp (Key, Limits.Key))
  135.             write (fdNew, &Limits, sizeof (Limits));
  136.       }
  137.  
  138.       lseek (fdDat, 0L, SEEK_SET);
  139.       lseek (fdNew, 0L, SEEK_SET);
  140.  
  141.       while (read (fdNew, &Limits, sizeof (Limits)) == sizeof (Limits))
  142.          write (fdDat, &Limits, sizeof (Limits));
  143.       chsize (fdDat, tell (fdDat));
  144.    }
  145.  
  146.    if (fdNew != -1) {
  147.       close (fdNew);
  148.       unlink ("temp3.dat");
  149.    }
  150.  
  151.    if (CloseFile == TRUE && fdDat != -1) {
  152.       close (fdDat);
  153.       fdDat = -1;
  154.    }
  155. }
  156.  
  157. USHORT TLimits::First (VOID)
  158. {
  159.    USHORT retVal = FALSE;
  160.  
  161.    if (fdDat == -1)
  162.       fdDat = sopen (DatFile, O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  163.  
  164.    if (fdDat != -1) {
  165.       lseek (fdDat, 0L, SEEK_SET);
  166.       retVal = Next ();
  167.    }
  168.  
  169.    return (retVal);
  170. }
  171.  
  172. USHORT TLimits::Next (VOID)
  173. {
  174.    USHORT retVal = FALSE;
  175.    LIMITS Limits;
  176.  
  177.    New ();
  178.  
  179.    if (fdDat != -1) {
  180.       if (read (fdDat, &Limits, sizeof (Limits)) == sizeof (Limits)) {
  181.          strcpy (Key, Limits.Key);
  182.          strcpy (Description, Limits.Description);
  183.          Level = Limits.Level;
  184.          Flags = Limits.Flags;
  185.          DenyFlags = Limits.DenyFlags;
  186.          CallTimeLimit = Limits.CallTimeLimit;
  187.          DayTimeLimit = Limits.DayTimeLimit;
  188.          DownloadLimit = Limits.DownloadLimit;
  189.          DownloadAt2400 = Limits.DownloadAt2400;
  190.          DownloadAt9600 = Limits.DownloadAt9600;
  191.          DownloadAt14400 = Limits.DownloadAt14400;
  192.          DownloadAt28800 = Limits.DownloadAt28800;
  193.          DownloadAt33600 = Limits.DownloadAt33600;
  194.          DownloadRatio = Limits.DownloadRatio;
  195.          RatioStart = Limits.RatioStart;
  196.          DownloadSpeed = Limits.DownloadSpeed;
  197.          strcpy (LastKey, Key);
  198.          retVal = TRUE;
  199.       }
  200.    }
  201.  
  202.    return (retVal);
  203. }
  204.  
  205. USHORT TLimits::Previous (VOID)
  206. {
  207.    USHORT retVal = FALSE;
  208.    LIMITS Limits;
  209.  
  210.    New ();
  211.  
  212.    if (fdDat != -1) {
  213.       if (tell (fdDat) >= sizeof (Limits) * 2) {
  214.          lseek (fdDat, tell (fdDat) - sizeof (Limits) * 2, SEEK_SET);
  215.          read (fdDat, &Limits, sizeof (Limits));
  216.          strcpy (Key, Limits.Key);
  217.          strcpy (Description, Limits.Description);
  218.          Level = Limits.Level;
  219.          Flags = Limits.Flags;
  220.          DenyFlags = Limits.DenyFlags;
  221.          CallTimeLimit = Limits.CallTimeLimit;
  222.          DayTimeLimit = Limits.DayTimeLimit;
  223.          DownloadLimit = Limits.DownloadLimit;
  224.          DownloadAt2400 = Limits.DownloadAt2400;
  225.          DownloadAt9600 = Limits.DownloadAt9600;
  226.          DownloadAt14400 = Limits.DownloadAt14400;
  227.          DownloadAt28800 = Limits.DownloadAt28800;
  228.          DownloadAt33600 = Limits.DownloadAt33600;
  229.          DownloadRatio = Limits.DownloadRatio;
  230.          RatioStart = Limits.RatioStart;
  231.          DownloadSpeed = Limits.DownloadSpeed;
  232.          strcpy (LastKey, Key);
  233.          retVal = TRUE;
  234.       }
  235.    }
  236.  
  237.    return (retVal);
  238. }
  239.  
  240. USHORT TLimits::Read (PSZ pszName, USHORT fCloseFile)
  241. {
  242.    USHORT retVal = FALSE;
  243.    LIMITS Limits;
  244.  
  245.    New ();
  246.  
  247.    if (fdDat == -1)
  248.       fdDat = sopen (DatFile, O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  249.  
  250.    if (fdDat != -1) {
  251.       lseek (fdDat, 0L, SEEK_SET);
  252.  
  253.       while (retVal == FALSE && read (fdDat, &Limits, sizeof (Limits)) == sizeof (Limits)) {
  254.          if (!stricmp (pszName, Limits.Key)) {
  255.             strcpy (Key, Limits.Key);
  256.             strcpy (Description, Limits.Description);
  257.             Level = Limits.Level;
  258.             Flags = Limits.Flags;
  259.             DenyFlags = Limits.DenyFlags;
  260.             CallTimeLimit = Limits.CallTimeLimit;
  261.             DayTimeLimit = Limits.DayTimeLimit;
  262.             DownloadLimit = Limits.DownloadLimit;
  263.             DownloadAt2400 = Limits.DownloadAt2400;
  264.             DownloadAt9600 = Limits.DownloadAt9600;
  265.             DownloadAt14400 = Limits.DownloadAt14400;
  266.             DownloadAt28800 = Limits.DownloadAt28800;
  267.             DownloadAt33600 = Limits.DownloadAt33600;
  268.             DownloadRatio = Limits.DownloadRatio;
  269.             RatioStart = Limits.RatioStart;
  270.             DownloadSpeed = Limits.DownloadSpeed;
  271.             strcpy (LastKey, Key);
  272.             retVal = TRUE;
  273.          }
  274.       }
  275.    }
  276.  
  277.    if (fCloseFile == TRUE && fdDat != -1) {
  278.       close (fdDat);
  279.       fdDat = -1;
  280.    }
  281.  
  282.    return (retVal);
  283. }
  284.  
  285. USHORT TLimits::Update (VOID)
  286. {
  287.    USHORT retVal = FALSE, closeFile = FALSE;
  288.    LIMITS Limits;
  289.  
  290.    if (fdDat == -1) {
  291.       fdDat = sopen (DatFile, O_RDWR|O_BINARY|O_CREAT, SH_DENYNO, S_IREAD|S_IWRITE);
  292.       closeFile = TRUE;
  293.    }
  294.  
  295.    if (fdDat != -1) {
  296.       lseek (fdDat, 0L, SEEK_SET);
  297.       while (retVal == FALSE && read (fdDat, &Limits, sizeof (Limits)) == sizeof (Limits)) {
  298.          if (!stricmp (LastKey, Limits.Key)) {
  299.             lseek (fdDat, tell (fdDat) - sizeof (Limits), SEEK_SET);
  300.             memset (&Limits, 0, sizeof (Limits));
  301.             Limits.Size = sizeof (Limits);
  302.             strcpy (Limits.Key, Key);
  303.             strcpy (Limits.Description, Description);
  304.             Limits.Level = Level;
  305.             Limits.Flags = Flags;
  306.             Limits.DenyFlags = DenyFlags;
  307.             Limits.CallTimeLimit = CallTimeLimit;
  308.             Limits.DayTimeLimit = DayTimeLimit;
  309.             Limits.DownloadLimit = DownloadLimit;
  310.             Limits.DownloadAt2400 = DownloadAt2400;
  311.             Limits.DownloadAt9600 = DownloadAt9600;
  312.             Limits.DownloadAt14400 = DownloadAt14400;
  313.             Limits.DownloadAt28800 = DownloadAt28800;
  314.             Limits.DownloadAt33600 = DownloadAt33600;
  315.             Limits.DownloadRatio = DownloadRatio;
  316.             Limits.RatioStart = RatioStart;
  317.             Limits.DownloadSpeed = DownloadSpeed;
  318.             write (fdDat, &Limits, sizeof (Limits));
  319.             retVal = TRUE;
  320.          }
  321.       }
  322.    }
  323.  
  324.    if (closeFile == TRUE && fdDat != -1) {
  325.       close (fdDat);
  326.       fdDat = -1;
  327.    }
  328.  
  329.    return (retVal);
  330. }
  331.  
  332.