home *** CD-ROM | disk | FTP | other *** search
/ The Devil's Doorknob BBS Capture (1996-2003) / devilsdoorknobbbscapture1996-2003.iso / Dloads / WWIVMODS / PRE412.ZIP / TIMEWIN.MOD < prev    next >
Text File  |  1990-08-31  |  16KB  |  446 lines

  1. Spotnick #1 @5468
  2. Sat Aug 25 00:55:48 1990
  3.                         ╔══════════════════════════╗
  4.                         ║ TIME WINDOW MODIFICATION ║
  5.                         ╚════════════╦═════════════╝
  6.                         ╔════════════╩═════════════╗
  7.                         ║    By Spotnick 1@5468    ║
  8.                         ║ And Chris Miller 49@5468 ║
  9.                         ╚══════════════════════════╝
  10.  
  11.  
  12.    This is a modification to the Time Window Mod made by Bilbo Baggins
  13.    The Principal change is that the time of the user who logs when a Time
  14.    Window is setted in X minutes,the time of this user will be reduced.
  15.    We are working now on a fonction 'day' for the Time Window.
  16.    To Use the time Window,all is like the other version,but this one fits
  17.    on WWIV 4.11. So what it do ? It reserved the time for a user for 15 min
  18.    and only this user can log on,all other will receive a "Network will be
  19.    busy for 30 min please call later". The Fonction will be available by
  20.    typing " ~ " (tilda) at the main menu,you just have to set the level
  21.    you want.
  22.  
  23.  
  24. So let's begin now...
  25.  
  26. -------------------------------------------------------------------------
  27. Put this anywhere in the Top of the BBS.C
  28.  
  29. /* mod beg */
  30. #include <fcntl.h>
  31. #include <stdio.h>
  32. #include <io.h>
  33. #include <sys\stat.h>
  34. /* mod end */
  35.  
  36. Add this before the void mainmenu() in BBS.C
  37.  
  38. /* mod beg */
  39. void timeedit()
  40. {
  41.   static char ch,s1[3],s2[3];
  42.   static tmod timemod;
  43.   static int  tfile,t2file,i,j,quitit;
  44.   static long currrec;
  45.   static char save2[3],save1[3];
  46.  
  47.   quitit = 1;
  48.   while ((quitit == 1) && (!hangup))    {
  49.       prt(2,"TimeWindow: Q,A,E,D,L,?: ");
  50.       ch=onek("Q?AEDL");
  51.       switch(ch) {
  52.          case 'Q':
  53.                   quitit=0;
  54.                   break;
  55.          case 'A':
  56.                   prt(1,"Hour (0-24)? ");
  57.                   input(save1,2);
  58.                   nl();
  59.                   prt(2,"Minute (0-59)? ");
  60.                   input(save2,2);
  61.                   nl();
  62.                   j=(60*(atoi(save1)) + (atoi(save2)));
  63.                   strcpy(s1, syscfg.datadir);
  64.                   strcat(s1, "TIMEMOD.DAT");
  65.                   tfile = open(s1,O_RDWR | O_CREAT | O_APPEND | O_BINARY,S_IREAD | S_IWRITE);
  66.                   currrec = filelength(tfile) / (long)sizeof(tmod);
  67.                   /* Check to see if user already signed up for time. */
  68.                   while ((currrec > 0) && (!hangup))
  69.                   {
  70.                       lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  71.                       currrec--;
  72.                       read(tfile, (void *)(&timemod), sizeof(tmod));
  73.  
  74.                       /* If thisuser.name = timemod.username then exit */
  75.                       if (!strcmp(thisuser.name,timemod.username)){
  76.                           prt(2,"You've already reserved a time!");
  77.                           nl();
  78.                           close(tfile);
  79.                           quitit=0;
  80.                           break;
  81.                       }
  82.  
  83.                       /* If time already taken then exit */
  84.                       /* j = requested time...i=one of the taken times.  */
  85.                       i = 60*(atoi(timemod.userhour)) + (atoi(timemod.usermin));
  86.                       if ((j>=i) && (j<=i+15)){
  87.                           prt(2,"Time span already reserved! Try another time.");
  88.                           nl();
  89.                           close(tfile);
  90.                           quitit=0;
  91.                           break;
  92.                       }
  93.                   }
  94.                   close(tfile);
  95.                   if (quitit) {
  96.                      strcpy(s1, syscfg.datadir);
  97.                      strcat(s1, "TIMEMOD.DAT");
  98.                      tfile = open(s1,O_RDWR | O_CREAT | O_APPEND | O_BINARY,S_IREAD | S_IWRITE);
  99.                      strcpy(timemod.username,"                               ");
  100.                      strcpy(timemod.username,thisuser.name);
  101.                      strcpy(timemod.userhour,save1);
  102.                      strcpy(timemod.usermin,save2);
  103.                      write(tfile, (void *)(&timemod), sizeof(tmod));
  104.                      close(tfile);
  105.                   } else {
  106.                      quitit=1;
  107.                   }
  108.                   break;
  109.           case 'E':
  110.                   quitit = 1;
  111.                   prt(1,"Hour (0-24)? ");
  112.                   input(save1,2);
  113.                   nl();
  114.                   prt(2,"Minute (0-59)? ");
  115.                   input(save2,2);
  116.                   nl();
  117.                   j=(60*(atoi(save1)) + (atoi(save2)));
  118.                   strcpy(s1, syscfg.datadir);
  119.                   strcat(s1, "TIMEMOD.DAT");
  120.                   tfile = open(s1,O_RDWR | O_CREAT | O_BINARY,S_IREAD | S_IWRITE);
  121.                   currrec = filelength(tfile) / (long)sizeof(tmod);
  122.                   /* Check to see if user already signed up for time. */
  123.                   while ((currrec > 0) && (!hangup))
  124.                   {
  125.                       lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  126.                       currrec--;
  127.                       read(tfile, (void *)(&timemod), sizeof(tmod));
  128.                       /* If time already taken then exit */
  129.                       /* j = requested time...i=one of the taken times.  */
  130.                       i = 60*(atoi(timemod.userhour)) + (atoi(timemod.usermin));
  131.                       if ((j>=i) && (j<=i+15)){
  132.                           prt(2,"Time span already reserved! Try another time.");
  133.                           nl();
  134.                           quitit=0;
  135.                           break;
  136.                       }
  137.                   }
  138.                   close(tfile);
  139.                   strcpy(s1, syscfg.datadir);
  140.                   strcat(s1, "TIMEMOD.DAT");
  141.                   tfile = open(s1,O_RDWR | O_CREAT | O_BINARY,S_IREAD | S_IWRITE);
  142.                   currrec = filelength(tfile) / (long)sizeof(tmod);
  143.                   /* Find users record and allow editing */
  144.                   while ((currrec > 0) && (!hangup) && (quitit ==1))
  145.                   {
  146.                       lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  147.                       currrec--;
  148.                       read(tfile, (void *)(&timemod), sizeof(tmod));
  149.                       /* If thisuser.name = timemod.username then */
  150.                       if (!strcmp(thisuser.name,timemod.username)){
  151.                           lseek(tfile, (currrec) * (long)sizeof(tmod), SEEK_SET);
  152.                           strcpy(timemod.userhour,save1);
  153.                           strcpy(timemod.usermin,save2);
  154.                           write(tfile, (void *)(&timemod), sizeof(tmod));
  155.                           close(tfile);
  156.                           nl();
  157.                           currrec = 0.0;
  158.                       }
  159.                   }
  160.                   close(tfile);
  161.                   break;
  162.          case 'D':
  163.                   strcpy(s1, syscfg.datadir);
  164.                   strcat(s1, "TIMEMOD.DAT");
  165.                   tfile = open(s1,O_RDWR | O_BINARY);
  166.                   strcpy(s1, syscfg.datadir);
  167.                   strcat(s1, "TIMEMOD.TMP");
  168.                   remove(s1);
  169.                   t2file = open(s1,O_RDWR | O_CREAT | O_APPEND | O_BINARY,S_IREAD | S_IWRITE);
  170.                   currrec = filelength(tfile) / (long)sizeof(tmod);
  171.                   /* Check to see if user already signed up for time. */
  172.                   while ((currrec > 0) && (!hangup))
  173.                   {
  174.                       lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  175.                       currrec--;
  176.                       read(tfile, (void *)(&timemod), sizeof(tmod));
  177.                       /* If thisuser.name = timemod.username then exit */
  178.                       if (strcmp(thisuser.name,timemod.username))
  179.                            write(t2file, (void *)(&timemod), sizeof(tmod));
  180.                   }
  181.                   close(tfile);
  182.                   close(t2file);
  183.                   strcpy(s1, syscfg.datadir);
  184.                   strcat(s1, "TIMEMOD.DAT");
  185.                   remove(s1);
  186.                   chdir("DATA");
  187.                   rename("TIMEMOD.TMP","TIMEMOD.DAT");
  188.                   chdir("..");
  189.                   nl();
  190.                   break;
  191.          case 'L':
  192.                   nl();
  193.                   prt(7,"User Name                       Time     ");
  194.                   nl();
  195.                   prt(3,"------------------------------- ---------");
  196.                   nl();
  197.                   strcpy(s1, syscfg.datadir);
  198.                   strcat(s1, "TIMEMOD.DAT");
  199.                   tfile = open(s1,O_RDONLY | O_BINARY);
  200.                   currrec = filelength(tfile) / (long)sizeof(tmod);
  201.                   strcpy(s2,"                              \r\n");
  202.                   while ((currrec > 0) && (!hangup))
  203.                   {
  204.                       lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  205.                       currrec--;
  206.                       read(tfile, (void *)(&timemod), sizeof(tmod));
  207.                       strcpy(s2,timemod.username);
  208.                       i = 30 - strlen(s2);
  209.                       while (i >= 0) {
  210.                         strcat(s2," ");
  211.                         i--;
  212.                       }
  213.                       strcat(s2," ");
  214.                       strcat(s2,timemod.userhour);
  215.                       strcat(s2,":");
  216.                       strcat(s2,timemod.usermin);
  217.                       pl(s2);
  218.                   }
  219.                   nl();
  220.                   close(tfile);
  221.                   break;
  222.          case '?':
  223.                   printmenu(15);
  224.                   break;
  225.          }
  226.     }
  227.     return;
  228. }
  229. /* mod end */
  230.  
  231. Put this in void mainmenu() after the case '*' in BBS.C
  232.  
  233. /* mod beg */
  234.       case '~':
  235.         if (thisuser.sl>=XX)  <=== (Put here the level you want)
  236.         timeedit();
  237.         break;
  238. /* mod end */
  239.  
  240. Press F2 and load your BBSULT.C
  241.  
  242. Put this before void getuser() (DON'T PUT THAT NOW... YOU'LL HAVE THE RIGHT
  243. VERSION AT THE END OF THE FILE if you want the time reduced mod, or put this
  244. one if not)...
  245.  
  246. /* mod beg */
  247. void timemod()
  248. {
  249.  tmod    timemod;
  250.  struct tm      *currtime;
  251.  long    currrec,secs;
  252.  char    fname[81];
  253.  int     tfile,timetmp,holdtime;
  254.  
  255.     time(&secs);
  256.     currtime = localtime(&secs);
  257.     holdtime = 60*currtime->tm_hour + currtime->tm_min;
  258.     strcpy(fname, syscfg.datadir);
  259.     strcat(fname, "TIMEMOD.DAT");
  260.     tfile = open(fname, (O_RDWR | O_BINARY));
  261.     currrec = filelength(tfile) / (long)sizeof(tmod);
  262.     while ((currrec > 0) && (!hangup))
  263.     {
  264.         lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  265.         currrec--;
  266.         read(tfile, (void *)(&timemod), sizeof(tmod));
  267.         timetmp = atoi(timemod.userhour)*60 + atoi(timemod.usermin);
  268.         if ( holdtime >= timetmp && (holdtime <= (timetmp+15))) {
  269.             if (strcmp(thisuser.name,timemod.username)){
  270.                pl("Network will be busy for 30 minutes! Call back later.");
  271.                hangup=1;
  272.             } else {
  273.                 close(tfile);
  274.                 return;
  275.             }
  276.         }
  277.     }
  278.     close(tfile);
  279.     return;
  280. }
  281. /* mod end */
  282.  
  283. Now put this in pocedure getuser
  284.  
  285.     if (usernum>0) {
  286.       read_user(usernum,&thisuser);
  287.       realsl=thisuser.sl;
  288.       topscreen();
  289. /* mod beg */
  290.       timemod();
  291. /* mod end */
  292.       ok=1;
  293.       outstr("PW: ");
  294.  
  295. Now press F2 and load your Vardec.H
  296.  
  297. Put this at the end of the file
  298.  
  299.  
  300. /* mod beg */
  301. /* Time Window's 'tmod' structure */
  302. typedef struct {
  303.         char            username[31];
  304.         char            userhour[51];
  305.         char            usermin[51];
  306. } tmod;
  307. /* mod end */
  308.  
  309. #define NUM_CTYPES 10
  310. #define VERSION_NUMBER "WWIV v4.11"
  311. #define max_buf 1024
  312. #define VER_VECT 0x6a
  313. #define MSG_COLOR 0
  314.  
  315. And now here are the mods for the time reduced!
  316.  
  317.  
  318.  
  319. *** Put this at the top of your BBSUTL.C, after the Copyrights:
  320.  
  321. /* mod beg */
  322. extern float time_next_call;
  323. extern long int wd_holdtime, wd_nextwindow;
  324. #define WINDOWSIZE 15
  325. /* mod end */
  326.  
  327.  
  328. *** Put this in the file BBSUTL.C, before the function "getuser()",
  329.     at the place of the other function  "timemod()"  :
  330.  
  331. /* mod beg */
  332. void timemod()
  333. {
  334.  tmod    timemod;
  335.  struct tm      *currtime;
  336.  long    currrec,secs;
  337.  char    fname[81];
  338.  int     tfile,timetmp,holdtime;
  339.  int     delta=24*60, nextwindow=-1, firstwindow=24*60;
  340.  int     found=0;
  341.  
  342.     time_next_call = 0;
  343.     time(&secs);
  344.     currtime = localtime(&secs);
  345.     holdtime = 60*currtime->tm_hour + currtime->tm_min;
  346.     strcpy(fname, syscfg.datadir);
  347.     strcat(fname, "TIMEMOD.DAT");
  348.     tfile = open(fname, (O_RDWR | O_BINARY));
  349.     currrec = filelength(tfile) / (long)sizeof(tmod);
  350.     while (currrec>0 && !hangup)
  351.     {
  352.         lseek(tfile, (currrec - 1) * (long)sizeof(tmod), SEEK_SET);
  353.         currrec--;
  354.         read(tfile, (void *)(&timemod), sizeof(tmod));
  355.         timetmp = atoi(timemod.userhour)*60 + atoi(timemod.usermin);
  356.         if (timetmp < firstwindow)
  357.             firstwindow = timetmp;
  358.         if ( holdtime>=timetmp && holdtime<=timetmp+WINDOWSIZE && !found) {
  359.             if (strcmp(thisuser.name,timemod.username)){
  360.                pl("A time window is currently active.  Please call back later.");
  361.                hangup=1;
  362.             } else {
  363.                found++;
  364.             }
  365.         } else {
  366.             if ( timetmp-holdtime<delta && timetmp-holdtime>0 &&
  367.                  strcmp(thisuser.name, timemod.username) &&
  368.                  !found)
  369.                 nextwindow = timetmp;
  370.         }
  371.     }
  372.     if (nextwindow==-1 && firstwindow!=24*60)
  373.         nextwindow = firstwindow;
  374.     if (nextwindow!=-1 && nextwindow < holdtime)
  375.         holdtime = holdtime - 24*60;
  376.     wd_holdtime = holdtime;
  377.     wd_nextwindow = nextwindow;             /* quick and dirty, but works. */
  378.     close(tfile);
  379.     return;
  380. }
  381. /* mod end */
  382.  
  383.  
  384. *** Put this in the file BBSUTL.C, in the function "logon()", after
  385.     the lines with '.'  :
  386.  
  387. . if ((syscfg.logon_c[0]) && live_user) {
  388. .   nl();
  389. .   strcpy(s1,syscfg.logon_c);
  390. .   strcpy(s2,create_chain_file("CHAIN.TXT"));
  391. .   stuff_in(s,s1,s2,"","","","");
  392. .   full_external(s,0,1);
  393. .   nl();
  394. .   nl();
  395. . }
  396. .
  397. . if (live_user) {
  398. .   nl();
  399. /* mod beg */
  400.     if ( wd_nextwindow!=-1 &&
  401.          wd_holdtime*60+(long int) nsl() > wd_nextwindow*60 &&
  402.          wd_holdtime < wd_nextwindow) {
  403.         wd_nextwindow *= 60;
  404.         wd_holdtime *= 60;
  405.         time_next_call = nsl() - (wd_nextwindow - wd_holdtime);
  406.         thisuser.extratime -= time_next_call;
  407.         pl("A time window will soon be active.  Your time has been reduced.");
  408.         nl();
  409.     }
  410. /* mod end */
  411.  
  412.  
  413. *** Put this in file BBS.C, in the fonction "main()" (end of
  414.     the file), after lines with '.' :
  415.  
  416. .main_menu_label:
  417. .     while (!hangup) {
  418. .       if (curdloads)
  419. .         dlmainmenu();
  420. .       else
  421. .         mainmenu();
  422. .     }
  423. /* mod beg */
  424.       if (time_next_call)
  425.         thisuser.extratime += time_next_call;
  426. /* mod end */
  427.  
  428.  
  429. *** Put this in the file VARS.H, at the end of the file:
  430.  
  431. /* mod beg */
  432. #define WINDOWSIZE 15
  433.  
  434. float time_next_call;
  435. long int wd_holdtime, wd_nextwindow;
  436. /* mod end */
  437.  
  438.  
  439. And That's it! All must be fine,if you have any questions about that mod just
  440. send us an E-Mail or call here at The Fortress of Shadow (514) 661-1416 and
  441. we will answer to your questions without problems.
  442.  
  443.  
  444.                            1»2»3»4Spotnick3«2«1«
  445.                                71@5468
  446.                               3WWIV net