home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / comm / bbbbs-7.2.lha / BBBBS / BBBBS72.lha / rexx / bbsMAINT.baud < prev    next >
Text File  |  1994-04-17  |  5KB  |  216 lines

  1. /* $VER: bbsMAINT.baud 7.2 (17.4.94) copyright 1990-94 Richard Lee Stockton
  2. FREELY DISTRIBUTABLE
  3.  
  4. this will check all message dirs for oldest messages, (that don't
  5. have '!!' as the first characters), and delete a few (1%) of them
  6. This macro is called after logout IF the grand total of messages
  7. exceeds the maximum set in the CONFIG.BBS file. Note that as of 4.0
  8. messages are copied to the sysop's email drawer before deletion.
  9. V5.9: a minimum of 10 messages are left in each conference.
  10. V7.1: deletes old Email BBBBS. archives if BBBBS_DAYS_OLD>0.
  11. V7.2: Appends to report called BBBBS.0 in sysop's email.
  12.  
  13. dat.conf.0=lowest
  14. dat.conf.1=highest
  15. dat.conf.2=oldest
  16. dat.conf.3=seqdate of oldest
  17. */
  18.  
  19. BBBBS_DAYS_OLD=0  /* set >0 to delete BBBBS. archives older than this */
  20.  
  21. bbspath=GETCLIP('BBS_path')
  22. msgpath=GETCLIP('BBS_msgpath')
  23.  
  24. ARG SYSTEM_MSG_LIMIT sysop .
  25.  
  26. arg=bbspath'Email/'sysop'/BBBBS.0'
  27. IF EXISTS(arg) THEN ot='A'
  28. ELSE ot='W'
  29. CALL CLOSE(STDOUT)
  30. CALL OPEN(STDOUT,arg,ot)
  31. SAY CENTER(' REPORT ',75,'=')
  32. SAY STRIP(SUBSTR(SOURCELINE(1),10))
  33. SAY DATE('W') DATE() TIME('C')
  34.  
  35. IF BBBBS_DAYS_OLD>0 THEN
  36.   DO
  37.     SAY 'Checking BBBBS archives...'
  38.     idate=DATE('I')-BBBBS_DAYS_OLD
  39.     users=SHOWDIR(bbspath'EmailFiles','D')
  40.     tot=0
  41.     DO i=1 TO WORDS(users)
  42.       user=WORD(users,i)
  43.       IF user=sysop THEN ITERATE i
  44.       bbf.=''
  45.       IF FileList(bbspath'EmailFiles/'user'/BBBBS_*',bbf)>0 THEN
  46.         DO j=1 TO bbf.0
  47.           finfo=STATEF(bbf.j)
  48.           IF WORD(finfo,5)>idate THEN ITERATE j
  49.           size=WORD(finfo,2)
  50.           tot=tot+size
  51.           IF DELETE(bbf.j) THEN SAY RIGHT(size,7) bbf.j 'deleted.'
  52.           IF UPPER(RIGHT(bbf.j,4))='.LHA' THEN
  53.             DO
  54.               fnum=SUBSTR(bbf.j,LASTPOS('_',bbf.j)+1)
  55.               fnum=LEFT(fnum,LENGTH(fnum)-4)
  56.               mail=bbspath'Email/'user'/BBBBS.'fnum
  57.               finfo=STATEF(mail)
  58.               size=WORD(finfo,2)
  59.               tot=tot+size
  60.               IF DELETE(mail) THEN
  61.                 SAY RIGHT(size,7) DATE(,WORD(finfo,5),'I') mail 'deleted'
  62.             END
  63.         END
  64.     END
  65.     SAY '  'tot 'bytes purged.  Completed at' TIME('C')
  66.     SAY
  67.   END
  68.  
  69. dat.=''
  70. dat.0.1=0
  71. totmsgs=0
  72. DO conf=1 TO 99
  73.   dat.conf.2=0
  74.   temp=WORDS(SHOWDIR(msgpath'MSG'conf))
  75.   IF temp=0 THEN
  76.     DO
  77.       dat.conf.1=0
  78.       ITERATE conf
  79.     END
  80.   totmsgs=totmsgs+temp
  81. END
  82. IF totmsgs<SYSTEM_MSG_LIMIT THEN EXIT
  83.  
  84. tot2kill=SYSTEM_MSG_LIMIT%100
  85. IF tot2kill<1 THEN tot2kill=1
  86. tot2kill=tot2kill+totmsgs-SYSTEM_MSG_LIMIT
  87. killed=0
  88. SAY 'Purging' tot2kill 'public messages.'
  89.  
  90. DO conf=1 TO 99
  91.   IF dat.conf.1=0 THEN ITERATE conf
  92.   dat.conf.0=countcheck('FirstMessage'conf)
  93.   dat.conf.1=countcheck('LastMessage'conf)
  94.   dat.conf.2=dat.conf.0-1
  95.   CALL get_next()
  96. END
  97.  
  98. DO k=1 TO tot2kill
  99.   conf=which()
  100.   temp=dat.conf.2
  101.   IF temp>0 THEN
  102.     IF kill_one(temp) THEN
  103.       killed=killed+1
  104. END
  105. SAY
  106. EXIT
  107.  
  108.  
  109.  
  110. which:
  111. oldest=99999999
  112. oldnum=0
  113. DO i=1 TO 99
  114.   IF dat.i.1=0 | dat.i.3='' THEN ITERATE i
  115.   IF dat.i.3<oldest THEN
  116.     DO
  117.       oldest=dat.i.3
  118.       oldnum=i
  119.     END
  120. END
  121. RETURN oldnum
  122.  
  123.  
  124. get_next:
  125. IF dat.conf.1=0 | dat.conf.1=dat.conf.2 THEN RETURN
  126. thisconf=msgpath'MSG'conf
  127. msglist=SHOWDIR(thisconf)
  128. IF WORDS(msglist)<11 THEN
  129.   DO
  130.     dat.conf.1=0
  131.     RETURN
  132.   END
  133. dat.conf.3=''
  134. DO msgnum=dat.conf.2+1 TO dat.conf.1-1
  135.   IF FIND(msglist,msgnum)=0 THEN ITERATE msgnum
  136.   dat.conf.3=get_date(msgnum)
  137.   IF dat.conf.3~='' THEN LEAVE msgnum
  138. END
  139. dat.conf.2=msgnum
  140. IF msgnum=dat.conf.1 THEN dat.conf.1=0
  141. RETURN
  142.  
  143.  
  144. get_date:
  145. ARG msg .
  146. x=OPEN(f,thisconf'/'msg,'R')
  147. IF x=0 THEN RETURN ''
  148. line=READLN(f)
  149. IF LEFT(line,2)='!!' THEN
  150.   DO
  151.     CALL CLOSE(f)
  152.     RETURN ''
  153.   END
  154. line=READLN(f)
  155. line=READLN(f)
  156. line=READLN(f)
  157. line=READLN(f)
  158. CALL CLOSE(f)
  159. dateline=SPACE(WORD(line,3) WORD(line,4) WORD(line,5),1)
  160. seqdate=norm2seq(dateline)
  161. RETURN seqdate
  162.  
  163.  
  164. kill_one:
  165. ARG killnum .
  166. x=OPEN(f,msgpath'MSG'conf'/'killnum,'R')
  167. IF x=0 THEN RETURN 0
  168. data=READCH(f,65000)
  169. CALL CLOSE(f)
  170. CALL DELAY(28)
  171. mailname='MSG'conf'.'killnum
  172. x=OPEN(f,bbspath'Email/'sysop'/'mailname,'W')
  173. IF x=0 THEN RETURN 0
  174. CALL WRITECH(f,data)
  175. CALL CLOSE(f)
  176. CALL DELETE(msgpath'MSG'conf'/'killnum)
  177. CALL get_next()
  178. RETURN 1
  179.  
  180.  
  181. countcheck:
  182. PARSE ARG filename
  183. IF filename='' THEN RETURN 0
  184. filename=bbspath'Numbers/'filename
  185. x=OPEN(f,filename,'R')
  186. IF x=0 THEN RETURN 0
  187. cc=READLN(f)
  188. CALL CLOSE(f)
  189. RETURN cc
  190.  
  191.  
  192. norm2seq:     /* takes '3 Jan 1990' and turns it into '19900103' */
  193. ARG da' 'mo' 'yr .
  194. da=da/1
  195. mo=STRIP(mo)
  196. yr=yr/1
  197. IF da<10 THEN da='0'da
  198. SELECT
  199.   WHEN mo='JAN' THEN mo='01'
  200.   WHEN mo='FEB' THEN mo='02'
  201.   WHEN mo='MAR' THEN mo='03'
  202.   WHEN mo='APR' THEN mo='04'
  203.   WHEN mo='MAY' THEN mo='05'
  204.   WHEN mo='JUN' THEN mo='06'
  205.   WHEN mo='JUL' THEN mo='07'
  206.   WHEN mo='AUG' THEN mo='08'
  207.   WHEN mo='SEP' THEN mo='09'
  208.   WHEN mo='OCT' THEN mo='10'
  209.   WHEN mo='NOV' THEN mo='11'
  210.   WHEN mo='DEC' THEN mo='12'
  211.   OTHERWISE RETURN(-1);
  212. END
  213. RETURN yr||mo||da
  214.  
  215. /* bbsMAINT.baud */
  216.