;-*- Mode: Midas; Fonts: MEDFNT -*- SUBTTL Basic symbol defs and insrts .SYMTAB 5001.,7000. ;; WARNING: This is the experimental version of COMSAT using the DQ: ;; resolver device. Among other things, this code assumes ;; that RESOLV"HSTADR will -always- return the Chaosnet ;; address of a machine over the Internet address if there ;; is a choice (the alternative is to do twice as many resolves ;; and do string comparisons). Yukko scuz. Should be fixed ;; as soon as somebody has a better method. TITLE NEW COMSAT ; System Communications Satellite ;(analogy pat. pend.-- running job has various actual sat. names) F=0 ; Flags A=1 ; A-E consecutive utility regs B=2 ; ( routines save all not used for value returning, C=3 ; so as to minimize clobberage) D=4 E=5 ;=6 ; Someday... MF=7 ; Message flags (perhaps flush this) N=10 ; Index to current net host L=11 ; Base register into index table for LSE addressing OC=12 ; Output Channel - used by OUT package. U1=13 ; UU UU UU UU OOOOO U2=14 ; UU UU UU UU OO OO HANDLER U3=15 ; UU UU UU UU OO OO ACCS U4=16 ; UUUUU UUUUU OOOOO P=17 ; PDL ptr ; "Hard" channel assignments LOCKCH==0 ; LOCK device channel for inbox locking NETD==1 ; Net data channel for ICP and MLFL NETI==2 ; Net input (telnet) channel NETO==3 ; Net output(telnet) channel DKIC==4 ; Disk input DKOC==5 ; Disk output SC==6 ; Stats disk output DMPCH==7 ; Disk output channel for pdump'ing self. CLIC==10 ; CORE link channel (output only). ERRCHN==11 ; ERR device channel. USRI==12 ; Inferior input. USRO==13 ; Inferior output. DBC==14 ; Debugging output channel. LSR1C==15 ; Channel open to LSR1 file. DQCH==16 ; Channel to DQ: resolver device ;; UUO "channels" TMPC==17 ; Temporary UUO chan for short jobs. ; Is theoreticly a UUO channel only, but in fact ; is used as a real channel in a few places, sigh. SAOCH==20 ; Another UUO channel for output into String LN's. ; (That's right, channel 20, so don't use elsewhere!) ; Perhaps merge the two, or better yet introduce ; DEFCHN, DEFCHX macros?? (Latter for #'s > 17) ;LH flag vars ;==1 ;==2 %QULOS==200 ; Set when flushing messages for bad host from queue %PGMRN==400 ; Set while running inferior job. %INCLI==1000 ; Set when inside CLISND (realt flag) %MSTMD==2000 ; Set when MASTER modified. %LSRIN==4000 ; Set when LSR full-name data mapped into core. %SCOPN==10000 ; Set when SC channel open %MSGMD==20000 ; Set when current MSG-LSE modified %QMLMD==40000 ; Set when QML modified. %SCHED==100000 ; Set when scheduler is sleeping; flag for REALT interrupt. ;==200000 ; %RMLMD==400000 ; Set when RML modified. ; RH flag vars %RBFH==1 %RNOQC==2 ; in RSND50, indicates sender doesn't want queue-confirm. %NETDV==4 ; Set by DEVCHK if device name is net-type %RBHD==10 %NOTEL==20 ; Used by NOTEW/NOTEL ;==40 ;==100 %NDATO==200 ; Used by ntout to tell whether outputting on neto or netd %DSKDV==400 ; Set by DEVCHK if device name is dsk-type %NOCOM==1000 ; RCPPUT statistics output uses to help avoid extra commas %TMP==2000 ; Temp flag for various stuffs. ;==4000 %LMAPN==10000 ; Used by WRTMSG for 'append-msg' flag. %MAPC==20000 ; To distinguish MAPCA/MAPCAR. %BRKT==40000 ; LREADR when reading bracketed atom %LRLIT==100000 ; " when reading quoted string or bracketed atom. %IOCER==200000 ; Used by XCTIOC uuo %ILOPR==400000 ; Used by XCTILO uuo ; .OPTION user variable bits that COMSAT needs. %OPALL==%OPINT+%OPOPC+%OPLOK+%OPLKF ; %OPINT gets new interrupt scheme, and ; %OPOPC says set interrupted PC properly. ; %OPLOK gets switch and lock hacking so that only one COMSAT ; is ever active, and ; %OPLKF says unlock locks if top-level fatal int. happens, ; so a new COMSAT can be started to replace previous. ; First thing is purification macros... PURPGB==3 ; Start pure on page 3, have lots of impure. .INSRT KSC;IVORY > ; Define our own error handling macros for PAGSER library. DEFINE PAGSER"PSRERR ERRCOD CALL [ PUSH P,U4 MOVEI U4,ERRCOD JSR PAGLUZ ] TERMIN DEFINE PAGSER"CORLUZ JSR CORLOS TERMIN ; Time manipulating routines DATIME"$$DSTB==1 ; DST bit in time words DATIME"$$ABS==1 ; Absolute days/seconds conversions DATIME"$$OUTT==1 ; Tables for pretty output DATIME"$$UPTM==1 ; Rtns for system time-in-30'ths conversions ;DATIME"$$OUT==0 ; Don't need output rtns since OUT pkg has em .INSRT DSK:SYSENG;DATIME > ; Routines for hacking hostnames table (formerly NETWRK stuff) T==:U1 ; Alternate names for smashable ACs. TT==:U2 ; This is mostly for NETWRK/RESOLV. IFE U2-OC,.ERR RESOLV temp ACs lose!! $$DQ==1 ; Domain interface code in use (mostly for NETRTS) $$DQRN==1 ; Use RENMWO hack to cut down on resolver overhead ;; These are IFNDEFs for now so that I can play with them without ;; editing the sources every time. IFNDEF $$DQCH,$$DQCH==1 ; RESOLV is allowed to find Chaosnet addresses IFNDEF $$DQIN,$$DQIN==1 ; RESOLV is allowed to find Internet addresses ;; $$DQIN should be turned off as soon as the NAMES > files etc can be ;; fixed to use "foo@bar" syntax for everything. .INSRT SYSNET;RESOLV > ; UUO Handler and routines ULISTS==1 ; Assemble list hackery UUOS USCALL==1 ; and special .CALL hackery (ugh) UAREAS==1 ; Area-hacking UUOS too. $$OUT==1 ; Ask for winning new OUT package!! $$OUUO==0 ; Turn off old output UUOs!!! $$OBUF==1 ; Ask OUT package for buffered-output option. $$OERR==1 ; and for ERR output type. $$OHST==1 ; and for host-name output frobs. $$OTIM==1 ; and for time output items. $$PDBG==1 ; Include debugging stuff for PAGSER. $$CHMX==21 ; Need at least this many "channels" for OUT, sigh**2. .INSRT DSK:KSC;NUUOS > ; LSR1 (INQUIR) database package $$HSNM==1 ; Do assemble HSNAME cruft. .INSRT DSK:SYSENG;LSRTNS > IFNDEF $.ARPA,$.ARPA==0 ; No longer use .ARPA kludge by default CONSTANTS ; Dump out any accumulated literals. ; Patch area and PDL hackery. BVAR PATLEN==100 PAT: PATCH: BLOCK PATLEN PDLLEN==500. PDL: BLOCK PDLLEN+1 JUNK: 0 ;for infinite-sink random writes, as in POP P,JUNK EVAR POPBA1: POP P,B POPAJ1: POP P,A POPJ1: AOS (P) APOPJ: RET PPCBAJ: POP P,C POPBAJ: POP P,B POPAJ: POP P,A CPOPJ: RET POPDC1: AOSA -2(P) POPCJ1: AOSA -1(P) POPDCJ: POP P,D POPCJ: POP P,C RET PPDCBJ: POP P,D POPCBJ: POP P,C POPBJ: POP P,B RET POPBJ1: POP P,B AOS (P) RET SUBTTL Main Calling Paths IFN 0,[ MAIN ;top level loop IRQGET ;get and process an input request (e.g. from QMAIL) SPCFND ;get all the specifications IPATTR ;input one attribute (name plus argument as raw text) PARRCP ;hairiest attribute parsing routine - for recipients LREADR ;Lispish reader APRCPT ;Process list structure after it has been read in EQRCPL ;Recipient parsing routine (used also by NAMES file readin) RCPEQV ;look up recipient in EQV list (NAMES file) ;called here only to hack sender's NOQC option (weird) HPARSE ;parse header if mail from foreign host MAIL ;takes a message expressed as an LSE and mails it off RCPEXP ;Expand recipient list (doing eqvs and so forth) RCPPUT ;Process one rcpt and his attribute list RCPE ;See if rcpt with same name already on list RCPOPT ;Get rcpt's options from NAMES file RCPEQV ;look up rcpt in EQV list (NAMES file) RXPNAM ;Expand local name not on EQV list (look in INQUIR and so forth) RXPBUG ;Expand BUG-type rcpt not on EQV list RXPAFL ;Expand @FILE-type rcpt RCPEXT ;Shove expansions into the rcpt-list of the message RCPPUT ;Recursively called here RCPSRT ;Once all rcpts have been found, sort and remove duplicates HEADER ;Format the necessary headers RCPSND ;Send message to all recipients SNDMSG ;Send message to one recipient SNDNET ;send over the net SNDFIL ;simply send to a file WRTMSG ;actually writes into mail files SNDBUL ;send to a .MSGS. file WRTMSG ;write it SNDNAM ;send to local user WRTMSG ;actually writes into mail files SNDPGM ;send to a program (run in inferior) MAIL ;calls MAIL recursively to report program lossage MAIL ;calls MAIL recursively if permanent error QUEUE ;if temporary error, queue the message REMSND ;send a reminder MAIL ;calls MAIL to actually send the stuff QUESND ;try again to send queued messages to a particular host QSTSND ;subroutine to send one queued message SNDMSG ;as above NOTEW ;send positive acknowledge MAIL NOTEL ;send negative acknowledge MAIL ];IFN 0 SUBTTL Attribute Definitions ; Macro to define attributes: ; ATTRIB ,:,, DEFINE ATTRIB COD,SYMC,*NAME*,IRTN IF1 [IRPS SYM,,[SYMC] SYM==COD TERMIN IFGE COD-ATRLIM,.ERR Attribute code too large! IRP N,,[102,103,104] ; List of unused codes. IFE N-COD,.ERR Using "unused" attribute?! TERMIN IFE N,.ERR Using attribute 0?! ] %%S==. LOC ATTRTB+COD ? ASCNT [NAME] LOC ATTRIR+COD ? IRTN LOC %%S TERMIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ATTRIBUTE DEFINITIONS ;;; ;;; Attributes declared are all "internal" unless an input routine ;;; exists for them. Flags can be stored in the LH of ATTRIR if this ;;; later proves desirable. See doc file for more info. To add an ;;; attribute, first check the list of Unused Codes in the ATTRIB ;;; macro definition to see if there's one to assign. If none, ;;; increment the ATRLIM definition and use its old value. 0 should ;;; never be used as a code!! ;;; ;;; Some of these attributes have read-in dispatch entries for the NAMES file, ;;; and others for "ATTRIBUTE:" in IRQ files. ATRLIM==111 ; Current limit for attrib codes. All must be less than this!! A$==,,-1 ; For bit-typeout mode ATTRTB: BLOCK ATRLIM ; Table indexed by , holds ASCNT ptr to name. ATTRIR: BLOCK ATRLIM ; Table to hold routine addr for xct'ing on input. ; General Purpose Attributes ATTRIB 1,A$ATTR:,|ATTRIBUTE| ; S Name of attribute for succeeding A$AVAL (if any) ATTRIB 2,A$AVAL:,|ATTRIBVAL| ; * Holds value for preceding A$ATTR ATTRIB 3,A$XATR:,|X-ATTRIBUTE| ; S Like A$ATTR but used for Net-header attribs. ATTRIB 4,A$XVAL:,|X-ATTRIBVAL| ; * Like A$AVAL. ATTRIB 5,A$PREQ:,|SPECIAL-REQ|, APQTL ; L Indicates special (non-mail) processing. ;ATTRIB 6,A$PARG:,|SPECIAL-ARG|, APLST ; L Holds list of args for A$PREQ. ; Message Attributes ATTRIB 10,A$ID:, |MESSAGE-ID| ; S Message ID for message. ATTRIB 11,A$SNM:, |SENDER|, APSTR ; S sender's name ATTRIB 12,A$CSN:, |SENT-BY|, APSTR ; S sender's claimed-to-be name. ATTRIB 107,A$FFM:, |FAKE-FROM|, APSTR ; S sender's name for "From" ATTRIB 100,A$SNH:,|SENDER-HOST| ; V sender's host (for net mail) ATTRIB 105,A$SRTP:,|RETURN-PATH|,APSTR ; S SMTP return path spec ;; this used to be called MAINT-PATH, hence the odd name ATTRIB 106,A$SMRP:,|ERRORS-TO|,APSTR ; S sender's error return path ATTRIB 13,A$MTXT:,|TEXT|, APSTR ; S input message-text ATTRIB 7, A$MTXF:,|TEXT-FLAG| ; V flag saying if ^_ or crlf.crlf in message. ATTRIB 14,A$MHDR:,|HEADER| ; S Header for message. ATTRIB 15,A$KHDR:,|KLUDGE-HEADER| ; S Kludge to prevent ITS headers from going out ATTRIB 16,A$NMH:, |NET-MAIL-HOST| ; V Host # origin of network-input. ATTRIB 17,A$SBJ:, |SUBJECT|, APSTR ; S Subject if any ATTRIB 20,A$TIM:, |DATE| ; V Time msg created on dsk ATTRIB 101,A$UHDR:,|USER-HEADER|,APSTR ; S User-specified header line. ATTRIB 21,A$HFRC:,|HEADER-FORCE|,APSTR ; S Type of header force if any ATTRIB 22,A$RLN:, |RCPT-LIST-NAME|,APSTR; S Rcpt list name for "To": ATTRIB 23,A$XPIR:,|EXPIRES|, APNUM ; V # days until this MSG expires ATTRIB 24,A$MFN1:,|MSG-FN1|, AP6W ; V Sixbit FN1 for type *MSG. ATTRIB 25,A$MFN2:,|MSG-FN2|, AP6W ; V Sixbit FN2 for *MSG. ATTRIB 26,A$CNF:, |CONFIRMATION|,APSTR ; S Confirmation option (ALL, or FAIL only) ATTRIB 36,A$IDRM:,|ID-REMINDER| ; S Holds ID of parent, when msg generated from reminder ATTRIB 30,A$TEXP:,|REM-EXPIRES|,APNUM ; V Time or count for Reminder expiration ATTRIB 31,A$TNXT:,|REM-NEXT|, APNUM ; V Abs time for very next sending of this reminder. ATTRIB 32,A$TLST:,|REM-SPEC-LIST|,APLST ; L Holds list for 1 reminder time specification. ; Remind-time Attributes, stored under a REM-SPEC-LIST. ATTRIB 33,A$TBAS:,|REM-TIME-BASE|,APNUM ; V Holds time base to start from (optional) ATTRIB 34,A$TINC:,|REM-TIME-INC|,APNUM ; V Holds repeat-increment specifications. ATTRIB 35,A$TSPC:,|REM-TIME-SPEC|,APNUM ; V Holds date/time repeat specifications. ; Message Attributes - Recipient nodes ATTRIB 54,A$RCP:, |RCPT-LIST| ; L Holds active RCPT attribs. ATTRIB 55,A$RCPF:,|RCPT-LIST-FAIL| ; L ditto but marks as failed. ATTRIB 56,A$RSNT:,|RCPT-LIST-SENT| ; L ditto but marks as sent. ATTRIB 27,A$RDON:,|RCPT-LIST-DONE| ; L ditto but marks "done", inactive. ; Recipient Attributes ATTRIB 40,A$RTYP:,|R-TYPE|, APSTR ; S Type of recipient (BUG, PGM, etc) ATTRIB 41,A$RHST:,|R-HOST|, APHST ; V Destination host # for rcpt ATTRIB 42,A$RNAM:,|R-NAME|, APSTR ; S Name of rcpt ATTRIB 43,A$RPSN:,|R-PSEUDO| ; V Existence indicates rcp name is psuedo. ATTRIB 37,A$RHDR:,|R-HEADER| ; S Rcpt's very own header. ATTRIB 57,A$RHFC:,|R-HEADER-FORCE|,APSTR; S Header force, for this rcpt. ATTRIB 44,A$RRES:,|R-RESULT| ; S Result of SNDMSG (failed, queue, sent) ATTRIB 45,A$RRMG:,|R-RESULT-MSG| ; S Err msg if A$RRES==failed. ATTRIB 74,A$RFCT:,|R-FAILURE-COUNT| ; V Number of times tried to send and lost ATTRIB 47,A$RMDS:,|R-MODE-SEND|,APNUM ; V Sending mode (see comments for SENDSW, MAILSW) ATTRIB 50,A$RMDM:,|R-MODE-MAIL|,APNUM ; V Mailing mode ATTRIB 51,A$RPMR:,|R-PGM-MNTNR|,APRCPT ; L If type = PGM, specifies maintainer to notify. ATTRIB 67,A$RPGD:,|R-PGM-DISOWN|,APNUM ; V If type = PGM, control bits for job. ATTRIB 73,A$RPGU:,|R-PGM-USET|, AP2NUM ; L List holds two values, .USET sym and value. ATTRIB 52,A$ROPT:,|R-OPTION|, APSTRS ; S Recipient Option name ATTRIB 53,A$RNK:, |R-NOT-KNOWN| ; V Existence means rcpt not known. ATTRIB 110,A$ROK:,|R-RELAY-OK| ; V Exists when rcpt is ok to relay. ATTRIB 46,A$RHSN:,|R-HSNAME| ; V Holds 6bit HSNAME of local rcpt without a dir. ; Attribs for Scheduler List. ATTRIB 60,A$S:, |SCHED-ITEM-LIST| ; L List holding schedule requests ATTRIB 61,A$STIM:,|SCHED-TIME| ; V System time at which to execute. ATTRIB 62,A$SRTN:,|SCHED-RTN| ; V Routine to execute. ATTRIB 63,A$SARG:,|SCHED-ARG| ; V Argument for routine. ; Attribs for Master List. ATTRIB 64,A$I:, |MASTER-ITEM-LIST| ; L List holding Message-ID/Disk addr correspondence. ATTRIB 65,A$IDAD:,|DISK-ADDR| ; V Disk addr of LSE for this message. ATTRIB 66,A$IDBL:,|DISK-LENGTH| ; V Length of its LSE on disk. ; Attribs for Queued Message List. ATTRIB 70,A$Q:, |QUEUE-SITE-LIST| ; L List holding Site/Message-ID correspondence. ATTRIB 76,A$QFL:, |QUEUE-FINALIZE-LIST| ; L List holding ID's to finalize. ATTRIB 71,A$QHST:,|QUEUE-SITE| ; V Site # which following ID's are queued for. ATTRIB 77,A$QFCT:,|QUEUE-FAILURE-CNT| ; V # times this site failed. ; Attribs for Reminder Message List. ATTRIB 75,A$T:, |REMINDER-LIST| ; L Entry on the RML. ; Attribs for EQV list ATTRIB 72,A$E:, |EQV-LIST|, APEQVL ; L Equivalence list for recipient. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; IARCOD - Given SLP in A to uppercase string, checks to see if it ; matches a non-internal attribute name, and if so skips with ; internal code in RH(B). IARCOD: MOVSI B,-ATRLIM SKIPE ATTRIR(B) ; Skip if internal name (a no-no) SLNEA A,ATTRTB(B) ; This one is OK, does name match? AOBJN B,.-2 CAIGE B,0 ; Don't skipret if counted out. AOS (P) RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Table of known recipient types. RTYPTB: ASCNT [BUG] ASCNT [FILE] ASCNT [NAME] ASCNT [PGM] ASCNT [*MSG] ASCNT [@FILE] NRTYPS==:.-RTYPTB ; Table of sending routines to dispatch on, corresponding to RTYPTB. SNDRTB: SNDBUG SNDFIL SNDNAM SNDPGM SNDBUL SNDAFL IFN NRTYPS-<.-SNDRTB>,.ERR SNDRTB loses ; Message-Result definitions ; These values are returned by certain routines such as SNDMSG ; responsible for sending a message. Note that all temporary ; errors are even (low bit zero), and permanent errors are odd. ; When an error message is furnished, it should not begin or ; end with a CRLF; if a CRLF is embedded, a tab should follow it. ; This is just for prettiness when string is put into a receipt msg. MR$WIN==:0 ; Message won, sent to rcpt. This is the only return ; which is NOT expected to furnish some sort of err msg. MR$PER==:1 ; Perm Err for Rcpt. This rcpt failed forever, but ; can keep trying site for other rcpts. ; This is most often the result of a 450 reply from remote ; host, but might also result from rare local errors. MR$TER==:2 ; Temp Err for Rcpt, must queue. Can keep trying site for ; other rcpts. ; This return happens for such things as "dir full" (local) ; or "mailbox busy", "job cap exceeded", etc. (remote) MR$PEH==:3 ; Perm Err for Host; this host failed forever. ; Should never happen for local site (!). Will happen for ; remote sites which have been getting MR$TEH's for too long. ; Can also be generated "by hand" to flush a queue. MR$TEH==:4 ; Temp err for Host; don't bother trying site further at ; moment. This return can happen if disk space gronked ; (local) or remote host dies during sending (IOC error, ; timeout, failed ICP, etc.) MR$TEM==:5 ; Temp Err for Msg; implies some temporary error associated with ; the message itself, rather than with the host or a specific rcpt. ; This might possibly happen for weirdness in a message such as ; ^C's or the like, but that is supposed to be circumvented ; by MLFL or quoting. May happen for overly long msg text, ; if a remote site has a very low length tolerance; in this case ; we won't want to keep re-trying for every rcpt!! MR$PEM==:6 ; Perm Err for Msg; Ditto, but permanent. ;Same mumblings as for MR$TEM. MR$MAX==:6 ; Max possible MR$ value MR$TAB==:MR$MAX+1 ; For checking dispatch tables. SUBTTL Various variables and standard filenames ;; Hostname strings are 63 words (255. bytes) long, per RFC883. BVAR DEBUG: -1 ;non-z means (mainly) to stop on errors instantly. RELAY: 0 ;non-z allows relaying of remote mail XVERS: -1 ; Version type - ; 0 - Normal operational mailer ; 1 - "New" mailer, operational but not completely tested. ;-1 - Experimental mailer, for debugging/development. OWNHST: 0 ;Our own host address on the network we're really connected to. OWNHS2: 0 ;Alternate host address to consider local .SEE TCPGAT ;With domains, we always need this if we are dual-net. Foo. MYUIND: -1 ;COMSAT's user index, used by SUNAME OWNNAM: BLOCK 63 ;holds asciz string which is name of own site GATNAM: BLOCK 63 ;holds asciz string which is name of TCP relay host TMPNAM: BLOCK 63 ;holds asciz string which is name of random host PRGNAM: .FNAM1 ; FN1, FN2 of source file assembled from. VERSHN: .FNAM2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Names for mail directory files ; SATF "",, - specifies a SIXBIT filename ; which varies depending on whether COMSAT is running as ; the normal, experimental, or new-operational mailer. NSTFLS==0 DEFINE SATF &NORM&,XPER,NEW %%SLOC==. IF1 ? [SIXBIT |XPER|],,[SIXBIT |NEW|] ; Goddam constants lossage IF2 [ SIXBIT NORM TMPLOC XVARTB+NSTFLS,{%%SLOC,,[SIXBIT |XPER|]} TMPLOC NXVRTB+NSTFLS,{%%SLOC,,[SIXBIT |NEW|]} ] NSTFLS==NSTFLS+1 TERMIN SATDEV: SIXBIT /DSK/ ; Satellite Device SATDIR: SIXBIT /.MAIL./ ; Satellite Directory ; Directory is .BULK. for bulk mailer MSTFN1: SATF " LIST",XLIST,NLIST ; MASTER LSE file MSTFN2: SIXBIT /MASTER/ NMSFN1: SATF " LIST",XLIST,NLIST ; FNM to use when GC'ing MSGS. SIXBIT /NMASTR/ QMLFN1: SATF " LIST",XLIST,NLIST ; QML LSE file. QMLFN2: SIXBIT / QUEUE/ RMLFN1: SATF " LIST",XLIST,NLIST ; RML LSE file. RMLFN2: SIXBIT /REMIND/ MSGFN1: SATF " LISTS",XLIST,NLIST ; File of MSG LSEs. MSGFN2: SIXBIT / MSGS/ NMGFN1: SATF " LISTS",XLIST,NLIST ; FNM to use when GC'ing MSGS. SIXBIT / NMSGS/ EQAFN1: SATF "NAMES",XNAMES,NNAMES ; ASCII name equivalence/options file EQAFN2: SIXBIT />/ EQAFR1: 0 ; Used to hold real translated filenames. EQAFR2: 0 EQRFIL:: ; Holds file blk for compilation-report file. EQRDEV: 0 EQRDIR: 0 EQRFN1: SATF "NAMED",XNAMED,NNAMED EQRFN2: 0 EQVFN1: SATF " LIST",XLIST,NLIST ; Binary name equivalence/options file. EQVFN2: SIXBIT / EQV/ LSRFN1: SIXBIT / FROM/ ; Indicator file left by INQUIR, fresh LSRFN2: SIXBIT /INQUIR/ ; file means fresh LSR waiting to be gobbled. HSTDEV: SIXBIT /DSK/ ; File name of the host tables. SIXBIT /SYSBIN/ SIXBIT /HOSTS3/ SIXBIT />/ IRQFN1: SATF "MAIL",XMAIL,NMAIL ; Filename of mail requests. IRQFN2: SIXBIT // ; note FILO sequence! IREFN1: SATF "BADREQ",XBADRQ,NBADRQ ; Erroneous input reqs renamed to this. IREFN2: SIXBIT />/ IRRFIL: 0 ? 0 ; Used by RFNAME call to find true input-req FN. IRRFN1: 0 IRRFN2: 0 IDFN1: SATF " ID",XID,NID ; Name used to obtain unique Message-ID number. IDFN2: SIXBIT />/ ; Names for statistics files STFN1: SATF "STATS",XSTATS,NSTATS ; Name of actual stats file STFN2: SIXBIT />/ STOFN1: SATF "OSTATS",XOSTAT,NOSTAT ; Name for old stats files STOFN2: SIXBIT />/ ; Names for locked switch file (to ensure uniqueness) LCKFN1: SATF " LOCK",XLOCK,NLOCK LCKFN2: SIXBIT /UNIQUE/ UNMPRF: SIXBIT /COMSAT/ ; Preferred UNAME JNMPRF: SATF "IV",XPER,NEW ; " JNAME (major version #, sort of) ; JNAME is BULK for bulk mailer EVAR ; Table of vars to change when running in experimental mode! XVARTB: BLOCK NSTFLS ; To hold sat filenames which change. ; Can have other vars here in form ; ,,[] NXVARS==:.-XVARTB ; Vars to change when running in "New operational" mode! NXVRTB: BLOCK NSTFLS ; To hold sat filenames which change. ; Can have other vars here in form ; ,,[] NNXVRS==:.-NXVRTB XVRSRT: SKIPN XVERS ; If normal, RET ; don't change anything. PUSHAE P,[A,B,C] MOVE C,[-NXVARS,,XVARTB] SKIPL XVERS ; Use XVARTB if experimental MOVE C,[-NNXVRS,,NXVRTB] ; Else use "new operational" vars. XVRSR1: MOVE A,(C) HLRZ B,A MOVE A,(A) ; Get xper. value to use MOVEM A,(B) ; Store in indicated loc AOBJN C,XVRSR1 POPAE P,[C,B,A] RET SUBTTL Initializations for bulk mailer kludge .scalar bootxj ; Original XJNAME (for RESET, ugh) bulkck: push p,a .suset [.rxjname,,bootxj] move a,bootxj came a,[sixbit /VDNBRG/] jrst popaj move a,[sixbit /.BULK./] movem a,satdir move a,[sixbit /BULK/] movem a,jnmprf ;; need to break local delivery jrst popaj SUBTTL Statistics file routines ; Macro to write stats with. (see SCOPN) ; Generates a