home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / comm / bbbbs-7.2.lha / BBBBS / BBBBS72.lha / rexx / bbsQUICKIN.rexx < prev    next >
OS/2 REXX Batch file  |  1993-08-01  |  26KB  |  1,073 lines

  1. /* $VER: bbsQUICKIN.rexx 6.2 © 1993 Richard Lee Stockton (1.8.93) 
  2.    - FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
  3.  
  4.    Processes archive "QUICKIN.lha" in user's emailfiles.
  5.    Should be made by bbsQUICK.rexx, the offline reader.
  6.    Handles incoming mail, messages, downloads, and uploads.
  7.    Also handles some sysop and super-sysop offline functions.
  8. */
  9.  
  10. CR='0D'x
  11. LF='0A'x
  12. SIGNAL ON ERROR
  13. SIGNAL ON SYNTAX
  14. SIGNAL ON FAILURE
  15.  
  16. ARG name level sysoplevel accessflag .
  17.  
  18. fromcli=0
  19. figarg='s:CONFIG.BBS'
  20. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  21. x=OPEN(f,figarg,'R')
  22. IF x=0 THEN
  23.   DO
  24.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  25.     CALL GETOUT(20)
  26.   END
  27. lynes.=''
  28. DO i=1 TO 31
  29.   lynes.i=READLN(f)
  30. END
  31. CALL CLOSE(f)
  32. compos=POS('/*',lynes.1)
  33. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  34. bbsname=STRIP(lynes.1)
  35. sysop=WORD(lynes.2,1)
  36. calls=WORD(lynes.31,1)
  37. IF name='' THEN
  38.   DO
  39.     sysoplevel=WORD(lynes.5,1)
  40.     bbspath=WORD(lynes.6,1)
  41.     IF RIGHT(bbspath,1)~=':' & RIGHT(bbspath,1)~='/' THEN bbspath=bbspath'/'
  42.     msgpath=WORD(lynes.7,1)
  43.     IF RIGHT(msgpath,1)~=':' & RIGHT(msgpath,1)~='/' THEN msgpath=msgpath'/'
  44.     libpath=WORD(lynes.8,1)
  45.     IF RIGHT(libpath,1)~=':' & RIGHT(libpath,1)~='/' THEN libpath=libpath'/'
  46.     name=sysop
  47.     IF ~EXISTS(bbspath'EmailFiles/'name'/QUICKIN.lha') THEN
  48.       DO
  49.         SAY bbspath'EmailFiles/'name'/QUICKIN.lha does not exist!'
  50.         CALL GETOUT(21)
  51.       END
  52.     level=99
  53.     sysoplevel=99
  54.     accessflag=0
  55.     fromcli=1
  56.   END
  57. ELSE
  58.   DO
  59.     bbspath=GETCLIP('BBS_path')
  60.     msgpath=GETCLIP('BBS_msgpath')
  61.     libpath=GETCLIP('BBS_libpath')
  62.   END
  63.  
  64. /* Wait 10 mins for QUICKOUT process (started by this user) to finish */
  65.  
  66. DO i=1 TO 100 WHILE GETCLIP('BBS_'name)='QUICK'
  67.   CALL DELAY(300)
  68. END
  69.  
  70. /* Only one QUICKIN process at a time per user */
  71.  
  72. IF GETCLIP('BBS_'name)='QUICKIN' THEN EXIT
  73. CALL PRAGMA('P',-1)
  74.  
  75. CALL TIME('R')
  76. CALL SETCLIP('BBS_'name,'QUICKIN')
  77. DO i=1 WHILE GETCLIP('BBS_QUICK_WAIT')~=''
  78.   CALL DELAY(500)                 /* wait for main filesaves to complete */
  79.   IF TIME('E')>42000 THEN LEAVE i /* don't wait forever */
  80. END
  81. DO i=1
  82.   IF GETCLIP('BBS_QUICKIN'i)='' THEN  /* info clip for external STOP */
  83.     DO
  84.       CALL SETCLIP('BBS_QUICKIN'i,name)
  85.       clipnum=i
  86.       LEAVE i
  87.     END
  88. END
  89. arcfile=bbspath'Emailfiles/'name'/QUICKIN.lha'
  90. savefiles=0
  91. upfiles=-1
  92. upbytes=0
  93. upmail=0
  94. upmsg=''
  95.  
  96. lastm=get_last(bbspath'Numbers/LastMail')
  97. CALL CLOSE(STDOUT)
  98. CALL OPEN(STDOUT,bbspath'Email/'name'/BBBBS.'lastm,'W')
  99. SAY ' Mail: 'lastm
  100. SAY ' From: BBBBS'
  101. SAY '   To: 'name
  102. SAY ' Subj: QUICKIN Report'
  103. SAY ' Date: 'DATE('W') DATE() TIME('C')
  104. SAY LEFT('=',75,'=')
  105. SAY 'Here is the log of your QUICKIN file processing.'
  106. SAY STRIP(SUBSTR(SOURCELINE(1),10))
  107. SAY
  108.  
  109. ADDRESS COMMAND 'lha -q t' arcfile
  110. IF RC>0 THEN
  111.   DO
  112.     SAY 'QUICKIN archive is corrupt!  Aborting...'
  113.     SIGNAL DONE
  114.   END
  115.  
  116. CALL MAKEDIR('RAM:QUICK')
  117. CALL PRAGMA('D','RAM:QUICK')
  118. ADDRESS COMMAND 'CD RAM:QUICK' LF 'lha -mN x' arcfile
  119. SAY
  120.  
  121. CALL check_abort()
  122. CALL do_file_requests()
  123. CALL check_abort()
  124. CALL do_file_deletes()
  125.  
  126. DO i=.001 TO .999 BY .001
  127.   CALL check_abort()
  128.   hdr=RIGHT(i,3)'.HDR'
  129.   IF ~EXISTS(hdr) THEN ITERATE i
  130.   txt=RIGHT(i,3)'.TXT'
  131.   x=OPEN(f,hdr,'R')
  132.   IF x=0 THEN
  133.     DO
  134.       SAY hdr 'failed to open for reading.'
  135.       ITERATE i
  136.     END
  137.   hdr.=''
  138.   DO j=1 TO 6
  139.     hdr.j=READLN(f)
  140.   END
  141.   CALL CLOSE(f)
  142.   IF LEFT(hdr.1,6)='File: ' THEN CALL do_file()
  143.   ELSE IF LEFT(hdr.1,6)='  Msg:' THEN CALL do_msg()
  144.   ELSE IF LEFT(hdr.1,6)=' Mail:' THEN CALL do_mail()
  145.   ELSE
  146.     DO
  147.       SAY
  148.       SAY hdr 'is an unknown header type!'
  149.       DO j=1 TO 6
  150.         SAY hdr.j
  151.         SAY
  152.       END
  153.       ITERATE i
  154.     END
  155.   IF WORDS(SHOWDIR('RAM:QUICK','F'))=0 THEN LEAVE i
  156. END
  157.  
  158. IF savefiles=1 THEN
  159.   DO
  160.     x=OPEN(f,bbspath'Lists/Files','W')
  161.     IF x=0 THEN SAY bbspath'Lists/Files failed to open for writing!'
  162.     ELSE
  163.       DO
  164.         DO i=1 TO f.0
  165.           IF f.i~='' THEN CALL WRITELN(f,i f.i)
  166.         END
  167.         CALL CLOSE(f)
  168.         SAY 'Updated Lists/Files'
  169.       END
  170.     x=OPEN(f,bbspath'Lists/Files.ALPHA','W')
  171.     IF x=0 THEN SAY bbspath'Lists/Files.ALPHA failed to open for writing!'
  172.     ELSE
  173.       DO
  174.         DO i=1 TO a.0
  175.           num=WORD(a.i,3)
  176.           IF a.i~='' & f.num~='' THEN CALL WRITELN(f,a.i)
  177.         END
  178.         CALL CLOSE(f)
  179.         SAY 'Updated Lists/Files.ALPHA'
  180.       END
  181.     IF SHOW('P','BBBBS') THEN CALL SETCLIP('BBS_localfiles',2)
  182.     IF SHOW('P','BBBBS_LOCAL') THEN CALL SETCLIP('BBS_mainfiles',2)
  183.   END
  184.  
  185. DROP a. f. libs.
  186.  
  187. CALL check_abort()
  188.  
  189. IF EXISTS('RAM:QUICK/Files') THEN
  190.   ADDRESS COMMAND 'delete RAM:QUICK/Files ALL QUIET'
  191.  
  192. IF EXISTS('RAM:QUICK/Information') THEN
  193.   DO
  194.     IF level=99 THEN
  195.       ADDRESS COMMAND 'copy RAM:QUICK/Information/#?' bbspath'Information'
  196.     ADDRESS COMMAND 'delete RAM:QUICK/Information ALL QUIET'
  197.   END
  198. IF EXISTS('RAM:QUICK/BBS_TEXT') THEN
  199.   DO
  200.     IF level=99 THEN
  201.       ADDRESS COMMAND 'copy RAM:QUICK/BBS_TEXT/#?' bbspath'BBS_TEXT'
  202.     ADDRESS COMMAND 'delete RAM:QUICK/BBS_TEXT ALL QUIET'
  203.   END
  204. IF EXISTS('RAM:QUICK/rexxDoors') THEN
  205.   DO
  206.     IF level=99 THEN
  207.       ADDRESS COMMAND 'copy RAM:QUICK/rexxDoors/#?' bbspath'rexxDoors ALL'
  208.     ADDRESS COMMAND 'delete RAM:QUICK/rexxDoors ALL QUIET'
  209.   END
  210. IF EXISTS('RAM:QUICK/REXX') THEN
  211.   DO
  212.     IF level=99 THEN
  213.       ADDRESS COMMAND 'copy RAM:QUICK/REXX/#? REXX:'
  214.     ADDRESS COMMAND 'delete RAM:QUICK/REXX ALL QUIET'
  215.   END
  216. IF EXISTS('RAM:QUICK/S') THEN
  217.   DO
  218.     IF level=99 THEN
  219.       ADDRESS COMMAND 'copy RAM:QUICK/S/#? S:'
  220.     ADDRESS COMMAND 'delete RAM:QUICK/S ALL QUIET'
  221.   END
  222. IF EXISTS('RAM:QUICK/C') THEN
  223.   DO
  224.     IF level=99 THEN
  225.       ADDRESS COMMAND 'copy RAM:QUICK/C/#? C:'
  226.     ADDRESS COMMAND 'delete RAM:QUICK/C ALL QUIET'
  227.   END
  228. CALL check_abort()
  229. IF EXISTS('RAM:QUICK/MSG') THEN
  230.   DO
  231.     IF level=99 THEN
  232.       DO
  233.         d=SHOWDIR('RAM:QUICK/MSG','F')
  234.         DO i=1 TO WORDS(d)
  235.           msg=WORD(d,i)
  236.           PARSE VAR msg 'MSG'conf'.'msgnum
  237.           IF DATATYPE(conf,'W') & DATATYPE(msgnum,'W') THEN
  238.             DO
  239.               newname=msgpath'MSG'conf'/'msgnum
  240.               IF EXISTS(newname) THEN
  241.                 DO
  242.                   SAY newname 'already exists!'
  243.                   ITERATE i
  244.                 END
  245.               x=OPEN(f,'RAM:QUICK/MSG/'msg,'R')
  246.               IF x=0 THEN ITERATE i
  247.               a=READCH(f,65000)
  248.               CALL CLOSE(f)
  249.               a='!!'SUBSTR(a,3)
  250.               x=OPEN(f,newname,'W')
  251.               IF x=0 THEN ITERATE i
  252.               CALL WRITECH(f,a)
  253.               CALL CLOSE(f)
  254.               SAY 'Un-deleted message' msgnum 'in conference' conf
  255.             END
  256.         END
  257.       END
  258.     ADDRESS COMMAND 'delete RAM:QUICK/MSG ALL QUIET'
  259.   END
  260. SAY
  261.  
  262. CALL check_abort()
  263.  
  264. IF EXISTS('Super') THEN
  265.   DO
  266.     IF level=99 & EXISTS('Super/Super.rexx') THEN
  267.       DO
  268.         CALL PRAGMA('D','Super')
  269.         SAY 'running Super.rexx...'
  270.         CALL Super.rexx()
  271.         CALL PRAGMA('D','/')
  272.         SAY
  273.       END
  274.     CALL DELETE('Super/Super.rexx')
  275.     CALL DELETE('Super')
  276.   END
  277.  
  278. d=SHOWDIR('RAM:QUICK','F')
  279. IF d~='' THEN
  280.   DO
  281.     SAY
  282.     SAY 'Unable to process the following files.'
  283.     SAY
  284.     DO i=1 TO WORDS(d)
  285.       SAY
  286.       dname=WORD(d,i)
  287.       SAY 'Filename:' dname
  288.       x=OPEN(f,'RAM:QUICK/'dname,'R')
  289.       IF x=0 THEN
  290.         DO
  291.          SAY dname 'failed to open for reading!'
  292.           ITERATE i
  293.         END
  294.       stuff=READCH(f,65000)
  295.       CALL CLOSE(f)
  296.       CALL WRITECH(STDOUT,stuff)
  297.       CALL DELETE('RAM:QUICK/'dname)
  298.     END
  299.   END
  300.  
  301. DONE:
  302. CALL DELETE(arcfile)
  303.  
  304. IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
  305.   DO
  306.     oldmess=GETCLIP('BBS_MESSAGE')
  307.     IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
  308.     newmess='Your QUICKIN archive has been processed. A report is waiting in Email.'
  309.     CALL SETCLIP('BBS_MESSAGE',oldmess||newmess)
  310.     IF upfiles>0 | upmail>0 | upmsg~='' THEN
  311.       DO
  312.         CALL SETCLIP(name'_UPDATE',upfiles upbytes upmail upmsg)
  313.         upfiles=0
  314.         upbytes=0
  315.         upmail=0
  316.         upmsg=''
  317.       END
  318.   END
  319.  
  320. IF upfiles>0 | upmail>0 | upmsg~='' THEN
  321.   DO
  322.     x=OPEN(f,bbspath'Users/'name,'R')
  323.     IF x~=0 THEN
  324.       DO
  325.         data.=''
  326.         DO i=1
  327.           line=READL