Trailing-Edge
-
PDP-10 Archives
-
TOPS-10_DECMAIL_MS_821130
-
lgnms.mac
There is 1 other file named lgnms.mac in the archive. Click here to see a list.
;This software is furnished under a license and may only be used
; or copied in accordance with the terms of such license.
;
;Copyright (C) 1980,1981,1982 by Digital Equipment Corporation
; Maynard, Massachusetts, USA
TITLE LGNMS -- Interface to new MS mail system
SUBTTL Bill Meier 9-Sep-80
SEARCH MACTEN,UUOSYM,LGNUNV
LGNDCL
SUBTTL RNMAIL - Called by LOGIN to see if user has mail
RNMAIL::TLNE F,FL.BAT ;Batch job?
POPJ P, ;Yes--Larry says not to check mail
PUSHJ P,FNDSTR ;Find structure for MAIL.TXT
POPJ P, ;Cant or errors
MOVE T2,T1 ;Position in T2
MOVX T1,UU.PHS!.IOASC;ASCII/PHYSICAL mode
MOVEI T3,IBUF ;Buffers
OPEN UFD,T1 ;Get a channel
POPJ P, ;Egads!
MOVE T1,[SIXBIT/MAIL/];Get the mail file
MOVSI T2,'TXT' ; ..
MOVEI T3,0 ; ..
MOVE T4,PP ; under his PPN
LOOKUP UFD,T1 ;Read the file
JRST MAIL.E ;Not there--no mail I guess
PUSHJ P,.SAVE4## ;Save P1,P2,N,C
MOVEI P2,1 ;Start with message 1
SETZM NMSGS ;Clear message count
MAIL.L: PUSHJ P,MSGCHR ;Get a char
JRST MAIL.T ;EOF
JUMPE C,MAIL.L ;Loop until we get one
MAIL.C: CAIN C,"," ;Comma?
JRST MAIL.N ;Yes--Scan character count
PUSHJ P,MSGCHR ;Get a char
JRST LGNPEF ;EOF?
JRST MAIL.C ;And loop
MAIL.N: PUSHJ P,MSGDEC ;Read character count
JRST LGNPEF ;EOF?
MOVE P1,N ;Save in safe place
CAIE C,";" ;Correct delimiter?
JRST LGNIHL ;No--Stop scanning
PUSHJ P,MSGOCT ;Read octal bits
JRST LGNPEF ;EOF?
CAIE C,.CHCRT ;CR?
JRST LGNIHL ;No--Stop scanning
PUSHJ P,MSGCHR ;Get next char
JRST LGNPEF ;EOF?
CAIE C,.CHLFD ;LF?
JRST LGNIHL ;No--Stop scanning
TRNN N,1 ;See if message seen
AOS NMSGS ;No--Count messages
MAIL.S: PUSHJ P,MSGCHR ;Get a char
JRST LGNPEF ;EOF?
SOJG P1,MAIL.S ;Loop until count runs out
AOJA P2,MAIL.L ;Count messages and loop
;Here if format error in mail file
LGNPEF: WARN PEF,<Premature EOF>
CAI
MOVEI T1,[ASCIZ/ in MAIL.TXT reading message /]
PUSHJ P,.TSTRG##
MOVE T1,P2 ;Get message number
PUSHJ P,.TDECW## ;Type it
JRST LGNCDE
LGNIHL: WARN IHL,<Illegal header line>
CAI
MOVEI T1,[ASCIZ/ in MAIL.TXT reading message /]
PUSHJ P,.TSTRG##
MOVE T1,P2 ;Get message number
PUSHJ P,.TDECW## ;Type it
LGNCDE: WARN CDE,<Can not determine existence of new mail>
JRST MAIL.E ;And exit
;Here to see if mail
MAIL.T: SKIPE P1,NMSGS ;Get count of messages
INFO YHM,<You have >
CAI
MOVE T1,P1
PUSHJ P,.TDECW##
MOVEI T1,[ASCIZ/ new message/]
PUSHJ P,.TSTRG##
MOVEI T1,"s"
CAILE P1,1
PUSHJ P,.TCHAR##
MOVEI T1,[ASCIZ/; to receive /]
PUSHJ P,.TSTRG##
MOVEI T1,[ASCIZ/them/]
CAIG P1,1
MOVEI T1,[ASCIZ/it/]
PUSHJ P,.TSTRG##
MOVEI T1,[ASCIZ/ type 'MS READ']
/]
PUSHJ P,.TSTRG##
MAIL.E: RELEAS UFD, ;Free channel
POPJ P, ;And return
SUBTTL FNDSTR - Read SYS:USERS.TXT and find structure
;Call:
; PP/ users PPN
; PUSHJ P,FNDSTR
; <error> ;Format error or not in file
; <normal> ;T1/ structure of mail file
FNDSTR: PUSHJ P,.SAVE4## ;Be safe
MOVX T1,UU.PHS!.IOASC;ASCII/PHYSICAL mode
MOVSI T2,'SYS' ;SYS:
MOVEI T3,IBUF ;Buffers
OPEN UFD,T1 ;Get a channel
POPJ P, ;Cant find out about mail today!
MOVE T1,[SIXBIT/USERS/]
MOVSI T2,'TXT'
SETZB T3,T4 ;USERS.TXT file
LOOKUP UFD,T1 ;Read that
JRST FNDS.E ;Not today
FNDLOP: PUSHJ P,MSGCHR ;Get a char
POPJ P, ;EOF
CAIE C,";" ;Comment?
CAIN C,"!" ;..
JRST FNDEAT ;Yes--skip line
CAIE C,.CHLFD ;<LF>
CAIN C,.CHCRT ;<CR>
JRST FNDEAT ;Yes--skip line
PUSHJ P,MSGSIC ;Read STR (char in C)
JRST LGNPEU ;EOF
MOVE P1,N ;Save
CAIE C,":" ;Good delimiter?
JRST LGNBFU ;No--bad
PUSHJ P,MSGCHR ;Get a char
JRST LGNPEU ;EOF
CAIE C,"[" ;PPN coming?
JRST LGNBFU ;No--bad
PUSHJ P,MSGOCT ;Read programmer
JRST LGNPEU ;EOF
CAILE N,377777 ;In range?
JRST LGNBFU ;No--Bad
HRLZ P2,N ;Save
CAIE C,"," ;Terminate?
JRST LGNBFU ;No--Bad
PUSHJ P,MSGOCT ;Read project
JRST LGNPEU ;EOF
CAILE N,777777 ;In range?
JRST LGNBFU ;No--Bad
HRR P2,N ;Make PPN
CAIE C,"]" ;Terminate?
JRST LGNBFU ;No--Bad
CAMN PP,P2 ;Match users PPN?
JRST [MOVE T1,P1 ;Yes--Return STR
JRST .POPJ1] ;to caller
FNDEAT: PUSHJ P,MSGEOL ;Eat to EOL
POPJ P, ;EOF!
JRST FNDLOP ;And loop
LGNPEU: WARN PEU,<Premature EOF when reading SYS:USERS.TXT>
JFCL
JRST LGNCDE
LGNBFU: WARN BFU,<Bad format in SYS:USERS.TXT>
JFCL
JRST LGNCDE
FNDS.E: RELEASE UFD,
POPJ P,
SUBTTL Read atom routines
MSGDEC: SKIPA T1,[^D10] ;Get decimal radix
MSGOCT: MOVEI T1,10 ;Get octal radix
MOVEI N,0 ;Clear number
MSGR.1: PUSHJ P,MSGCHR ;Get a char
POPJ P, ;EOF?
CAIL C,"0" ;See if numeric
CAILE C,"0"(T1) ;In correct radix
JRST .POPJ1 ;No--Stop now
IMULI N,(T1) ;Shift digits over
ADDI N,-"0"(C) ;Combine new digit
JRST MSGR.1 ;And loop
MSGSIX: PUSHJ P,MSGCHR ;Get a char
POPJ P, ;EOF
MSGSIC: MOVEI N,0 ;Clear answer
MOVE T1,[POINT 6,N] ;Setup byte pointer
MSGS.1: CAIL C,"0" ;See if SIXBIT
CAILE C,"9"
CAIL C,"A"
CAILE C,"Z"
JRST .POPJ1 ;NO!
SUBI C," "-' ' ;Make SIXBIT
TLNE T1,770000 ;Word full?
IDPB C,T1 ;No--Store
PUSHJ P,MSGCHR ;Get next char
POPJ P, ;EOF
JRST MSGS.1 ;And loop
MSGEOL: CAIN C,.CHLFD ;LF?
JRST .POPJ1 ;Yes--Return
PUSHJ P,MSGCHR ;Get a char
POPJ P, ;EOF
JRST MSGEOL ;And loop
MSGCHR: SOSGE IBUF+.BFCTR ;Decrement count
JRST MSGC.1 ;Get a new buffer
ILDB C,IBUF+.BFPTR ;Get the char
JUMPE C,MSGCHR ;Ignore nulls
CAIL C,"a" ;See if lower case
CAILE C,"z" ;..
CAIA ;No
SUBI C,"a"-"A" ;Yes--Convert
JRST .POPJ1 ;And skip return
MSGC.1: IN UFD, ;Read buffer
JRST MSGCHR ;Continue
POPJ P, ;EOF or error
SUBTTL Storage
XLIST
LIT
LIST
RELOC 0
NMSGS: BLOCK 1 ;Number of unread messages
IBUF: BLOCK 3 ;Input buffers
END