COMMON /MAICOM/ ENTRY 00009 BYTE ENTRY (14,20) 00010 BYTE FILNAM(20) 00011 INTEGER USRBUF(160) 00012 INTEGER LUBUF 00013 LOGICAL*1 EQUAL 00014 LOGICAL*1 FOUND 00015 INTEGER IDS,IRET 00016 BYTE BELL 00017 EQUIVALENCE (IDS,IRET) 00018 DATA NENTRY /20/ 00019 DATA BELL /7/ 00021 DATA LUBUF /160/ 00022 ASSIGN 32757 TO I32758 00026 GO TO 32758 00026 32757 ASSIGN 32755 TO I32756 00027 GO TO 32756 00027 32755 ASSIGN 32753 TO I32754 00028 GO TO 32754 00028 32753 ASSIGN 32751 TO I32752 00029 GO TO 32752 00029 32751 CALL EXIT 00030 32758 CONTINUE 00032 CALL GETUSR(USRBUF,LUBUF,IER) 00034 D CALL DEBUG (1,'POSTMAN.') 00036 D DO 9991 IUSR=1,LUBUF,8 00037 D9991 IF (USRBUF(IUSR).NE.0) WRITE (3,9903) (USRBUF(I),I=IUSR,IUSR+7) 00038 D9903 FORMAT (1X,6A2,5X,A2,5X,O8) 00039 IF(.NOT.(IER.LT.0)) GO TO 32750 00041 ASSIGN 32748 TO I32749 00041 GO TO 32749 00041 32748 CONTINUE 00041 32750 CALL ERRSET(29,,.FALSE.,,.FALSE.) 00043 CALL ERRSET(38,,.FALSE.,,.FALSE.) 00045 GO TO I32758 00046 32749 CONTINUE 00048 WRITE (2,101) IDS 00049 101 FORMAT (' Postman exiting with code ',I8, 00050 1 '. Inform system manager.') 00051 CALL EXIT 00052 GO TO I32749 00053 32754 CONTINUE 00055 D CALL DEBUG (1,' POSTMN: CHECK NEW MAIL') 00056 DO 32747 IENTRY=1,NENTRY 00057 IF(.NOT.(ENTRY(14,IENTRY).NE.0 .AND. ENTRY(1,IENTRY).NE.0)) GO TO 00058 132746 00058 IUNIT = ENTRY(13,IENTRY) 00059 D CALL DEBUG (3,' HAS MAIL: ',ENTRY(1,IENTRY),IUNIT) 00060 CALL ASNLUN (2,'TT',IUNIT) 00061 WRITE (2,21,ERR=201) BELL, BELL 00062 21 FORMAT (' ',A1,' You have mail.',A1/) 00063 ENTRY(14,IENTRY) = 0 00064 201 CONTINUE 00065 32746 CONTINUE 00067 32747 CONTINUE 00067 GO TO I32754 00068 32756 CONTINUE 00070 D CALL DEBUG (1,' POSTMN: CHECK NEW LOGINS',' ') 00071 DO 32745 IUSR = 1,LUBUF,8 00073 IF(.NOT.(USRBUF(IUSR+6).EQ.'TT')) GO TO 32744 00074 ASSIGN 32742 TO I32743 00075 GO TO 32743 00075 32742 CONTINUE 00076 D IF (FOUND) CALL DEBUG (3,' ALREADY LOGGED ',ENTRY(1,IENTRY),IUNIT) 00076 IF(FOUND) GO TO 32741 00077 IENTRY = 0 00079 32740 IF(.NOT.(IENTRY.LT.NENTRY .AND. .NOT.FOUND)) GO TO 32739 00080 IENTRY = IENTRY+1 00081 FOUND = ENTRY(1,IENTRY) .EQ. 0 00082 GO TO 32740 00083 32739 IF(.NOT.(FOUND)) GO TO 32738 00084 CALL MVSTR (ENTRY(1,IENTRY),USRBUF(IUSR)) 00085 ENTRY (13,IENTRY) = USRBUF(IUSR+7) 00086 D CALL DEBUG (3,' NEW LOGIN: ',ENTRY(1,IENTRY),USRBUF(IUSR+7)) 00087 ENTRY(14,IENTRY) = 0 00088 ASSIGN 32736 TO I32737 00089 GO TO 32737 00089 32736 CONTINUE 00090 32738 CONTINUE 00091 32741 CONTINUE 00092 32744 CONTINUE 00093 32745 CONTINUE 00093 GO TO I32756 00094 32737 CONTINUE 00096 CALL MVSTR (FILNAM,'[10,0]') 00097 CALL CONCAT (FILNAM,USRBUF(IUSR)) 00098 CALL CONCAT (FILNAM,'.MAI') 00099 D CALL DEBUG (2,' TRY FILE ',FILNAM) 00100 OPEN (NAME=FILNAM,UNIT=1,TYPE='OLD',FORM='FORMATTED',ERR=33) 00101 IF(.NOT.(.FALSE.)) GO TO 32734 00102 33 CONTINUE 00103 D CALL DEBUG (1,' NO FILE',' ') 00104 GO TO 32735 00105 32734 ENTRY(14,IENTRY) = 1 00107 D CALL DEBUG (1,' FILE FOUND',' ') 00108 CLOSE (UNIT=1) 00109 32735 GO TO I32737 00111 32743 CONTINUE 00113 FOUND = .FALSE. 00114 IENTRY = 0 00115 32733 IF(.NOT.(IENTRY.LT.NENTRY .AND. .NOT.FOUND)) GO TO 32732 00116 IENTRY = IENTRY+1 00117 IUNIT = ENTRY(13,IENTRY) 00118 FOUND = EQUAL(ENTRY(1,IENTRY),USRBUF(IUSR)) .AND. 00119 1 IUNIT .EQ. USRBUF(IUSR+7) 00120 GO TO 32733 00121 32732 GO TO I32743 00122 32752 CONTINUE 00124 D CALL DEBUG (1,' POSTMN: CHECK FOR NEW LOGOUTS') 00125 DO 32731 IENTRY = 1,NENTRY 00126 IF(.NOT.(ENTRY(1,IENTRY).NE.0)) GO TO 32730 00127 FOUND = .FALSE. 00128 IUSR = -7 00129 IUNIT = ENTRY(13,IENTRY) 00130 32729 IF(.NOT.(IUSR.LT.LUBUF .AND. .NOT.FOUND)) GO TO 32728 00131 IUSR = IUSR + 8 00132 FOUND = EQUAL(ENTRY(1,IENTRY),USRBUF(IUSR)) .AND. 00133 1 IUNIT.EQ.USRBUF(IUSR+7) 00134 GO TO 32729 00135 32728 CONTINUE 00136 D IF (FOUND) CALL DEBUG (3,' STILL LOGGED IN:', 00136 D 1 ENTRY(1,IENTRY),IUNIT) 00137 IF(FOUND) GO TO 32727 00138 D CALL DEBUG (3,' JUST LOGGED OUT:',ENTRY(1,IENTRY),IUNIT) 00139 DO 32726 I=1,14 00140 ENTRY(I,IENTRY) = 0 00140 32726 CONTINUE 00140 32727 CONTINUE 00142 32730 CONTINUE 00143 32731 CONTINUE 00143 GO TO I32752 00144 END 00146 SUBROUTINE DEBUG(N,LABEL,STRING,IUNIT) 00148 D BYTE LABEL(1),STRING(1) 00149 D GOTO (1,2,3),N 00150 D1 WRITE (3,9901) (LABEL(I),I=1,LENGTH(LABEL)-1) 00151 D RETURN 00152 D2 WRITE (3,9901) (LABEL(I),I=1,LENGTH(LABEL)-1),': ', 00153 D 1 (STRING(I),I=1,LENGTH(STRING)-1) 00154 D RETURN 00155 D3 WRITE (3,9901) (LABEL(I),I=1,LENGTH(LABEL)-1),': ', 00156 D 1 (STRING(I),I=1,LENGTH(STRING)-1) 00157 D WRITE (3,9902) IUNIT 00158 D RETURN 00159 D9901 FORMAT (1X,80A1) 00160 D9902 FORMAT ('+',T40,O5) 00161 END 00162 SUBROUTINE CONCAT(A,B) 00164 BYTE A(1),B(1) 00165 CALL MVSTR(A(LENGTH(A)),B) 00166 END 00167