C.. INMAIL.FTN BOHDEN K. CMAYLO NOV 81 C.. C.. MAIN MAILER ROUTINE C.. SUBROUTINE INMAIL INTEGER OUTBXS COMMON /INPUTX/ INPUT(512) DOUBLE PRECISION TNAME,DBLANK,DXLPT,FTEMP1(2),FTEMP2(2) BYTE IZERO,ASTER,IBLANK,INPUT,F1TEMP(16),F2TEMP(16) DOUBLE PRECISION ALL,TEMP,NAMES(50),INBOX(8,100),OUTBOX(2,100) EQUIVALENCE (F1TEMP,FTEMP1),(F2TEMP,FTEMP2) DATA FTEMP1,FTEMP2/'MAIL.DAT',' ','DOC1.DAT',' '/ DATA ALL,IZERO,ASTER,IBLANK/'ALL ','0','*',' '/ DATA DBLANK,MAXGRP,DXLPT /' ',8,'LP,LP '/ C.. C.. SET NO SUCH FILE COUNT (ERR=#29) TO OK) C.. CALL ERRSET(29,.TRUE.,.FALSE.,.TRUE.,.FALSE.,10000) C.. SET NUMBER OF PRINTED DOCS TO 0 LP=0 C.. C.. INITIALIZE C.. IN=1 IN2=2 IN3=3 NUMPIP=0 CALL DATE(INPUT(1)) CALL TIME(INPUT(10)) TYPE 1,(INPUT(I),I=1,17) 1 FORMAT(10(/)'0*** MAILER *** DATE:',9A1,' TIME:',8A1,' ***'/) C.. DELETE MAIL.DAT AND DOC1.DAT C.. CALL XSPAWN('PIP MAIL.DAT;*/DE/NM,DOC1.DAT;*,FCCC.TMP;*!') C..ASSIGN FILE TO UNIT 1 IENC=23 ENCODE(IENC,11,INPUT) 11 FORMAT('SY:[201,201]DOC005.W11 ') TYPE 101 101 FORMAT('0* IN BOX DEFINITIONS ENTERED *'/) C..DO OVER INBOX AND OUTBOX DO 4 J=1,2 CALL INDOC(IN,INPUT,F1TEMP) 5 KIN=0 6 READ(IN,3,END=7) IQ,(INPUT(I),I=1,IQ) 3 FORMAT(Q,80A1) KIN=KIN+1 C.. SET UP INBOX OR OUTBOX UIC LST=-1 CALL INPUTC(INPUT,IQ,IST,LST) IF(LST.LT.0) GO TO 91 CALL INPUTC(INPUT,IQ,IST,LST) IF(LST.LT.0) GO TO 91 TEMP=DBLANK ENCODE(LST,9,TEMP)(INPUT(I),I=1,LST) IF(J.EQ.1) INBOX(1,KIN)=TEMP IF(J.EQ.2) OUTBOX(1,KIN)=TEMP C.. SET UP INBOX OR OUTBOX FIRST REQUIRED NAME FOR IDENTIFICATION CALL INPUTC(INPUT,IQ,IST,LST) IF(LST.LT.0) GO TO 90 TEMP=DBLANK IENC=LST-IST+1 ENCODE(IENC,9,TEMP)(INPUT(I),I=IST,LST) IF(J.EQ.1) INBOX(2,KIN)=TEMP IF(J.EQ.2) OUTBOX(2,KIN)=TEMP C.. SET UP INBOX GROUP NAMES IF(J.EQ.2) GO TO 6 IGRP=2 60 IGRP=IGRP+1 IF(IGRP.GT.MAXGRP) GO TO 6 CALL INPUTC(INPUT,IQ,IST,LST) INBOX(IGRP,KIN)=DBLANK IF(LST.LE.0) GO TO 6 TEMP=DBLANK IENC=LST-IST+1 ENCODE(IENC,9,TEMP) (INPUT(I),I=IST,LST) INBOX(IGRP,KIN)=TEMP 9 FORMAT(132A1) GO TO 60 90 CALL ERROR(INPUT,IQ,'BAD INBOX/OUTBOX NAME ENTERED.') GO TO 6 91 CALL ERROR(INPUT,IQ,'BAD INBOX/OUTBOX UIC ENTERED.') GO TO 6 C.. END OF FILE 7 IF(J.EQ.1) INBXS=KIN IF(J.EQ.2) OUTBXS=KIN CALL CLOSE(IN) IF(J.EQ.2) GO TO 4 IENC=23 ENCODE(IENC,10,INPUT) 10 FORMAT('SY:[201,201]DOC006.W11 ') TYPE 102 102 FORMAT('0* OUT BOX DEFINITIONS ENTERED *'/) 4 CONTINUE C** TYPE 63,(JJ,(INBOX(II,JJ),II=1,MAXGRP),JJ=1,INBXS) 63 FORMAT(1X,'INBOX(',I3,')=',8A8) C** TYPE 64,(JJ,(OUTBOX(II,JJ),II=1,2),JJ=1,OUTBXS) 64 FORMAT(1X,'OUTBOX(',I3,')=',2A8) C.. C.. BITMAP READS FOR GETTING NUMBER OF DOCS C.. DO 20 JOUT=1,OUTBXS C**TYPE 105,(OUTBOX(I,JOUT),I=1,2) 105 FORMAT(' * CHECKING OUTBOX ',A7,1X,A8,' FOR MAIL *') CALL BITRED(IN,OUTBOX(1,JOUT),NUMDOC,INDOC1) C.. LESS THAN ONE DOCUMENT, GO TO NEXT OUTBOX IF(NUMDOC.LE.2) GO TO 20 IENC=23 ENCODE(IENC,62,INPUT)OUTBOX(1,JOUT) 62 FORMAT('WP:[',A7,']DOC001.W11 ') CALL RIDBLK(INPUT,IENC) C..COPY DOC001 TO TEMP FILE F1TEMP AND READ FROM IT CALL INDOC(IN2,INPUT,F1TEMP) TYPE 103,(OUTBOX(I,JOUT),I=1,2) 103 FORMAT('0* TRANSFER FROM OUTBOX ',A7,1X,A8,' STARTED *') C.. SET ERROR TO NONE SO FAR 26 READ(IN2,22,END=27)IQ,(INPUT(I),I=1,IQ) 22 FORMAT(Q,132A1) TYPE 107,(INPUT(I),I=1,IQ),IBLANK,ASTER 107 FORMAT('0*',80A1) C.. GET NAMES OF ALL FILES TO BE TRANSFERED CALL DOCNAM(OUTBOX(1,JOUT),INPUT,IQ,NUMDOC,NUMNAM,NAMES) IF(NUMDOC.LE.1.OR.NUMNAM.LE.0) GO TO 26 C.. INCLUDE SENDING UNIT FOR RECIEPT AT END OF XFER NUMNAM=NUMNAM+1 NAMES(NUMNAM)=OUTBOX(2,JOUT) C.. DO FOR EACH NAME FOUND (INFRST=0=ISM COPY FIRST) INFRST=1 DO 40 I1=1,NUMNAM C.. SEE IF CAPS CALL CAPS(NAMES(I1),8) C.. GET RID OF NONALPHA CALL RIDCHA(NAMES(I1),-8,'A','Z') C.. LOCATE INBOX FOR OUTBOX JIN=0 ISTOP=0 48 JJIN=JIN+1 IF(JJIN.GT.INBXS) GO TO 40 DO 41 JIN=JJIN,INBXS C.. SEE IF ALL C** IF(NAMES(I1).EQ.ALL) GO TO 42 C.. SEE IF NAME EXISTS DO 65 IGRP=2,MAXGRP IF(INBOX(IGRP,JIN).EQ.DBLANK) GO TO 41 IF(INBOX(IGRP,JIN).EQ.NAMES(I1)) GO TO 42 65 CONTINUE 41 CONTINUE IF(JJIN.GT.1) GO TO 40 C.. NOT FOUND, SET STOP FLAG, SPOOL TO LP ISTOP=1 TNAME=NAMES(I1) INFRST=-1 142 IENC=53 LP=LP+1 C.. SET TO PRINTER IF FIRST COPY ENCODE(IENC,43,INPUT)OUTBOX(1,JOUT),TNAME,LP 1 ,OUTBOX(1,JOUT),NUMDOC 43 FORMAT('DXL WP:[',A7,']',A8,'.L11;',O4,'=WP:[',A7,']DOC',I3,'!') IF(INPUT(50).EQ.IBLANK) INPUT(50)=IZERO IF(INPUT(51).EQ.IBLANK) INPUT(51)=IZERO CALL XSPAWN(INPUT) IF(ISTOP.GT.0) GO TO 40 C.. GO TO NEXT INBOX IF NOT FIRST COPY IF(INFRST.NE.0) GO TO 48 INFRST=1 C.. CHECK IF NUMBER OF DOCUMENTS ALREADY READ IN FROM BITMAP C.. READ IN NUMBER OF DOCS IN BITMAP 42 CONTINUE C.. C.. SEE IF INBOX DEFINED AS LP C.. TNAME=INBOX(2,JIN) IF(INBOX(1,JIN).EQ.DXLPT.OR.INFRST.EQ.0) GO TO 142 CALL BITRED(IN,INBOX(1,JIN),NUMIN,INDOC1) C.. SKIP OVER DOC001.W11, IF EXISTS IF(NUMIN.LE.1) NUMIN=2 C.. GENERATE PIP STATEMENT FOR TRANSFERING DOCS IENC=53 ENCODE(IENC,46,INPUT)INBOX(1,JIN),NUMIN,OUTBOX(1,JOUT),NUMDOC 46 FORMAT('PIP WP:[',A7,']DOC',I3,'.W11/FO=WP:[',A7,']DOC' 1 ,I3,'.W11!') C.. ENTER ZEROS FOR DOC NAMES IF(INPUT(20).EQ.IBLANK) INPUT(20)=IZERO IF(INPUT(21).EQ.IBLANK) INPUT(21)=IZERO IF(INPUT(46).EQ.IBLANK) INPUT(46)=IZERO IF(INPUT(47).EQ.IBLANK) INPUT(47)=IZERO CALL XSPAWN(INPUT) NUMPIP=NUMPIP+1 C.. SEE IF DOC001.W11 EXISTS IF(INDOC1.GT.0) GO TO 81 C.. DOC001.W11 DOES NOT EXIST, CREATE IT IENC=47 ENCODE(IENC,88,INPUT)(F2TEMP(I),I=1,16) 88 FORMAT('PIP ',16A1,'/FO=SY:[201,201]DOC001.BKC!') CALL XSPAWN(INPUT) C.. ASSIGN FILE CALL ASSIGN(IN3,F2TEMP) GO TO 82 C.. DOC001.W11 EXISTS, OPEN IT AND DXF AND APPEND MODE 81 IENC=23 ENCODE(IENC,62,INPUT)INBOX(1,JIN) CALL RIDBLK(INPUT,IENC) CALL INDOC(IN3,INPUT,F2TEMP) 82 CALL FDBSET(IN3,'APPEND') C.. WRITE OUT INFO ON TEMP FILE F2TEMP FOR DOC001 IF(I1.EQ.NUMNAM) GO TO 221 IENC=36 ENCODE(IENC,83,INPUT)OUTBOX(2,JOUT),INBOX(2,JIN),NUMIN 83 FORMAT('FROM ',A8,'-TO-',A8,'<#>',I3,'<>') GO TO 222 C.. RECEIPT SECTION (LAST DO LOOP RUN) 221 IENC=31 ENCODE(IENC,220,INPUT)NAMES(1),NUMIN 220 FORMAT('RECEIPT FOR ',A8,'<#>',I3,'<>') 222 CALL RIDBLK(INPUT(9),IENC-8) WRITE(IN3,9)(INPUT(I),I=1,IENC) ENDFILE IN3 CALL CLOSE(IN3) C.. DXFLEX TEMP FILE F2TEMP OVER TO DOC001.W11 IENC=61 ENCODE(IENC,84,INPUT)INBOX(1,JIN),(F2TEMP(I),I=1,16) 84 FORMAT('DXF WP:[',A7,']DOC001.W11/TYPE:DOC=',16A1,'/TYPE:PM!') CALL XSPAWN(INPUT) C.. CHANGE ATTRIBUTES OF DOC001.W11 TO OWNER IENC=38 ENCODE(IENC,53,INPUT)INBOX(1,JIN) 53 FORMAT('PIP WP:[',A7,']DOC001.W11/PR/GR:R/FO!') CALL XSPAWN(INPUT) C.. FIX UP BITMAP FOR ACCOUNT IENC=17 ENCODE(IENC,61,INPUT)INBOX(1,JIN) 61 FORMAT('BMP WP:[',A7,']!') CALL XSPAWN(INPUT) C.. CHECK FOR OTHER MEMBERS GO TO 48 40 CONTINUE GO TO 26 C.. END OF AN OUTBOX TRANSFER, DELETE ALL W11 FILES IN OUTBOX 27 CALL CLOSE(IN2) IENC=28 ENCODE(IENC,47,INPUT)OUTBOX(1,JOUT) 47 FORMAT('PIP WP:[',A7,']*.W11;*/DE! ') CALL XSPAWN(INPUT) 20 CONTINUE C.. C.. FINISHED, TYPE MESSAGES AND QUIT C.. TYPE 70,NUMPIP,LP 70 FORMAT('0*** NUMBER OF DOCUMENTS TRANSFERED=',I6,' ***'// 1 ' *** NUMBER OF DOCUMENTS PRINTED =',I6,' ***'//) RETURN END