C C THIS IS THE MAIL NOTIFICATION SERVER TASK C C COPYRIGHT (C) 1980, DIGITAL EQUIPMENT CORP. C JOHN R. COVERT C C C DEFINITION OF FILE CONTAINING LOGGED IN USER DATA BASE C LOGICAL*1 NFREC(32) ! THE FILE HAS 16 WDS/REC INTEGER DEVNAM ! DEV NAME (TT, HT, ...) LOGICAL*1 DEVUNI ! DEV UNIT (NN IN XXNN:) LOGICAL*1 FLAGS ! FLAGS BYTE PARAMETER FNOTIF = 1 ! BIT 0=1, NOTIFY INTEGER UIC ! MAIL UIC EQUIVALENCE (NFREC,DEVNAM),(NFREC(3),DEVUNI),(NFREC(4),FLAGS) EQUIVALENCE (NFREC(5),UIC) C C INCOMING DATA DEFINITIONS C LOGICAL*1 RECVBF(30) LOGICAL*1 MTYPE ! MESS TYPE=0, CONTROL LOGICAL*1 CTYPE ! TYPE OF CONTROL MESS PARAMETER CNONOT=0 ! TURN OFF NOTIFICATION PARAMETER CNOTIF=1 ! TURN ON NOTIFICATION INTEGER SUIC ! THE TARGET UIC LOGICAL*1 RECNAM(24) ! THE SENDER'S NAME EQUIVALENCE(SUIC,RECVBF(5)) EQUIVALENCE(RECVBF(5),MTYPE),(RECVBF(6),CTYPE) EQUIVALENCE(RECVBF(7),RECNAM) C LOGICAL*1 A(134) ! WORK TEXT ARRAY INTEGER*2 IA(67) EQUIVALENCE(A,IA) LOGICAL*1 IUNIT C LOGICAL*1 MARMES(56) ! MESSAGE ARRAY LOGICAL*1 MARNAM(25) ! MESSAGE NAME+LF EQUIVALENCE (MARMES(32),MARNAM) DATA MARMES/"15,7,'*','*','*',' ','N','e','w',' ','m','a','i', 1'l',' ','o','n',' ','s','y','s','t','e','m',7,' ','f','r', 2'o','m',' ',25*0/ C C GET LOCAL NODE NAME C CALL OPNNTW(2,IA) IF(IA(1).NE.1)GO TO 50 CALL GLNNTW(IA,6,MARMES(19)) !LOCAL NODE NAME 50 CALL CLSNTW(IA) C CALL ERRSET(39,.TRUE.,.FALSE.,,.FALSE.) 100 CALL RECOEX(,RECVBF) OPEN(UNIT=2,TYPE='UNKNOWN',NAME='LB:[1,7]LOGDATA.DAT', 1ACCESS='DIRECT',RECORDSIZE=8,SHARED) C C GET THE UIC OF THE ONE SENDING TO US C 102 CALL GETTSK(A) IUIC=IA(16) C C GET THE TI: OF THE ONE SENDING TO US C CALL GETLUN(5,IA) IDEV=IA(1) IUNIT=A(3) C IF(MTYPE.NE.0)GO TO 500 !IF NE, NEW MAIL ARRIVING C C CONTROL MESSAGES IREC=1 150 READ(2'IREC,ERR=160)NFREC ! IF ERR, EXTEND IF(DEVNAM.EQ.IDEV.AND.DEVUNI.EQ.IUNIT)GO TO 170 ! GOT IT IREC=IREC+1 GO TO 150 160 DEVNAM=IDEV ! CREATING NEW RECORD DEVUNI=IUNIT 170 UIC=IUIC I=CTYPE+1 GO TO (200,300),I GO TO 100 ! BAD MESSAGE, THROW AWAY C C TURN OFF NOTIFICATION FOR THIS TI C 200 FLAGS=FLAGS.AND.(.NOT.FNOTIF) GO TO 490 C C TURN ON NOTIFICATION FOR THIS TI C 300 FLAGS=FLAGS.OR.FNOTIF GO TO 490 C C WRITE THE RECORD BACK C 490 WRITE(2'IREC)NFREC GO TO 900 C C HANDLE INCOMING MAIL NOTIFICATION C 500 MARNAM(1)='?' !DEFAULT NAME DO 5002 I=1,24 !MOVE IN ARRIVAL USERNAME J=I+1 RECNAM(I)=RECNAM(I).AND."177 !STRIP OF FUNNY BITS IF(RECNAM(I).LT.32)GOTO 5003 !END OF INFO 5002 MARNAM(I)=RECNAM(I) 5003 MARNAM(J)="12 !LF CALL GETADR(IA,MARMES) IA(2)=31+J !LENGTH OF MESSAGE IA(3)=32 !CARRIAGE CONTROL BYTE=SPACE IREC=0 !START WITH FIRST RECORD 501 IREC=IREC+1 !INCREMENT EACH TIME THROUGH READ(2'IREC,ERR=900)NFREC !READ, QUIT AT END IF(UIC.NE.SUIC)GO TO 501 !NO MATCH, GO LOOK AT NEXT IF((FLAGS.AND.FNOTIFY).EQ.0)GO TO 501 !IF NO NOTIFY, GO BACK CALL ASNLUN(3,DEVNAM,DEVUNI,IDS)!ASSIGN TO THE SPECIFIED TERM IF(IDS.NE.1)GO TO 501 !ALUN FAILED, TRY SOMEWHERE ELSE CALL QIO("500,3,1,,,IA) !BREAKTHROUGH WRITE CALL MARK(2,1,3) !SET ONE MINUTE TIMEOUT CALL WFLOR(1,2) !WAIT FOR EITHER TIMEOUT OR IO CALL READEF(2,IDS) !LOOK AT THE TIMEOUT FLAG IF(IDS.NE.0)GO TO 520 !WE HAD A TIMEOUT CALL CANMT !NO TIMEOUT, CANCEL THE MARK-TIME GO TO 501 !AND NOW LOOK FOR MORE C 520 CALL WTQIO("12,3,2) !HAD A TIMEOUT - SO KILL THE IO CALL WAITFR(1) !WAIT FOR IT TO ABORT GO TO 501 !AND NOW LOOK FOR MORE C C CHECK FOR MORE RECEIVE PACKETS C 900 CALL RECEIV(,RECVBF,,IDS) IF(IDS.EQ.1)GO TO 102 !MORE DATA, PROCESS IT CLOSE(UNIT=2) !NO DATA YET, CLOSE THE FILE GO TO 100 !AND THEN CHECK AGAIN END