(FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00001 ---------------------------------------- 00001 PROGRAM MAIL 00002 C+ 00003 C FIRST EDITION: SEPTEMBER 14, 1978 00004 C 00005 C 00006 C SEPTEMBER 14, 1978 - ADDED FILE COMMAND 00007 C 00008 C SEPTEMBER 15, 1978 - CHANGED SIZE OF RECORDS IN MAIL FILE 00009 C ADDED REPEAT COMMAND 00010 C 00011 C SEPTEMBER 18, 1978 - ADDED REPLY COMMAND 00012 C 00013 C SEPTEMBER 25, 1978 - ADD USERS COMMAND 00014 C 00015 C OCTOBER 6, 1978 - ADD BREAK COMMANDS TO MESSAGE INPUT 00016 C COMMANDS ARE >FILE AND >REPEAT 00017 C- 00018 IMPLICIT INTEGER (A-Z) 00019 PARAMETER MLUN=1,MSG=3,TTY=2 00020 PARAMETER READC=1,SENDC=2,HOLDC=3,ACKC=4,REMOVC=5 00021 PARAMETER CLEARC=6,FILEC=7,RPEATC=8,DELETC=9,HELPC=10 00022 PARAMETER REPLYC=11,USERC=12 00023 PARAMETER MAXCMD=13 00024 PARAMETER RECLEN=32 00025 PARAMETER BREAKC='>' 00026 LOGICAL*1 OVER,MATCH,NOMAIL,EOF 00027 INTEGER RECORD(RECLEN) 00028 INTEGER USER(4),TESTER(4),SENDNM(4) 00029 LOGICAL*1 DAT(9),TIM(8),USRNAM(12),FNAME(30),SNDNAM(12) 00030 LOGICAL*1 SUBJCT(72),LINE(72) 00031 REAL COMMND 00032 LOGICAL*1 CMMNDB(4) 00033 EQUIVALENCE (COMMND,CMMNDB) 00034 REAL CMMNDS(MAXCMD) 00035 C+ 00036 C OVER TESTS FOR ENTRY NUMBERS OVER LIMIT 00037 C- 00038 OVER() = MENTNO.GT.NENTRY 00039 C 00040 C NOTE THAT LAST ENTRY IN "CMMNDS" IS ALWAYS BLANK 00041 DATA CMMNDS(MAXCMD)/' '/ 00042 DATA CMMNDS(READC)/'READ'/,CMMNDS(SENDC)/'SEND'/ 00043 DATA CMMNDS(HOLDC)/'HOLD'/,CMMNDS(ACKC)/'ACKN'/, 00044 1 CMMNDS(REMOVC)/'RECE'/,CMMNDS(FILEC)/'FILE'/ 00045 DATA CMMNDS(RPEATC)/'REPE'/,CMMNDS(DELETC)/'DELE'/ 00046 DATA CMMNDS(HELPC)/'HELP'/,CMMNDS(REPLYC)/'REPL'/ 00047 DATA CMMNDS(USERC)/'USER'/ 00048 DATA CMMNDS(CLEARC)/'?!@+'/ (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00002 00049 C 00050 C FORMATS 00051 C 00052 101 FORMAT(A4) 00053 102 FORMAT(Q,72A1) 00054 00055 CALL ASNLUN(TTY,'TI',0) 00056 CALL SETDEF 00057 CALL GETUSR(USRNAM) 00058 CONVERT-USER-TO-RAD50 00059 OPEN-MAIL-FILE 00060 MATCH = .FALSE. 00061 DO (I=1,4) TESTER(I) = USER(I) 00062 COMPARE-NAMES 00063 WHEN (MATCH) WRITE(TTY,1) 00064 ELSE WRITE(TTY,2) 00065 1 FORMAT('0<<< YOU HAVE MAIL >>>') 00066 2 FORMAT('0NO MAIL') 00067 EOF = .FALSE. 00068 REPEAT UNTIL (EOF) 00069 . WRITE(TTY,3) 00070 3 . FORMAT('$Command: (Type HELP for help) ') 00071 . READ(TTY,101,END=999) COMMND 00072 . SELECT-COMMAND-INDEX 00073 . SELECT (COMIND) 00074 . . (READC) 00075 . . . READ-MESSAGES 00076 . . ...FIN 00077 . . (SENDC) SEND-MESSAGE 00078 . . (CLEARC) CLEAR-MESSAGES 00079 . . (USERC) LIST-USERS 00080 . . (OTHERWISE) WRITE(TTY,4) 00081 . ...FIN 00082 4 . FORMAT(' Input "SEND","READ","USERS" or ^Z') 00083 . UNLESS(.TRUE.) 00084 999 . . EOF = .TRUE. 00085 . ...FIN 00086 ...FIN 00087 CLOSE(UNIT=MLUN) 00088 CALL EXIT 00089 ---------------------------------------- 00090 TO CLEAR-MESSAGES 00091 . OPEN-MAIL-FILE 00092 . CLOSE (UNIT=MLUN,DISPOSE='DELETE') 00093 ...FIN ---------------------------------------- (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00003 00094 TO COMPARE-NAMES 00095 . REPEAT UNTIL (MATCH .OR. OVER()) 00096 . . GET-RECORD 00097 . . COMPARE-WITH-TESTER 00098 . ...FIN 00099 . IF (OVER()) MATCH = .FALSE. 00100 ...FIN ---------------------------------------- 00101 TO COMPARE-WITH-TESTER 00102 . MATCH = .TRUE. 00103 . DO (I=1,4) 00104 . . IF (TESTER(I).NE.RECORD(ENTPTR+I)) MATCH = .FALSE. 00105 . ...FIN 00106 ...FIN ---------------------------------------- 00107 TO CONVERT-USER-TO-RAD50 CALL IRAD50(12,USRNAM,USER) ---------------------------------------- 00108 TO CONVERT-SENDER-TO-RAD50 CALL IRAD50(12,SNDNAM,SENDNM) ---------------------------------------- 00109 TO CREATE-FILE-MENTNO 00110 . MAKE-FNAME-MENTNO 00111 . CLOSE(UNIT=MSG) 00112 . OPEN (UNIT=MSG,TYPE='NEW',NAME=FNAME,CARRIAGECONTROL='LIST') 00113 . WRITE-POSTMARK 00114 ...FIN ---------------------------------------- 00115 TO DISPLAY-MESSAGE 00116 . LINENO = 0 00117 . WHILE (.TRUE.) 00118 . . READ(MSG,102,END=99,ERR=99) N,LINE 00119 . . LINENO = LINENO+1 00120 . . SELECT (LINENO) 00121 . . . (1) 00122 . . . . DO (I=1,12) SNDNAM(I) = LINE(I) 00123 . . . . WRITE(TTY,23) (LINE(I),I=1,N) 00124 23 . . . . FORMAT(' From: ',72A1) 00125 . . . ...FIN 00126 . . . (2) 00127 . . . . DO (I=1,N) 00128 . . . . . SUBJCT(I) = LINE(I) 00129 . . . . ...FIN (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00004 00130 . . . . WRITE(TTY,21) (LINE(I),I=1,60) 00131 21 . . . . FORMAT(' Subject: ',60A1/) 00132 . . . ...FIN 00133 . . . (OTHERWISE) WRITE(TTY,22) LINE 00134 . . ...FIN 00135 22 . . FORMAT(' ',72A1) 00136 . ...FIN 00137 99 . CONTINUE 00138 ...FIN ---------------------------------------- 00139 TO GET-RECORD 00140 . MENTNO = MENTNO+1 00141 . UNLESS (OVER()) 00142 . . WHEN (NENTNO.GE.NPEREC) 00143 . . . READ(MLUN'KEYVAR,END=1999) (RECORD(I),I=1,NWRDRC) 00144 C . . . 00145 C FOLLOWING LINE IS END OF FILE BRANCH 00146 C DO SOMETHING WHEN YOU GET AROUND TO IT, ED 00147 C . . . 00148 1999 . . . CONTINUE 00149 . . . NENTNO = 1 00150 . . . ENTPTR = 0 00151 . . ...FIN 00152 . . ELSE 00153 . . . ENTPTR = ENTPTR+ENTSIZ 00154 . . . NENTNO = NENTNO+1 00155 . . ...FIN 00156 . ...FIN 00157 ...FIN ---------------------------------------- 00158 TO LIST-USERS 00159 . OPEN-PDSUPF 00160 . WRITE(2,72) 00161 72 . FORMAT(/) 00162 . DO (J=1,NENTRY) 00163 . . GET-RECORD 00164 . . CALL R50ASC(12,RECORD(ENTPTR+1),SNDNAM) 00165 71 . . FORMAT($,'+'12A1,3X) 00166 73 . . FORMAT('+'12A1/) 00167 . . WHEN (MOD(J,5).EQ.0) WRITE(2,73) SNDNAM 00168 . . ELSE WRITE(2,71) SNDNAM 00169 . ...FIN 00170 . WRITE(2,72) 00171 ...FIN ---------------------------------------- (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00005 00172 TO MAKE-FNAME-MENTNO 00173 . ENCODE(20,31,FNAME) MENTNO 00174 31 . FORMAT('DM0:[1,200]',I5,'.MSG') 00175 . FNAML = 0 00176 . DO (I=1,20) 00177 . . UNLESS (FNAME(I).EQ.' ') 00178 . . . FNAML = FNAML+1 00179 . . . FNAME(FNAML) = FNAME(I) 00180 . . ...FIN 00181 . ...FIN 00182 . FNAME(FNAML+1) = 0 00183 ...FIN ---------------------------------------- 00184 TO OPEN-FILE-MENTNO 00185 . MAKE-FNAME-MENTNO 00186 . CLOSE(UNIT=MSG) 00187 . OPEN(UNIT=MSG,TYPE='OLD',NAME=FNAME,SHARED,ERR=6999) 00188 . UNLESS (.TRUE.) 00189 6999 . . WRITE(TTY,61) 00190 61 . . FORMAT(' ERROR IN READING MESSAGE FILE - ENTRY WILL BE DELETED') 00191 . . REMOVE-ENTRY 00192 . ...FIN 00193 ...FIN ---------------------------------------- 00194 TO OPEN-MAIL-FILE 00195 2998 . CLOSE(UNIT=MLUN) 00196 . NWRDRC = 16 00197 . NPEREC = 1 00198 . OPEN (UNIT=MLUN,NAME='DM0:[1,200]MAILFILE.DAT',TYPE='OLD', 00199 1. ACCESS='DIRECT',FORM='UNFORMATTED',RECORDSIZE=NWRDRC/2, 00200 2. ASSOCIATEVARIABLE=KEYVAR,ERR=2999,SHARED) 00201 . READ(MLUN'1) (RECORD(I),I=1,NWRDRC) 00202 . ENTSIZ = NWRDRC/NPEREC 00203 . NENTRY = RECORD(1) 00204 . MENTNO = 0 00205 . NENTNO = NPEREC+1 00206 . UNLESS (.TRUE.) 00207 2999 . . CONTINUE 00208 . . OPEN (UNIT=MLUN,NAME='DM0:[1,200]MAILFILE.DAT',TYPE='NEW', 00209 1. . ACCESS='DIRECT',FORM='UNFORMATTED',RECORDSIZE=NWRDRC/2, 00210 2. . ASSOCIATEVARIABLE=KEYVAR,MAXREC=40) 00211 . . DO (I=1,NWRDRC) RECORD(I) = 0 00212 . . WRITE(MLUN'1) (RECORD(I),I=1,NWRDRC) 00213 . . GO TO 2998 00214 . ...FIN 00215 ...FIN (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00006 ---------------------------------------- 00216 TO OPEN-PDSUPF 00217 . CLOSE(UNIT=MLUN) 00218 . NWRDRC = 32 00219 . OPEN (UNIT=MLUN,NAME='DK0:[1,100]PDSUPF.DAT',TYPE='OLD',SHARED, 00220 1. READONLY,ACCESS='DIRECT',RECORDSIZE=16,ASSOCIATEVARIABLE=KEYVAR) 00221 . READ(MLUN'1) (RECORD(I),I=1,NWRDRC) 00222 . NENTRY = RECORD(2)-RECORD(1)+1 00223 . NPEREC = 8 00224 . ENTSIZ = 4 00225 . NENTNO = NPEREC+1 00226 . MENTNO = 0 00227 ...FIN ---------------------------------------- 00228 TO PREPARE-REPLY 00229 . CLOSE(UNIT=MSG,DISPOSE='DELETE') 00230 . CONVERT-SENDER-TO-RAD50 00231 . DO (I=1,4) RECORD(ENTPTR+I) = SENDNM(I) 00232 . IF (ENTSIZ.GT.4) 00233 . . DO (I=5,ENTSIZ) RECORD(ENTPTR+I) = 0 00234 . ...FIN 00235 . RE-WRITE-RECORD 00236 . CREATE-FILE-MENTNO 00237 . WRITE(MSG,12) (SUBJCT(I),I=1,60) 00238 12 . FORMAT(' Reply to:',60A1) 00239 ...FIN 00240 ---------------------------------------- 00241 TO READ-MESSAGES 00242 . OPEN-MAIL-FILE 00243 . NOMAIL = .TRUE. 00244 . UNTIL (OVER()) 00245 . . DO (I=1,4) TESTER(I) = USER(I) 00246 . . COMPARE-NAMES 00247 . . IF (MATCH) 00248 . . . NOMAIL = .FALSE. 00249 . . . OPEN-FILE-MENTNO 00250 . . . DISPLAY-MESSAGE 00251 . . . REPEAT UNTIL (MATCH) 00252 . . . . MATCH = .TRUE. 00253 . . . . WRITE(TTY,5) 00254 5 . . . . FORMAT('$Disposition? ') 00255 . . . . READ(TTY,101,END=999) COMMND 00256 . . . . SELECT-COMMAND-INDEX 00257 . . . . IF (COMIND.EQ.DELETC) COMIND = REMOVC 00258 . . . . SELECT (COMIND) (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00007 00259 . . . . . (HOLDC) CONTINUE 00260 . . . . . (ACKC) 00261 . . . . . . PREPARE-REPLY 00262 . . . . . . WRITE(MSG,13) 00263 13 . . . . . . FORMAT(' Acknowledged') 00264 . . . . . . CLOSE (UNIT=MSG) 00265 . . . . . ...FIN 00266 . . . . . (REMOVC) 00267 . . . . . . CLOSE(UNIT=MSG,DISPOSE='DELETE') 00268 . . . . . . REMOVE-ENTRY 00269 . . . . . ...FIN 00270 . . . . . (FILEC) 00271 . . . . . . WRITE(TTY,14) 00272 14 . . . . . . FORMAT('$Copy to File: ') 00273 . . . . . . READ(2,102,END=999) N,FNAME 00274 . . . . . . FNAME(N+1) = 0 00275 . . . . . . CLOSE(UNIT=TTY) 00276 . . . . . . CALL ASNLUN(TTY,'SY',0) 00277 . . . . . . OPEN(UNIT=TTY,TYPE='NEW',NAME=FNAME,CARRIAGECONTROL='LIST') 00278 . . . . . . REWIND MSG 00279 . . . . . . DISPLAY-MESSAGE 00280 . . . . . . MATCH = .FALSE. 00281 . . . . . . CLOSE(UNIT=TTY) 00282 . . . . . . CALL ASNLUN(TTY,'TI',0) 00283 . . . . . ...FIN 00284 . . . . . (RPEATC) 00285 . . . . . . REWIND MSG 00286 . . . . . . DISPLAY-MESSAGE 00287 . . . . . . MATCH = .FALSE. 00288 . . . . . ...FIN 00289 . . . . . (REPLYC) 00290 . . . . . . PREPARE-REPLY 00291 . . . . . . SEND-TEXT 00292 . . . . . ...FIN 00293 . . . . . (OTHERWISE) 00294 . . . . . . WRITE(TTY,6) 00295 6 . . . . . . FORMAT(' Respond with "HOLD", "ACKN"owledge, "RECE"ived,'/ 00296 1. . . . . . ' "FILE", "REPE"at, or ^Z') 00297 . . . . . . MATCH = .FALSE. 00298 . . . . . ...FIN 00299 . . . . ...FIN 00300 . . . ...FIN 00301 . . ...FIN 00302 . ...FIN 00303 . IF (NOMAIL) WRITE(TTY,2) 00304 ...FIN 00305 ---------------------------------------- 00306 TO REMOVE-ENTRY (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00008 00307 . DO (I=1,ENTSIZ) RECORD(ENTPTR+I) = 0 00308 . RE-WRITE-RECORD 00309 ...FIN ---------------------------------------- 00310 TO RE-WRITE-RECORD 00311 . I = KEYVAR-1 00312 . WRITE(MLUN'I) (RECORD(I),I=1,NWRDRC) 00313 ...FIN ---------------------------------------- 00314 TO SELECT-COMMAND-INDEX 00315 . COMIND = 0 00316 . REPEAT UNTIL (COMIND.EQ.MAXCMD .OR. COMMND.EQ.CMMNDS(COMIND)) 00317 . . COMIND = COMIND+1 00318 . ...FIN 00319 ...FIN 00320 ---------------------------------------- 00321 TO SEND-MESSAGE 00322 . WRITE(TTY,51) 00323 51 . FORMAT('$To? ') 00324 . READ(TTY,102,END=999) N,SNDNAM 00325 . CONVERT-SENDER-TO-RAD50 00326 . DO (I=1,4) TESTER(I) = SENDNM(I) 00327 . OPEN-PDSUPF 00328 . COMPARE-NAMES 00329 . WHEN (.NOT.MATCH) 00330 . . WRITE(TTY,52) 00331 52 . . FORMAT(' *** MAIL - Indicated user does not exist ***') 00332 . ...FIN 00333 . ELSE 00334 . . WRITE(TTY,53) 00335 53 . . FORMAT('$Subject: ') 00336 . . READ(TTY,102,END=999) N,SUBJCT 00337 . . OPEN-MAIL-FILE 00338 . . DO (I=1,4) TESTER(I) = 0 00339 . . COMPARE-NAMES 00340 . . IF (OVER()) 00341 . . . WHEN (NENTNO.LT.NPEREC) ENTPTR = ENTPTR+ENTSIZ 00342 . . . ELSE 00343 . . . . KEYVAR = KEYVAR+1 00344 . . . . NENTNO = 1 00345 . . . . ENTPTR = 0 00346 . . . . DO (I=1,NWRDRC) RECORD(I) = 0 00347 . . . ...FIN 00348 . . ...FIN (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00009 00349 . . CREATE-FILE-MENTNO 00350 . . WRITE(MSG,54) SUBJCT 00351 54 . . FORMAT(72A1) 00352 . . SEND-TEXT 00353 . . DO (I=1,4) RECORD(ENTPTR+I) = SENDNM(I) 00354 . . IF (ENTSIZ.GT.4) 00355 . . . DO (I=5,ENTSIZ) RECORD(ENTPTR+I) = 0 00356 . . ...FIN 00357 . . RE-WRITE-RECORD 00358 . . IF (MENTNO.GT.NENTRY) 00359 . . . DO (I=1,NWRDRC) RECORD(I) = 0 00360 . . . RECORD(1) = MENTNO 00361 . . . WRITE(MLUN'1) (RECORD(I),I=1,NWRDRC) 00362 . . ...FIN 00363 . . WRITE(2,56) SNDNAM 00364 56 . . FORMAT(' [',12A1,' - sent]'/) 00365 . ...FIN 00366 ...FIN ---------------------------------------- 00367 TO SEND-TEXT 00368 . WRITE(TTY,55) 00369 55 . FORMAT(' Enter text of message. End with ^Z') 00370 . WHILE (.TRUE.) 00371 . . READ(TTY,102,END=599) N,LINE 00372 . . WHEN (LINE(1).EQ.BREAKC) 00373 . . . DO (I=1,4) CMMNDB(I) = LINE(I+1) 00374 . . . SELECT-COMMAND-INDEX 00375 . . . SELECT (COMIND) 00376 . . . . (FILEC) 00377 . . . . . WRITE(TTY,57) 00378 57 . . . . . FORMAT('$Get message from file ') 00379 . . . . . READ(TTY,102) N,FNAME 00380 . . . . . FNAME(N+1) = 0 00381 . . . . . CLOSE(UNIT=TTY) 00382 . . . . . CALL ASNLUN(TTY,'SY',0) 00383 . . . . . OPEN(UNIT=TTY,NAME=FNAME,TYPE='OLD',READONLY,SHARED,ERR=598) 00384 . . . . . UNLESS (.TRUE.) 00385 598 . . . . . . CALL ASNLUN(TTY,'TI',0) 00386 . . . . . ...FIN 00387 . . . . ...FIN 00388 . . . . (RPEATC) 00389 . . . . . OPEN-FILE-MENTNO 00390 . . . . . DISPLAY-MESSAGE 00391 . . . . . CLOSE(UNIT=MSG) 00392 . . . . . OPEN(UNIT=MSG,NAME=FNAME,ACCESS='APPEND',TYPE='OLD') 00393 . . . . ...FIN 00394 . . . . (HELPC) 00395 . . . . . WRITE(TTY,58) 00396 58 . . . . . FORMAT(' "Break" commands are ">FILE" and ">REPEat"') (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00010 00397 59 . . . . . FORMAT(' The character ">" as the first character in a line'/ 00398 1. . . . . ' indicates a special or "break" command to MAIL'/ 00399 2. . . . . ' For further information on this feature type ">HELP"') 00400 . . . . ...FIN 00401 . . . . (OTHERWISE) WRITE(TTY,59) 00402 . . . ...FIN 00403 . . ...FIN 00404 . . ELSE WRITE(MSG,54) LINE 00405 . ...FIN 00406 599 . CONTINUE 00407 . CLOSE(UNIT=MSG) 00408 . CLOSE(UNIT=TTY) 00409 . CALL ASNLUN(TTY,'TI',0) 00410 ...FIN ---------------------------------------- 00411 TO WRITE-POSTMARK 00412 . CALL DATE(DAT) 00413 . CALL TIME(TIM) 00414 . WRITE(MSG,41) USRNAM,DAT,TIM 00415 41 . FORMAT(12A1,20X,'Postmark: ',9A1,1X8A1) 00416 ...FIN 00417 00418 END ---------------------------------------- PROCEDURE CROSS-REFERENCE TABLE 00090 CLEAR-MESSAGES 00078 00094 COMPARE-NAMES 00339 00328 00246 00062 00101 COMPARE-WITH-TESTER 00097 00108 CONVERT-SENDER-TO-RAD50 00325 00230 00107 CONVERT-USER-TO-RAD50 00058 00109 CREATE-FILE-MENTNO 00349 00236 00115 DISPLAY-MESSAGE 00390 00286 00279 00250 (FLECS VERSION 22.37) 25-OCT-78 08:05:30 PAGE 00011 00139 GET-RECORD 00163 00096 00158 LIST-USERS 00079 00172 MAKE-FNAME-MENTNO 00185 00110 00184 OPEN-FILE-MENTNO 00389 00249 00194 OPEN-MAIL-FILE 00337 00242 00091 00059 00216 OPEN-PDSUPF 00327 00159 00228 PREPARE-REPLY 00290 00261 00310 RE-WRITE-RECORD 00357 00308 00235 00241 READ-MESSAGES 00075 00306 REMOVE-ENTRY 00268 00191 00314 SELECT-COMMAND-INDEX 00374 00256 00072 00321 SEND-MESSAGE 00077 00367 SEND-TEXT 00352 00291 00411 WRITE-POSTMARK 00113 (FLECS VERSION 22.37) ----------------------------------------