home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / comm / bbbbs-7.2.lha / BBBBS / BBBBS72.lha / rexx / bbsQUICKOUT.rexx < prev    next >
OS/2 REXX Batch file  |  1994-03-22  |  14KB  |  528 lines

  1. /* $VER: bbsQUICKOUT.rexx 7.1 © 1993 Richard Lee Stockton (22.3.94) 
  2.       copyright 1993 Richard Lee Stockton and Gramma Software
  3.       - FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
  4.  
  5.  Gathers and archives all NEW mail, messages, and file descriptions
  6.       into an emailfile called QUICK_n.lha for later download.
  7. */
  8.  
  9. CR='0D'x
  10. LF='0A'x
  11.  
  12. SIGNAL ON ERROR
  13. SIGNAL ON SYNTAX
  14. SIGNAL ON FAILURE
  15. OPTIONS FAILAT 666
  16.  
  17. PARSE ARG name level lastbrowse sincedate excludelist 
  18.  
  19. bps=GETCLIP('BBS_QUICKOUT_BAUD')
  20. CALL SETCLIP('BBS_QUICKOUT_BAUD')
  21.  
  22. figarg='s:CONFIG.BBS'
  23. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  24. x=OPEN(f,figarg,'R')
  25. IF x=0 THEN
  26.   DO
  27.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  28.     CALL GETOUT(20)
  29.   END
  30.  
  31. lynes.=''
  32. DO i=1 TO 8
  33.   lynes.i=READLN(f)
  34. END
  35. CALL CLOSE(f)
  36.  
  37. compos=POS('/*',lynes.1)
  38. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  39. bbsname=STRIP(lynes.1)
  40. sysop=WORD(lynes.2,1)
  41. sysoplevel=WORD(lynes.5,1)
  42. bbspath=WORD(lynes.6,1)
  43. IF name='' THEN name=sysop
  44.  
  45. /* wait up to 5 minutes for QUICKIN to finish processing */
  46.  
  47. DO i=1 TO 100 WHILE GETCLIP('BBS_'name)='QUICKIN'
  48.   CALL DELAY(150)
  49. END
  50.  
  51. /* Should only be one QUICKOUT process at a time per user */
  52.  
  53. IF GETCLIP('BBS_'name)='QUICK' THEN EXIT
  54.  
  55. CALL CLOSE(STDOUT)
  56. CALL OPEN(STDOUT,'RAM:QUICKOUT.STDOUT','W')
  57. SAY STRIP(SUBSTR(SOURCELINE(1),10))
  58. SAY
  59. CALL PRAGMA('P',-1)
  60. CALL TIME('R')
  61. CALL SETCLIP('BBS_'name,'QUICK')
  62. DO i=1
  63.   IF GETCLIP('BBS_QUICKOUT'i)='' THEN  /* info clip for external STOP */
  64.     DO
  65.       CALL SETCLIP('BBS_QUICKOUT'i,name)
  66.       clipnum=i
  67.       LEAVE i
  68.     END
  69. END
  70. CALL MAKEDIR(bbspath'EmailFiles/'name)
  71. IF level='' THEN
  72.   DO
  73.     level=99
  74.     x=OPEN(f,bbspath'Users/'name,'R')
  75.     IF x=0 THEN EXIT 22
  76.     data.=''
  77.     DO i=1
  78.       line=READLN(f)
  79.       IF EOF(f) THEN LEAVE i
  80.       data.i=line
  81.     END
  82.     data.0=i-1
  83.     CALL CLOSE(f)
  84.     city=docity(data.3)
  85.     data.13=DATE('S')'  'TIME('C')
  86.     lastbrowse=WORD(data.16,1)
  87.     sincedate=WORD(data.16,2)
  88.     IF FIND(noquick,'FILELIST')=0 THEN
  89.       data.16=countcheck('LastFile') DATE('S') TIME()
  90.     excludelist=data.21
  91.     IF FIND(noquick,'MESSAGES')=0 THEN
  92.       DO
  93.         CALL SETCLIP('BBS_'name'_22',data.22)
  94.         temp=''
  95.         DO i=1 TO level
  96.           IF WORD(data.22,i)=-1 THEN temp=STRIP(temp -1)
  97.           ELSE temp=STRIP(temp countcheck('LastMessage'i))
  98.         END
  99.         data.22=temp
  100.       END
  101.     noquick=UPPER(data.26)
  102.     x=OPEN(f,bbspath'Users/'name,'W')
  103.     IF x~=0 THEN
  104.       DO i=1 TO data.0
  105.         CALL WRITELN(f,data.i)
  106.       END
  107.     CALL CLOSE(f)
  108.   END
  109. ELSE
  110.   DO
  111.     city=GETCLIP('BBS_city')
  112.     CALL SETCLIP('BBS_city')
  113.     noquick=UPPER(GETCLIP('BBS_'name'_26'))
  114.     CALL SETCLIP('BBS_'name'_26')
  115.   END
  116.  
  117. IF ~EXISTS(bbspath'Users/'name) THEN CALL GETOUT(21)
  118. CALL check_abort()
  119.  
  120. IF FIND(noquick,'MESSAGES')=0 THEN CALL ArcMsgs.rexx(name)
  121. CALL check_abort()
  122.  
  123. x=OPEN(f,bbspath'Numbers/LastMail','R')
  124. IF x=0 THEN CALL GETOUT(27)
  125. lastm=READLN(f)+1
  126. CALL CLOSE(f)
  127. ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastMail 'lastm
  128.  
  129.  
  130. /* add Messages, Libraries, and Conferences to archive */
  131.  
  132. frn=bbspath'Friends/'name
  133. IF EXISTS(frn) THEN
  134.   ADDRESS COMMAND 'c:copy' frn bbspath'EmailFiles/'name'/Friends'
  135.  
  136. CALL PRAGMA('D',bbspath'EmailFiles/'name)
  137. nlist=''
  138. IF EXISTS('Conferences') THEN nlist='Conferences'
  139. IF EXISTS('Libraries') THEN nlist=STRIP(nlist 'Libraries')
  140. IF EXISTS('Friends') THEN nlist=STRIP(nlist 'Friends')
  141. IF EXISTS('Marked') THEN nlist=STRIP(nlist 'Marked')
  142. CALL strip_ansi(bbspath'EmailFiles/'name nlist)
  143. IF EXISTS('Messages') THEN nlist=STRIP(nlist 'Messages')
  144. comm='CD' bbspath'EmailFiles/'name LF 'lha -2amN m'
  145. comm=comm 'QUICK_'lastm'.lha'
  146. SAY comm
  147. SAY nlist
  148. ADDRESS COMMAND comm nlist
  149. CALL check_abort()
  150.  
  151.  
  152. /* gather and archive email and emailfiles */
  153.  
  154. mailfiles=''
  155. email=SHOWDIR(bbspath'Email/'name)
  156. DO i=1 TO WORDS(email)
  157.   x=OPEN(f,bbspath'Email/'name'/'WORD(email,i),'R')
  158.   IF x=0 THEN ITERATE i
  159.   line=READLN(f)
  160.   CALL CLOSE(f)
  161.   file=WORD(line,4)
  162.   IF file='' | ~EXISTS(bbspath'EmailFiles/'name'/'file) THEN ITERATE i
  163.   IF LEFT(UPPER(file),6)='QUICK_' THEN ITERATE i
  164.   IF WORD(STATEF(bbspath'EmailFiles/'name'/'file),2)>0 THEN
  165.     DO
  166.       mailfiles=STRIP(mailfiles 'EmailFiles/'name'/'file)
  167.       xdl=bbspath'EmailFiles/'name'/'file'.xdl'
  168.       IF EXISTS(xdl) THEN
  169.         CALL RENAME(xdl,bbspath'EmailFiles/'name'/QUICK_'lastm'.lha.xdl')
  170.     END
  171. END
  172.  
  173. CALL check_abort()
  174. IF mailfiles~='' THEN
  175.   DO
  176.     comm='CD' bbspath LF 'lha -2axmN m'
  177.     comm=comm 'EmailFiles/'name'/QUICK_'lastm'.lha' mailfiles
  178.     SAY comm
  179.     ADDRESS COMMAND comm
  180.   END
  181. SAY
  182.  
  183. CALL check_abort()
  184. IF email~='' THEN
  185.   DO
  186.     CALL strip_ansi(bbspath'Email/'name email)
  187.     comm='CD' bbspath LF 'lha -2axmN m'
  188.     comm=comm 'EmailFiles/'name'/QUICK_'lastm'.lha Email/'name'/#?'
  189.     SAY comm
  190.     ADDRESS COMMAND comm
  191.   END
  192. SAY
  193.  
  194.  
  195. /* Gather WELCOME(s), UNTIL(s), GOODBYE and all
  196.    new Information files into "Notices" drawer */
  197.  
  198. CALL check_abort()
  199. CALL MAKEDIR(bbspath'EmailFiles/'name'/Notices')
  200.  
  201. ulist=''
  202. IF FIND(noquick,'HELLO')=0 & EXISTS(bbspath'BBS_TEXT/HELLO') THEN
  203.   ulist='HELLO'
  204. IF FIND(noquick,'WELCOME')=0 & EXISTS(bbspath'BBS_TEXT/WELCOME') THEN
  205.   ulist=STRIP(ulist 'WELCOME')
  206. arg='WELCOME.'RIGHT(DATE('S'),4)
  207. IF EXISTS(bbspath'BBS_TEXT/'arg) THEN ulist=STRIP(ulist arg)
  208. arg='WELCOME.'LEFT(DATE('W'),3)
  209. IF EXISTS(bbspath'BBS_TEXT/'arg) THEN ulist=STRIP(ulist arg)
  210. IF FIND(noquick,'GOODBYE')=0 & EXISTS(bbspath'BBS_TEXT/GOODBYE') THEN
  211.   ulist=STRIP(ulist 'GOODBYE')
  212. IF FIND(noquick,'BAUD.'bps)=0 & EXISTS(bbspath'BBS_TEXT/BAUD.'bps) THEN
  213.   ulist=STRIP(ulist 'BAUD.'bps)
  214. untils.=''
  215. IF FileList(bbspath'BBS_TEXT/UNTIL.*',untils)>0 THEN
  216.   DO ui=1 TO untils.0
  217.     IF RIGHT(untils.ui,8)<DATE('S') THEN ITERATE ui
  218.     ELSE ulist=STRIP(ulist untils.ui)
  219.   END
  220. DROP untils.
  221. levels.=''
  222. IF FileList(bbspath'BBS_TEXT/LEVEL.*',levels)>0 THEN
  223.   DO ui=1 TO levels.0
  224.     p=LASTPOS('.',levels.ui)
  225.     x=SUBSTR(levels.ui,p+1)
  226.     PARSE VAR x lo'-'hi .
  227.     IF ~DATATYPE(lo,'W') | ~DATATYPE(hi,'W') THEN ITERATE ui
  228.     IF lo>level | hi<level THEN ITERATE ui
  229.     ulist=STRIP(ulist levels.ui)
  230.   END
  231. DROP levels.
  232.  
  233. CALL check_abort()
  234. DO i=1 TO WORDS(ulist)
  235.   comm='CD' bbspath'BBS_TEXT'LF'copy'
  236.   comm=comm WORD(ulist,i) bbspath'EmailFiles/'name'/Notices'
  237.   ADDRESS COMMAND comm
  238. END
  239.  
  240. CALL check_abort()
  241. ulist=''
  242. dm=DATE(,sincedate,'S')
  243. PARSE VAR dm da' 'mo' 'yr .
  244. yr=RIGHT(yr,2)
  245. sincedate=da'-'mo'-'yr
  246. arg=bbspath'Information'
  247. ADDRESS COMMAND 'C:LIST >ram:infolist' arg 'NOHEAD DATES SINCE' sincedate
  248. IF WORD(STATEF('ram:infolist'),2)>3 THEN
  249.   DO
  250.     x=OPEN(f,'ram:infolist','R')
  251.     IF x=0 THEN SAY 'ram:infolist failed to open for reading!'
  252.     ELSE
  253.       DO i=1
  254.         line=READLN(f)
  255.         IF EOF(f) THEN LEAVE i
  256.         IF LEFT(line,1)=':' THEN ITERATE i
  257.         fyle=WORD(line,1)
  258.         IF FIND(noquick,UPPER(fyle))>0 THEN ITERATE i
  259.         ulist=STRIP(ulist fyle)
  260.         readcount=STATEF(bbspath'Information/'fyle)
  261.         readcount=WORD(readcount,8)
  262.         IF ~DATATYPE(readcount,'W') THEN readcount=0
  263.         ADDRESS COMMAND 'C:filenote' bbspath'Information/'fyle readcount+1
  264.       END
  265.     CALL CLOSE(f)
  266.   END
  267.  
  268. CALL check_abort()
  269. DO i=1 TO WORDS(ulist)
  270.   comm='CD' bbspath'Information'LF'copy'
  271.   comm=comm WORD(ulist,i) bbspath'EmailFiles/'name'/Notices'
  272.   ADDRESS COMMAND comm
  273. END
  274.  
  275. CALL check_abort()
  276. IF FIND(noquick,'STATS.BBS')=0 THEN CALL bbsSTATS.rexx(name 0)
  277. IF FIND(noquick,'HOURLY')=0 THEN CALL ShowHourly.rexx(name 99 0)
  278.  
  279. CALL check_abort()
  280. IF level>=sysoplevel THEN
  281.   DO
  282.     ADDRESS COMMAND 'info >'bbspath'EmailFiles/'name'/Notices/Info_Devs'
  283.     ADDRESS COMMAND 'rxset >'bbspath'EmailFiles/'name'/Notices/Info_Clips'
  284.     ADDRESS COMMAND 'avail >'bbspath'EmailFiles/'name'/Notices/Info_Memory'
  285.     temp=bbspath'Lists/NEW_USERS'
  286.     IF EXISTS(temp) THEN
  287.       ADDRESS COMMAND 'copy' temp bbspath'EmailFiles/'name'/Notices'
  288.     temp=bbspath'Lists/CBV_USERS'
  289.     IF EXISTS(temp) THEN
  290.       ADDRESS COMMAND 'copy' temp bbspath'EmailFiles/'name'/Notices'
  291.   END
  292.  
  293. CALL check_abort()
  294. IF WORDS(bbspath'EmailFiles/'name'/Notices')>0 THEN
  295.   DO
  296.     temp=bbspath'EmailFiles/'name'/Notices'
  297.     CALL strip_ansi(temp SHOWDIR(temp))
  298.     comm='CD' bbspath'EmailFiles/'name||LF'lha -2axmN m'
  299.     comm=comm bbspath'Em