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 >
Wrap
OS/2 REXX Batch file
|
1993-08-01
|
26KB
|
1,073 lines
/* $VER: bbsQUICKIN.rexx 6.2 © 1993 Richard Lee Stockton (1.8.93)
- FREELY DISTRIBUTABLE AS LONG AS THIS NOTICE REMAINS -
Processes archive "QUICKIN.lha" in user's emailfiles.
Should be made by bbsQUICK.rexx, the offline reader.
Handles incoming mail, messages, downloads, and uploads.
Also handles some sysop and super-sysop offline functions.
*/
CR='0D'x
LF='0A'x
SIGNAL ON ERROR
SIGNAL ON SYNTAX
SIGNAL ON FAILURE
ARG name level sysoplevel accessflag .
fromcli=0
figarg='s:CONFIG.BBS'
IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
x=OPEN(f,figarg,'R')
IF x=0 THEN
DO
SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
CALL GETOUT(20)
END
lynes.=''
DO i=1 TO 31
lynes.i=READLN(f)
END
CALL CLOSE(f)
compos=POS('/*',lynes.1)
IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
bbsname=STRIP(lynes.1)
sysop=WORD(lynes.2,1)
calls=WORD(lynes.31,1)
IF name='' THEN
DO
sysoplevel=WORD(lynes.5,1)
bbspath=WORD(lynes.6,1)
IF RIGHT(bbspath,1)~=':' & RIGHT(bbspath,1)~='/' THEN bbspath=bbspath'/'
msgpath=WORD(lynes.7,1)
IF RIGHT(msgpath,1)~=':' & RIGHT(msgpath,1)~='/' THEN msgpath=msgpath'/'
libpath=WORD(lynes.8,1)
IF RIGHT(libpath,1)~=':' & RIGHT(libpath,1)~='/' THEN libpath=libpath'/'
name=sysop
IF ~EXISTS(bbspath'EmailFiles/'name'/QUICKIN.lha') THEN
DO
SAY bbspath'EmailFiles/'name'/QUICKIN.lha does not exist!'
CALL GETOUT(21)
END
level=99
sysoplevel=99
accessflag=0
fromcli=1
END
ELSE
DO
bbspath=GETCLIP('BBS_path')
msgpath=GETCLIP('BBS_msgpath')
libpath=GETCLIP('BBS_libpath')
END
/* Wait 10 mins for QUICKOUT process (started by this user) to finish */
DO i=1 TO 100 WHILE GETCLIP('BBS_'name)='QUICK'
CALL DELAY(300)
END
/* Only one QUICKIN process at a time per user */
IF GETCLIP('BBS_'name)='QUICKIN' THEN EXIT
CALL PRAGMA('P',-1)
CALL TIME('R')
CALL SETCLIP('BBS_'name,'QUICKIN')
DO i=1 WHILE GETCLIP('BBS_QUICK_WAIT')~=''
CALL DELAY(500) /* wait for main filesaves to complete */
IF TIME('E')>42000 THEN LEAVE i /* don't wait forever */
END
DO i=1
IF GETCLIP('BBS_QUICKIN'i)='' THEN /* info clip for external STOP */
DO
CALL SETCLIP('BBS_QUICKIN'i,name)
clipnum=i
LEAVE i
END
END
arcfile=bbspath'Emailfiles/'name'/QUICKIN.lha'
savefiles=0
upfiles=-1
upbytes=0
upmail=0
upmsg=''
lastm=get_last(bbspath'Numbers/LastMail')
CALL CLOSE(STDOUT)
CALL OPEN(STDOUT,bbspath'Email/'name'/BBBBS.'lastm,'W')
SAY ' Mail: 'lastm
SAY ' From: BBBBS'
SAY ' To: 'name
SAY ' Subj: QUICKIN Report'
SAY ' Date: 'DATE('W') DATE() TIME('C')
SAY LEFT('=',75,'=')
SAY 'Here is the log of your QUICKIN file processing.'
SAY STRIP(SUBSTR(SOURCELINE(1),10))
SAY
ADDRESS COMMAND 'lha -q t' arcfile
IF RC>0 THEN
DO
SAY 'QUICKIN archive is corrupt! Aborting...'
SIGNAL DONE
END
CALL MAKEDIR('RAM:QUICK')
CALL PRAGMA('D','RAM:QUICK')
ADDRESS COMMAND 'CD RAM:QUICK' LF 'lha -mN x' arcfile
SAY
CALL check_abort()
CALL do_file_requests()
CALL check_abort()
CALL do_file_deletes()
DO i=.001 TO .999 BY .001
CALL check_abort()
hdr=RIGHT(i,3)'.HDR'
IF ~EXISTS(hdr) THEN ITERATE i
txt=RIGHT(i,3)'.TXT'
x=OPEN(f,hdr,'R')
IF x=0 THEN
DO
SAY hdr 'failed to open for reading.'
ITERATE i
END
hdr.=''
DO j=1 TO 6
hdr.j=READLN(f)
END
CALL CLOSE(f)
IF LEFT(hdr.1,6)='File: ' THEN CALL do_file()
ELSE IF LEFT(hdr.1,6)=' Msg:' THEN CALL do_msg()
ELSE IF LEFT(hdr.1,6)=' Mail:' THEN CALL do_mail()
ELSE
DO
SAY
SAY hdr 'is an unknown header type!'
DO j=1 TO 6
SAY hdr.j
SAY
END
ITERATE i
END
IF WORDS(SHOWDIR('RAM:QUICK','F'))=0 THEN LEAVE i
END
IF savefiles=1 THEN
DO
x=OPEN(f,bbspath'Lists/Files','W')
IF x=0 THEN SAY bbspath'Lists/Files failed to open for writing!'
ELSE
DO
DO i=1 TO f.0
IF f.i~='' THEN CALL WRITELN(f,i f.i)
END
CALL CLOSE(f)
SAY 'Updated Lists/Files'
END
x=OPEN(f,bbspath'Lists/Files.ALPHA','W')
IF x=0 THEN SAY bbspath'Lists/Files.ALPHA failed to open for writing!'
ELSE
DO
DO i=1 TO a.0
num=WORD(a.i,3)
IF a.i~='' & f.num~='' THEN CALL WRITELN(f,a.i)
END
CALL CLOSE(f)
SAY 'Updated Lists/Files.ALPHA'
END
IF SHOW('P','BBBBS') THEN CALL SETCLIP('BBS_localfiles',2)
IF SHOW('P','BBBBS_LOCAL') THEN CALL SETCLIP('BBS_mainfiles',2)
END
DROP a. f. libs.
CALL check_abort()
IF EXISTS('RAM:QUICK/Files') THEN
ADDRESS COMMAND 'delete RAM:QUICK/Files ALL QUIET'
IF EXISTS('RAM:QUICK/Information') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/Information/#?' bbspath'Information'
ADDRESS COMMAND 'delete RAM:QUICK/Information ALL QUIET'
END
IF EXISTS('RAM:QUICK/BBS_TEXT') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/BBS_TEXT/#?' bbspath'BBS_TEXT'
ADDRESS COMMAND 'delete RAM:QUICK/BBS_TEXT ALL QUIET'
END
IF EXISTS('RAM:QUICK/rexxDoors') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/rexxDoors/#?' bbspath'rexxDoors ALL'
ADDRESS COMMAND 'delete RAM:QUICK/rexxDoors ALL QUIET'
END
IF EXISTS('RAM:QUICK/REXX') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/REXX/#? REXX:'
ADDRESS COMMAND 'delete RAM:QUICK/REXX ALL QUIET'
END
IF EXISTS('RAM:QUICK/S') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/S/#? S:'
ADDRESS COMMAND 'delete RAM:QUICK/S ALL QUIET'
END
IF EXISTS('RAM:QUICK/C') THEN
DO
IF level=99 THEN
ADDRESS COMMAND 'copy RAM:QUICK/C/#? C:'
ADDRESS COMMAND 'delete RAM:QUICK/C ALL QUIET'
END
CALL check_abort()
IF EXISTS('RAM:QUICK/MSG') THEN
DO
IF level=99 THEN
DO
d=SHOWDIR('RAM:QUICK/MSG','F')
DO i=1 TO WORDS(d)
msg=WORD(d,i)
PARSE VAR msg 'MSG'conf'.'msgnum
IF DATATYPE(conf,'W') & DATATYPE(msgnum,'W') THEN
DO
newname=msgpath'MSG'conf'/'msgnum
IF EXISTS(newname) THEN
DO
SAY newname 'already exists!'
ITERATE i
END
x=OPEN(f,'RAM:QUICK/MSG/'msg,'R')
IF x=0 THEN ITERATE i
a=READCH(f,65000)
CALL CLOSE(f)
a='!!'SUBSTR(a,3)
x=OPEN(f,newname,'W')
IF x=0 THEN ITERATE i
CALL WRITECH(f,a)
CALL CLOSE(f)
SAY 'Un-deleted message' msgnum 'in conference' conf
END
END
END
ADDRESS COMMAND 'delete RAM:QUICK/MSG ALL QUIET'
END
SAY
CALL check_abort()
IF EXISTS('Super') THEN
DO
IF level=99 & EXISTS('Super/Super.rexx') THEN
DO
CALL PRAGMA('D','Super')
SAY 'running Super.rexx...'
CALL Super.rexx()
CALL PRAGMA('D','/')
SAY
END
CALL DELETE('Super/Super.rexx')
CALL DELETE('Super')
END
d=SHOWDIR('RAM:QUICK','F')
IF d~='' THEN
DO
SAY
SAY 'Unable to process the following files.'
SAY
DO i=1 TO WORDS(d)
SAY
dname=WORD(d,i)
SAY 'Filename:' dname
x=OPEN(f,'RAM:QUICK/'dname,'R')
IF x=0 THEN
DO
SAY dname 'failed to open for reading!'
ITERATE i
END
stuff=READCH(f,65000)
CALL CLOSE(f)
CALL WRITECH(STDOUT,stuff)
CALL DELETE('RAM:QUICK/'dname)
END
END
DONE:
CALL DELETE(arcfile)
IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
DO
oldmess=GETCLIP('BBS_MESSAGE')
IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
newmess='Your QUICKIN archive has been processed. A report is waiting in Email.'
CALL SETCLIP('BBS_MESSAGE',oldmess||newmess)
IF upfiles>0 | upmail>0 | upmsg~='' THEN
DO
CALL SETCLIP(name'_UPDATE',upfiles upbytes upmail upmsg)
upfiles=0
upbytes=0
upmail=0
upmsg=''
END
END
IF upfiles>0 | upmail>0 | upmsg~='' THEN
DO
x=OPEN(f,bbspath'Users/'name,'R')
IF x~=0 THEN
DO
data.=''
DO i=1
line=READL