Trailing-Edge
-
PDP-10 Archives
-
BB-X116C-BB
-
10,7/netgen/ngnfin.mac
There are 7 other files named ngnfin.mac in the archive. Click here to see a list.
; TITLE NGNFIN - NETGEN Finish Command Processing
; ======
SEARCH NGNMAC
;IFNDEF FT.X25, <FT.X25==0> ;-1 for X25GEN; 0 for Not
INIGEN (NGNFIN) ; Initialize GLXLIB assembly options
TOPS10 <
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1982,1985,1986.
;ALL RIGHTS RESERVED.
;
> ;END OF TOPS10
;
; module NGNFIN, containing the code sections for the
; NETGEN - Network configurator program
;
;
; SUMMARY OF EDIT HISTORY - FOR FULL DETAILS SEE MODULE NETGEN.MAC
;
; EDIT # DATE
; 1 26JUN81
; 2 15JUL81
; 3 07AUG81
; 5 31AUG81
; 6 03SEP81
; 7. 08SEP81
; 8. 09SEP81
; 9. 17SEP81
; 10. 21SEP81
; 12. 02OCT81
; 13. 05OCT81
; 14. 12OCT81
; 15. 04NOV81
; 16. 23NOV81
; 17. 14Dec81
; 18. 24Dec81
; 19. 22Feb82
; 20. 24Feb82
; 21. 05Mar82
; 22. 16Mar82
; 23. 23Mar82
; 24. 25Mar82
; 25. 26Mar82
; 26. 30Mar82
; 27. 31Mar82
; 28. 1Apr82
; 30. 16Apr82
; 31. 20Apr82
; 32. 21Apr82
; 33. 22Apr82
; 34. 23Apr82
; 36. 03May82
; 37. 07May82
; 38. 27May82
; 39. 04Jun82
; 40. 18-Jun-82
; 41. 21Jun82
; 42. 23Jun82
; 43. 25Jun82
; 44. 09Jul82
; 45. 09Jul82
; 46. 09Aug82
; 4.1
; 2 23Nov82
; 4 08dec82
; 13 23Feb83
; 19. 01Mar83
; 29. 13Jul84
; 35. 06Jan85
; 38. 15Jul85
;
;
;
; OTHER EQUATED SYMBOLS
;
PDLL==2000 ;PUSH-DOWN LIST LENGTH
CBFSIZ==200 ;LENGTH OF COMMAND BUFFER
ACBSIZ==200 ;LENGTH OF ATOM BUFFER
;
; Buffer pool definitions
; XWD <address of length>,<routine to produce S1/min, S2/max>
;
BUFLST: XWD [^D16],[ ; CE$buf 16.,<rdbnum>
MOVE S2,RDBNUM## ; For messages in transit.
MOVE NODTYP##
CAIN NDN200## ; DN200:
MOVE S2,BUFDIF## ; No messages in transit.
ADD S2,NTPIBQ## ; For NSP originating messages.
ADDI S2,3 ; (fudge factor?)
SKIPE S1,BUFDIF## ; Get min/max.
MOVN S1,S1
ADD S1,S2
MOVE NODTYP##
CAIN NX25## ; X.25:
$CALL [$SAVE <T1>
MOVE T1,NTPNLN## ; Get number
SUB T1,NTPNCK## ; of LAPB lines.
IMULI T1,^D2 ; These
SUBI T1,^D1 ; buffers
SUB S1,T1 ; are not
SUB S2,T1 ; needed.
$RET]
$RETT]
XWD [^D60],[ ; CE$buf 60.,<ntplix>+2.+4.
MOVE S2,NTPLIX##
ADDI S2,^D6
MOVE NODTYP##
CAIN NX25##
MOVEI S2,^D5
MOVE S1,S2
$RETT]
XWD [^D80],[ ; CE$buf 80.,5.
MOVE NODTYP##
CAIE NDN200##
$RETF
MOVEI S2,^D5
MOVE S1,S2
$RETT]
XWD [^D213],[
MOVE NODTYP##
CAIE NX25##
$RETF
MOVEI S1,^D5
MOVEI S2,^D6
$RETT]
XWD RDBLEN##,[ ; CE$buf <rdblen>,3.
MOVEI S2,^D3
MOVE S1,S2
$RETT]
EXP 0
CBBLST: XWD [0],[ ; CE$cbb 0,<ccbnum>
$SAVE <T1,T2>
MOVE S2,RDBNUM##
MOVE T1,RDBNUM##
MOVE T2,NODTYP##
CAIE T2,NDN200## ; Add rdbnum if not DN200
IDIVI T1,^D10 ; else add .1 rdbnum
ADD S2,T1
SKIPN CCBSTA## ;If an explicit value given
MOVE S2,CCBNUM## ;then use it.
MOVE S1,S2
$RETT]
XWD RDBLEN##,[ ; CE$cbb <rdblen>,<rdbnum>
MOVE S2,RDBNUM##
SKIPE S1,BUFDIF##
MOVN S1,S1
ADD S1,S2
$RETT]
EXP 0
LIT
;
; Set all the dependent defaults before use
;
; Calculate/set numbers of buffers, buffer quotas from internal data.
;
; RDBNUM: minimum #RDBs calculated from the following:
;
; 1 per DTE
; 7 per DMC
; 8 per DMR
; 2 per KDP
;
; then add BUFDIF
;
SETDFL::MOVE S2,DTENUM##
MOVE S1,KDPNUM##
IMULI S1,^D2
ADD S2,S1
MOVE S1,DMCNUM##
IMULI S1,^D7
ADD S2,S1
MOVE S1,DMRNUM##
IMULI S1,^D8
ADD S2,S1
ADD S2,BUFDIF##
SKIPE RDBSTA##
MOVEM S2,RDBNUM##
$CALL RDBCLC ; CALCULATE DEFAULT RDB SIZE
SKIPE RDSSTA##
MOVEM S1,RDBLEN## ; AND SAVE IT
;
;s2 now does not have # of free buffers.
; set XPT buffer quota:
; XP.lbq = #free buffers - XP.ebq
; (XPT code sets DLL Quota = XP.lbq)
;
LOAD S1,DNS11##,PRMINI ; ** CONSTANT FOR NOW **
SKIPE NTDLBQ##
MOVEM S1,NTPLBQ##
$RETT
;
;BLKCLC - Calculate The Minimum Data-Link-Block-Size and Return It In S1
;
;RETURNS WITH S1 = MAX (A,B) where
; A = NTPBUF (SC Rec. Buf size) B = 2*NTPNN (# nodes in net)
; + 15. (XPT overhead) +5 (3 header, 2 checksum)
; + 9. (NSP overhead)
; + 6. (DDCMP overhead)
; + 2. (header CRC)
; + 2. (trailer CRC)
;
BLKCLC::MOVE S1,NTPNN## ; GET NUMBER OF NODES
IMULI S1,2 ; TIMES 2
ADDI S1,5 ; PLUS FIVE FOR RESERVE
MOVE S2,NTPBUF## ; SC RECEIVE BUFFER SIZE
ADDI S2,^d34 ; PLUS ALL THE OVERHEADS
CAMGE S1,S2 ; S1 .LT. S2?
MOVE S1,S2 ; YES - MAKE S1 THE BIGGER OF THE TWO
ADDI S1,1 ; round up
TXZ S1,1 ; and
$RETT ; RETURN
;
;RDBCLC - A Routine To Calculate Minimum RDB Size
;
;RETURNS WITH S1 = DL.BLK+6
;
RDBCLC::MOVE S1,NTPBLK## ; Get DL block size
ADDI S1,<^D6+1> ; plus six
ANDI S1,^-1 ; rounded to even number.
MOVE TF,NODTYP## ; If
CAIE TF,NX25## ; an X.25 node
$RETT ; then
MOVE TF,XTPBLK## ; get
ADDI TF,^D2 ; max (S1, MAXIMUM BLOCK+2)
CAMLE S1,TF
MOVE S1,TF
$RETT
SUBTTL FINISH Command -- Utility routines
; ============== ----------------
;
;
; routines for the FINISH command
;
; Routines to output bytes decoded by $TEXT macros elsewhere
;
; Automatically called with S1 = byte to output
;
; Destroys S1 and S2
;
PACBYT: MOVE S2,PACIFN
JRST BOTH
NTPBYT: SKIPA S2,NTPIFN
CETBYT: MOVE S2,CETIFN
BOTH: EXCH S1,S2
$CALL F%OBYT
$RETIT
$TEXT ,<false retn'd by PAC/NTP/CETBYT>
$HALT
OPNER: $TEXT ,<?Error opening CETAB.MAC, NETPAR.MAC, or NMLACC.MAC file>
$HALT
SUBTTL FINISH Command -- Initial checking
; ============== ----------------
;
;
; THIS IS THE FINISH COMMAND. IT DOES ALL THE WORK.
;
FINISH::$CALL SETDFL ;Make sure defaults are set
;
; CHECK to make sure everything is in order (ie, will produce a fairly
; reasonable, runnable system image, as far as can be told here) before
; going to all the trouble of writing the output files.
;
; First, give warnings for "non-fatal" stuff:
; If RJE, no I/O device included (ie LPT / CR)
; If DN20, #links > 8 unsupported
; Only 290. <= BUFFER SIZE <= 576. supported
;
MOVE S1,NODTYP##
CAIE S1,NDN200##
JRST CHK1
;
; DN200s only:
;
SKIPL LPTSTA## ;if no LPT
JRST CHK2
SKIPE CR1STA## ;and no CR, warning
$TEXT ,<%You have not included an I/O device for your DN200.>
JRST CHK2
;
; DN20s only:
;
CHK1: SKIPE PRVLDG##
JRST CHK2
MOVE S1,NTPNCK## ;#NMX lines - 3 (3 is the initial fudge factor
SUBI S1,^D3 ;of 2, +1 for the DTE) is the # of ALL physical
;lines including x.25
CAILE S1,^D8 ;If more than 8 physical lines, warning message
$TEXT ,<%More than 8 communications lines on a DN20 is unsupported.>
;
; both node types:
;
CHK2: MOVE S1,NTPBLK## ;If dll block size out of range, unsupported
CAIGE S1,^D290
$TEXT ,<%Data Link Block Size less than 290. is unsupported.>
CAILE S1,^D576
$TEXT ,<%Data Link Block Size greater than 576. is unsupported.>
;
; ensure that NTPBUF (SC rec buf or NSP segment size) is at least 34. less than
; the data-link-block-size
;
MOVE T1,NTPBLK##
SUBI T1,^D34
CAMGE T1,NTPBUF##
MOVEM T1,NTPBUF##
;
; Check for "fatal" errors - if any of the following, do not write files
; Node name &/or address defaulted
; Node address > # of nodes in net
; #nodes in net not supported by block size.
; If DN20, no DTE
; If DN20, no line besides the DTE
; If DN20, no LP11s or CR11s
; If DN200, no comm line (DMC or DMR only)
; If DN200, any line(s) other than a DMC/DMR
; Note that routine BLKCLC enforces that the DL block size always conforms to
; the rules relating it to #nodes in net
;
SKIPE NTDSLF##
JRST [ $TEXT ,<?The Node Address has not been set>
$RETF]
;
SKIPE NONSTA##
JRST [ $TEXT ,<?The Node Name has not been set>
$RETF]
;
MOVE S1,NTPSLF## ;If this node address is
CAMLE S1,NTPNN## ; greater than number-of-nodes-in-net, load won't work
JRST [ $TEXT ,<?The node address requires a MAXIMUM ADDRESS of at least ^D/S1/>
$RETF]
;
MOVE S1,NTPNN## ;If number-of-nodes-in-net
IMULI S1,2 ;makes routing message
ADDI S1,1 ;greater than
CAMLE S1,NTPBLK## ;the DLL block size
JRST [ $TEXT ,<?The number of nodes in the net requires a BUFFER SIZE of at least ^D/S1/>
$RETF]
;
MOVE S1,NODTYP##
CAIE S1,NDN20##
JRST CHK3
;
; DN20:
;
SKIPN PRVLDG##
SKIPLE DTENUM## ;error if no DTE
SKIPA
JRST [$TEXT ,<?Your DN20 has no DTE.>
$RETF]
;
SKIPE LPTSTA## ;if LPT
SKIPN CR1STA## ;or CR, warning
JRST [$TEXT ,<?You cannnot include LP11 or CR11 devices on DN20s.>
$RETF]
;
MOVE S1,PLKNUM## ;GET NUMBER OF PHYSICAL LINKS
SKIPL DTENUM## ;DTE INCLUDED?
SUBI S1,1 ;YES - SUBTRACT ONE
SKIPT S1 ;OK IF NON-ZERO
JRST [ $TEXT ,<?You have not configured any communications lines.>
$RETF]
JRST CHK5
CHK3: MOVE S1,NODTYP##
CAIE S1,NDN200##
JRST CHK5
;
; DN200:
;
SKIPE DMCNUM##
JRST CHK4
SKIPN DMRNUM##
JRST [ $TEXT ,<?You have not configured a communications line (DMC/DMR) for your DN200.>
$RETF]
;
CHK4: MOVE S1,PLKNUM##
CAIE S1,^D1
JRST [ $TEXT ,<?You must have only one communications line on the DN200, and that a DMC or DMR.>
$RETF]
CHK5:
SUBTTL FINISH Command -- Generate NMLACC.MAC
; ============== ------------------
; OPEN NMLACC.MAC
;
TOPS20 <MOVE S1,[XWD 3,0]>
TOPS10 <MOVE S1,[XWD 5,0]>
MOVEM S1,PACFD
MOVEI S1,PACFD
MOVEM S1,PACFOB ; in FOB
MOVEI S1,7 ;set byte-
MOVEM S1,PACFOB+1 ; size too
MOVEI S1,2 ;length of FOB
MOVEI S2,PACFOB ; and its address
$CALL F%OOPN## ;open NMLACC.mac for output
JUMPF OPNER
MOVEM S1,PACIFN ; and save its IFN
SETOM S2 ; Flag for exact FD
$CALL F%FD ; Get it for printing
$TEXT ,<[Generating ^F/@S1/^A]>
; PUT A TITLE AND SUBTITLE ON NMLACC.MAC
; also the date and ident
;
$TEXT (PACBYT,< .TITLE NMLACC - NML PRIVILEGED ACCESS CONTROL>)
TOPS20 <$TEXT (PACBYT,< .SBTTL from ^W/IB##+IB.PRG/-20 on ^H/CDAT/>)>
TOPS10 <$TEXT (PACBYT,< .SBTTL from ^W/IB##+IB.PRG/-10 on ^H/CDAT/>)>
$text (pacbyt,<^I/IDENT/^M^J^T/CPYRGT/>)
;
;these macros are why we're here
;
EXT <USRSTR,PASSTR,ACTSTR>
$TEXT (PACBYT,<
.MACRO NM$ACC macro
'macro' ^T/LBRAK/^T/USRSTR/^T/P2NM2/^T/LBRAK/^T/PASSTR/^T/P2NM2/^T/LBRAK/^T/ACTSTR/^T/RBRAK/
.ENDM NM$ACC>)
MOVE NODTYP##
CAIE NX25##
JRST PAC.1
EXT <USRSXR,PASSXR,ACTSXR>
$TEXT (PACBYT,<
.MACRO GA$ACC macro
'macro' ^T/LBRAK/^T/USRSXR/^T/P2NM2/^T/LBRAK/^T/PASSXR/^T/P2NM2/^T/LBRAK/^T/ACTSXR/^T/RBRAK/
.ENDM GA$ACC>)
PAC.1: $TEXT (PACBYT,<>)
;
; HERE TO CLOSE NMLACC.MAC
;
MOVE S1,PACIFN
$CALL F%REL
JUMPF CLOSER
SETZM PACIFN
$TEXT ,< [OK]>
SUBTTL FINISH Command -- Generate CETAB.MAC
; ============== ------------------
; OPEN CETAB.MAC
;
TOPS20 <MOVE S1,[XWD 3,0]>
TOPS10 <MOVE S1,[XWD 5,0]>
MOVEM S1,CETFD
MOVEI S1,CETFD
MOVEM S1,CETFOB ; in FOB
MOVEI S1,7 ;set byte-
MOVEM S1,CETFOB+1 ; size too
MOVEI S1,2 ;length of FOB
MOVEI S2,CETFOB ; and its address
$CALL F%OOPN## ;open cetab.mac for output
JUMPF OPNER
MOVEM S1,CETIFN ; and save its IFN
SETOM S2 ; Flag for exact FD
$CALL F%FD ; Get it for printing
$TEXT ,<[Generating ^F/@S1/^A]>
;
; CONTINUED ON NEXT PAGE
;
;
; PUT A TITLE AND SUBTITLE ON CETAB.MAC
; also the date and ident
;
$TEXT (CETBYT,< .TITLE CETAB>)
TOPS20 <$TEXT (CETBYT,< .SBTTL from ^W/IB##+IB.PRG/-20 on ^H/CDAT/>)>
TOPS10 <$TEXT (CETBYT,< .SBTTL from ^W/IB##+IB.PRG/-10 on ^H/CDAT/>)>
$text (cetbyt,<^I/IDENT/^M^J^T/CPYRGT/>)
;
; output the MCALL for SYS$DF and the SYS$DF macro
;
EXT <NODNAM,NTPSLF>
$TEXT (CETBYT,<.MCALL SYS$DF^M^J SYS$DF ^T/NODNAM/,^D/NTPSLF/.>)
;
; CONTINUED ON NEXT PAGE
;
;
; OUTPUT BUF$DF MACRO
;
$CALL RDBCLC
MOVEM S1,RDBLEN##
;
SETZ T1, ; This is where it all goes.
MOVEI T4,BUFLST ; Start with CE$buf pools.
MEM.1: SKIPN T3,0(T4) ; For each one
JRST MEM.3 ; defined,
$CALL 0(T3) ; get min/max,
JUMPF MEM.2 ; (if the pool is appropriate)
HLRZ T3,T3 ; figure
MOVEI S2,^D8 ; minimum amount
ADD S2,0(T3) ; of
IMUL S1,S2 ; core needed
ADD T1,S1 ; and accumulate.
MEM.2: AOJA T4,MEM.1
MEM.3: MOVEI T4,CBBLST ; Now the CE$cbb pools.
MEM.4: SKIPN T3,0(T4) ; For each one
JRST MEM.6 ; defined,
$CALL 0(T3) ; get min/max,
JUMPF MEM.5 ; (if the pool is appropriate)
HLRZ T3,T3 ; figure minimum
MOVE S2,0(T3) ; amount of
IMUL S1,S2 ; core needed
ADD T1,S1 ; and accumulate.
MEM.5: AOJA T4,MEM.4
MEM.6: $TEXT (CETBYT,< MEM$DF 0.,^d/T1/. ; ,cor>)
;
; CONTINUED ON NEXT PAGE
;
;
;HERE TO PRODUCE THE PROCESSES
;
$TEXT (CETBYT,<;^M^J; Standard Processes^M^J;>)
$TEXT (CETBYT,< PRC$DF CEX,CE>)
SKIPL PRCMDT##
$TEXT (CETBYT,< PRC$DF MDT>)
$TEXT (CETBYT,< PRC$DF NDT>)
$TEXT (CETBYT,< PRC$DF INI^M^J PRC$DF NMX,NM>)
$TEXT (CETBYT,< PRC$DF SC^M^J PRC$DF SC1>)
$TEXT (CETBYT,< PRC$DF SCX,NS^M^J PRC$DF NSP^M^J PRC$DF NS1>)
$TEXT (CETBYT,< PRC$DF NS2^M^J PRC$DF XPT^M^J PRC$DF XPE>)
$TEXT (CETBYT,< PRC$DF TLI>)
MOVE S1,NODTYP## ;if not dn200,
CAIE S1,NDN200## ;then
$TEXT (CETBYT,< PRC$DF TOP>) ;include topology process
$TEXT (CETBYT,<;^M^J; Variable Processes^M^J;>)
MOVE S1,NODTYP## ;if not x25
CAIN S1,NX25## ;then skip
;;+
$TEXT (CETBYT,< PRC$DF GAT
PRC$DF GAN
PRC$DF PLP
PRC$DF PLE
PRC$DF PLN
PRC$DF FLN
PRC$DF FLP>)
;;-
SKIPLE DTENUM## ;skip if DTE not defined
$TEXT (CETBYT,< PRC$DF DTE>) ;put in DTE process
SKIPG DMCNUM## ;skip if DMC not defined
SKIPLE DMRNUM##
$TEXT (CETBYT,< PRC$DF DMC>) ;put in DMC process
SKIPLE DMRNUM##
$TEXT (CETBYT,< PRC$DF DMR>) ;put in DMR process
SKIPLE DCPNUM## ;skip if DECnet KDPs not defined
;;+
$TEXT (CETBYT,< PRC$DF DCP>) ;skip if KDPs not defined
SKIPLE KDPNUM##
$TEXT (CETBYT,< PRC$DF KDP>)
;;-
MOVE S1,NODTYP## ;get node type
CAIN S1,NDN200## ;and if dn200
SKIPG NRLNUM## ;NRM logical links?
SKIPA
;;+
$TEXT (CETBYT,< PRC$DF NRM
PRC$DF NRD>)
;;-
SKIPLE LPTNUM## ;lineprinter?
$TEXT (CETBYT,< PRC$DF LE>)
SKIPLE CR1NUM## ;card reader?
$TEXT (CETBYT,< PRC$DF CR>)
MOVE S1,NODTYP## ;if dn200,
CAIN S1,NDN200## ;then
$TEXT (CETBYT,< PRC$DF XMD>) ; include this process
;
;CONTINUED ON NEXT PAGE
;
;
;GENERATE NON-STANDARD PROCESSES
;
SKIPGE PRCPTR## ;DO WE HAVE ANY NON-STANDARD PROCESSES?
JRST FNPR.1 ;NO - CONTINUE
$TEXT (CETBYT,<;^M^J; Non-standard Processes^M^J;>)
EXT <PRCNAM,PRCDRV>
SETZ T3, ;INITIALIZE COUNTER
FNPR.2: CAMLE T3,PRCPTR## ;ALL DONE?
JRST FNPR.1 ;YES - CONTINUE
SKIPN PRCDRV##(T3) ;Process
$TEXT (CETBYT,< PRC$DF ^T/PRCNAM(T3)/>)
SKIPE PRCDRV##(T3) ;Process/RSX drvier
$TEXT (CETBYT,< PRC$DF ^T/PRCNAM(T3)/,^T/PRCDRV(T3)/>)
AOJA T3,FNPR.2 ;LOOP FOR ALL PROCESSES
FNPR.1: ;HERE WHEN DONE ALL NON-STD PROCESSES
;
; HERE TO DO THE LLC$DF MACROS
;
;STANDARD LLC HEADER TEXT
;
;;+
$TEXT (CETBYT,<;
; Standard LLC Processes
;
LLC$DF CEX
LLC$DF INI
LLC$DF NMX
LLC$DF SC
LLC$DF SCX
LLC$DF NSP
LLC$DF XPT>)
;;-
MOVE S1,NODTYP## ;if not dn200,
CAIE S1,NDN200## ;then
$TEXT (CETBYT,< LLC$DF TOP>) ;include topology process
$TEXT (CETBYT,<;^M^J; Variable LLC Processes^M^J;>)
SKIPLE LPTNUM## ;skip if no line printer
$TEXT (CETBYT,< LLC$DF LE>)
SKIPLE CR1NUM## ;skip if no card reader
$TEXT (CETBYT,< LLC$DF CR>)
;
; HERE FOR X25
;
MOVE S1,NODTYP##
CAIN S1,NX25##
$TEXT (CETBYT,< LLC$DF GAT^M^J LLC$DF PLP>)
;
; HERE FOR NRD/NRM
;
MOVE S1,NODTYP## ;get node type
CAIN S1,NDN200## ;if dn200,
SKIPG NRLNUM## ;NRM LOGICAL LINKS
SKIPA ;JUMP IF WE DONT DON'T NEED NRM/NRD
$TEXT (CETBYT,< LLC$DF NRD^M^J LLC$DF NRM>)
;
; CONTINUED ON NEXT PAGE
;
;
;GENERATE NON-STANDARD LLC PROCESSES
;
SKIPGE PRCPTR## ;DO WE HAVE ANY NON-STANDARD PROCESSES?
JRST FNPR.4 ;NO - CONTINUE
;YES - PUT IN HEADER
$TEXT (CETBYT,<;^M^J; Non-Standard LLC processes^M^J;>)
EXT <PRCNAM>
SETZ T3, ;INITIALIZE COUNTER
FNPR.5: CAMLE T3,PRCPTR## ;ALL DONE?
JRST FNPR.4 ;YES - CONTINUE
SKIPGE PRCUSE##(T3) ;NO - DOES THIS PROCESS NEED LLC$DF?
JRST FNPR.6 ;NO - SKIPE THIS
$TEXT (CETBYT,< LLC$DF ^T/PRCNAM(T3)/>) ;YES - PUT IT IN
FNPR.6: AOJA T3,FNPR.5 ;LOOP FOR ALL PROCESSES
FNPR.4: ;HERE WHEN DONE ALL NON-STD PROCESSES
;
;Continued on Next Page
;
;
; HERE TO PRODUCE THE SLT$DF AND STA$DF MACRO(S)
;
;PRINT THE STANDARD SYSTEM LINES STUFF
FS.DEV: $TEXT (CETBYT,<;^M^J; System Lines^M^J;>)
;
; HERE TO DO THE DTE20
;
SKIPGE S1,DTENUM## ;Any DTE20s?
JRST FS.DMC
$CALL DEVDTE##
MOVEM S1,CTLNUM## ;NOTE: DTE-n-0 for CETAB!!
SETZM UNTNUM##
EXT <DEVTXT,CTLNUM,UNTNUM>
$TEXT (CETBYT,< SLT$DF TLI,^T/DEVTXT/,,^O/CTLNUM/,^O/UNTNUM/,,,ENABLE>)
;
; HERE TO DO THE DMC11S
;
FS.DMC: SKIPG T1,DMCNUM##
JRST FS.DMR
$CALL DEVDMC##
FSDMC1: $CALL DEVCTL##
SKIPL DMCUSE##(I1) ;THIS DMC11 IN USE?
EXT <DEVTXT,CTLNUM>
$TEXT (CETBYT,< SLT$DF TLI,^T/DEVTXT/,,^O/CTLNUM/,,,,ENABLE>)
AOS CTLNUM##
SOJG T1,FSDMC1 ;LOOP FOR ALL POSSIBLE DMC11S
;
; HERE TO DO THE DMR11S
;
FS.DMR: SKIPG T1,DMRNUM##
JRST FS.KDP
$CALL DEVDMR##
FSDMR1: $CALL DEVCTL##
SKIPL DMRUSE##(I1) ;THIS DMR11 IN USE?
EXT <DEVTXT,CTLNUM>
$TEXT (CETBYT,< SLT$DF TLI,^T/DEVTXT/,,^O/CTLNUM/,,,,ENABLE>)
AOS CTLNUM##
SOJG T1,FSDMR1 ;LOOP FOR ALL POSSIBLE DMR11S
;
; CONTINUED ON NEXT PAGE
;
;
; HERE TO DO THE KDP11S
;
FS.KDP: SKIPG T1,KDPNUM##
JRST FD.DEV
$CALL DEVKDP##
FSKDP1: $CALL DEVCTL##
SKIPG T2,KDPLNM##(I1) ;ARE THERE ANY DUPS ON THIS LINE
JRST FSKDP8 ;NO - GO DO NEXT
SETZM UNTNUM##
FSKDP2: $CALL DEVUNT##
EXT <DEVTXT,CTLNUM,UNTNUM>
$TEXT (CETBYT,< SLT$DF ^A>)
MOVE S1,LNTYP##(I1)
CAIE S1,^D5 ;NO DDCMP
$TEXT (CETBYT,<TLI,DCP^A>)
CAIN S1,^D5 ;X25
$TEXT (CETBYT,<PLP,FLP^A>)
$TEXT (CETBYT,<,^T/DEVTXT/,^O/CTLNUM/,^O/UNTNUM/,,,ENABLE>)
AOS UNTNUM##
SOJG T2,FSKDP2 ;BACK FOR NEXT DUP WITHIN THIS KDP
FSKDP8: AOS CTLNUM##
SOJG T1,FSKDP1 ;BACK FOR NEXT KDP
;
; Continued on next page
;
;
; NOW ISSUE DEV$DF, CTL$DF, UNT$DF AND TRB$DF FOR EACH DEVICE
;
FD.DEV: $TEXT (CETBYT,<;^M^J; Devices^M^J;>)
;
; DO THE DEV$DF, CTL$DF AND UNT$DF FOR THE DTE20
;
FD.DTE: SKIPGE S2,DTENUM## ;Any DTE20s?
JRST FD.DMX ;NO, ALL DONE.
$CALL DEVDTE##
MOVEM S2,CTLNUM##
SETZM UNTNUM##
LSH S2,5 ;COMPUTE CSR ADDRESS
ADDI S2,174400
MOVEM S2,DMXCSR##
MOVE S2,CTLNUM##
LSH S2,2 ;COMPUTE VECTOR ADDRESS
MOVNS S2
ADDI S2,774
MOVEM S2,DMXINT##
$TEXT (CETBYT,<;^M^J;^T/DEVTXT/^M^J;^M^J DEV$DF ^T/DEVTXT/,1>)
EXT <DTECST>
;
; HERE TO DO THE CTL$DF MACRO FOR THE DTE
;
$TEXT (CETBYT,< CTL$DF ^O/CTLNUM/,^O/DMXCSR/,^O/DMXINT/,7>)
;
; HERE TO DO THE UNT$DF MACRO
;
$TEXT (CETBYT,< UNT$DF ^D/UNTNUM/,^O/DTECST/>)
;
;Continued on Next Page
;
;
; DO THE DEV$DF, CTL$DF AND UNT$DF FOR THE DMC11S
;
FD.DMX: MOVEI S1,160740 ;STARTING CSR ADDRESS
MOVEM S1,DMXCSR## ;REMEMBER
MOVEI S1,670 ;STARTING INTERRUPT VECTOR
MOVEM S1,DMXINT## ;REMEMBER
FD.DMC: SKIPG T1,DMCNUM##
JRST FD.DMR
$CALL DEVDMC##
TXZ T4,F.DEV ;NO DEV MACRO YET
FDDMC1: $CALL DEVCTL##
SKIPGE DMCUSE##(I1) ;IS THIS DMC11 IN USE?
JRST FDDMC8 ;NO, CHECK NEXT.
TXON T4,F.DEV ;SENT DEV$DF MACRO YET?
$TEXT (CETBYT,<;^M^J;^T/DEVTXT/^M^J;^M^J DEV$DF ^T/DEVTXT/,2>)
EXT <DMCCST>
;
; HERE TO DO THE CTL$DF MACRO
;
$TEXT (CETBYT,< CTL$DF ^O/CTLNUM/,^O/DMXCSR/,^O/DMXINT/,5>)
MOVEI S1,10 ;DIFFERENCE IN VECTOR ADDRESS
ADDM S1,DMXCSR## ;POINT TO NEXT CSR ADDRESS
ADDM S1,DMXINT## ;POINT TO NEXT INTERRUPT ADDRESS
;
; HERE TO DO THE UNT$DF MACRO
;
MOVEI S1,177470
SKIPE DMCDUP##(I1)
AOS S1
$TEXT (CETBYT,< UNT$DF 0,^O/S1/,^O/DMCCST(I1)/>)
FDDMC8: AOS CTLNUM## ;GO TO NEXT DMC11
SOJG T1,FDDMC1
;
; CONTINUED ON NEXT PAGE
;
; DO THE DEV$DF, CTL$DF AND UNT$DF FOR THE DMR11S
;
FD.DMR: SKIPG T1,DMRNUM##
JRST FD.KDP
$CALL DEVDMR##
TXZ T4,F.DEV ;NO DEV MACRO YET
FDDMR1: $CALL DEVCTL##
SKIPGE DMRUSE##(I1) ;IS THIS DMR11 IN USE?
JRST FDDMR8 ;NO, CHECK NEXT.
TXON T4,F.DEV ;SENT DEV$DF MACRO YET?
$TEXT (CETBYT,<;^M^J;^T/DEVTXT/^M^J;^M^J DEV$DF ^T/DEVTXT/,2>)
EXT <DMRCST>
;
; HERE TO DO THE CTL$DF MACRO
;
$TEXT (CETBYT,< CTL$DF ^O/CTLNUM/,^O/DMXCSR/,^O/DMXINT/,5>)
MOVEI S1,10 ;DIFFERENCE IN VECTOR ADDRESS
ADDM S1,DMXCSR## ;POINT TO NEXT CSR ADDRESS
ADDM S1,DMXINT## ;POINT TO NEXT INTERRUPT ADDRESS
;
; HERE TO DO THE UNT$DF MACRO
;
MOVEI S1,177470 ;**** WHAT IS THIS? ****
SKIPE DMRDUP##(I1)
AOS S1
$TEXT (CETBYT,< UNT$DF 0,^O/S1/,^O/DMRCST(I1)/>)
FDDMR8: AOS CTLNUM## ;GO TO NEXT DMR11
SOJG T1,FDDMR1
;
; CONTINUED ON NEXT PAGE
;
;
; Here to do the DEV$DF, CNT$DF, and UNT$DF for the
; KDPs
;
FD.KDP: SKIPG T1,KDPNUM##
JRST FD.END
$CALL DEVKDP##
TXZ T4,F.DEV ;Flag no DEV generated yet
FDKDP1: $CALL DEVCTL##
SKIPG T2,KDPLNM##(I1) ;In use?
JRST FDKDP8 ;No, try next line
TXON T4,F.DEV ;DEV generated yet?
$TEXT (CETBYT,<;^M^J;^T/DEVTXT/^M^J;^M^J DEV$DF ^T/DEVTXT/,2>)
EXT <DUPCST>
MOVE S1,CTLNUM## ;COMPUTE CSR ADDRESS
LSH S1,3
ADDI S1,160540
MOVEM S1,DMXCSR##
MOVE S1,CTLNUM## ;COMPUTE VECTOR ADDRESS
LSH S1,3
ADDI S1,540
MOVEM S1,DMXINT##
$TEXT (CETBYT,< CTL$DF ^O/CTLNUM/,^O/DMXCSR/,^O/DMXINT/,5>)
;
; Continued on next page
;
;
; Here to generate UNT$DFs for the KDP
;
SETZM UNTNUM##
FDKDP2: $CALL DEVUNT##
MOVE S1,I1 ;compute DUP11 register
LSH S1,3
ADDI S1,160300
MOVEM S1,DMXCSR##
MOVE S1,DUPRAT##(I1) ;Build parameter word
LSH S1,^D4 ;from baud rate
ADD S1,DUPRAT##(I1)
LSH S1,^D8
SKIPE DUPDUP##(I1)
TXO S1,1B35 ; HALF DUPLEX
MOVE LNTYP##(I1)
CAIN ^D0 ; DDCMP-POINT
MOVX S2,1B35+0B32
CAIN ^D1 ; DDCMP-CONTROL
MOVX S2,1B35+1B32
CAIN ^D2 ; DDCMP-TRIBUTARY
MOVX S2,1B35+3B32
CAIN ^D4 ; DDCMP-DMC
MOVX S2,1B35+0B32
CAIN ^D5 ; LAPB
MOVX S2,0B35
$TEXT (CETBYT,< UNT$DF ^O/UNTNUM/,^O/DMXCSR/,^O/S1/,^O/S2/^A>)
;
; Here for CIRCUIT COST
;
MOVE LNTYP##(I1)
CAIE ^D5
$TEXT (CETBYT,<,^O/DUPCST(I1)/^A>)
$TEXT (CETBYT,<>)
AOS UNTNUM##
SOJG T2,FDKDP2
FDKDP8: AOS CTLNUM## ;On to next controller
SOJG T1,FDKDP1
FD.END:
;
; CONTINUED ON NEXT PAGE
;
;
; for DN200s only, include standard RSX-driver TT
;
MOVE S1,NODTYP## ;if dn200,
CAIN S1,NDN200## ;then include TTDRV
$TEXT (CETBYT,<;^M^J; RSX-DRIVER^M^J;^M^J DRV$DF TT>)
;
;HERE TO DO NON-STANDARD RSX DRIVERS
;
SKIPGE RSDPTR## ;ANY NON-STANDARD RSX DRIVERS?
JRST FNRD.1 ;NO - CONTINUE
$TEXT (CETBYT,<;^M^J; Non-Standard RSX Drivers^M^J;>)
EXT <RSDNAM>
SETZ T3, ;YES - INITIALISE COUNT
FNRD.2: CAMLE T3,RSDPTR## ;DONE ALL DRIVERS?
JRST FNRD.1 ;YES
$TEXT (CETBYT,< DRV$DF ^T/RSDNAM(T3)/>)
AOJA T3,FNRD.2 ;BACK FOR NEXT
FNRD.1: ;HERE WHEN DONE ALL DRIVERS
;
;Continued on Next Page
;
;
; Now Output the TSK$DF lines
;
$TEXT (CETBYT,<;^M^J; RSX Tasks^M^J;>) ;PRINT THE TASK HEADER
MOVE S1,NODTYP## ;
SKIPLE NMLTYP##
JRST FRTA.1
TOPS10 <CAIE S1,NX25## ;
JRST FRTA.2
$TEXT (CETBYT,< TSK$DF XNM>)
JRST FRTA.1
FRTA.2: $TEXT (CETBYT,< TSK$DF NML>)>
TOPS20 < $TEXT (CETBYT,< TSK$DF NML>)>
FRTA.1: SKIPLE NMLTYP##
$TEXT (CETBYT,< TSK$DF NMS>)
CAIN S1,NDN200## ;if dn200, then include POSI 15JUL81
$TEXT (CETBYT,< TSK$DF POSI,3>)
;
; Continued on next page
;
;
;HERE TO OUTPUT NON-STANDARD RSX TASKS
;
SKIPGE RSTPTR## ;ANY NON-STANDARD TASKS?
JRST FNRT.1 ;NO - SKIP THIS
$TEXT (CETBYT,<;^M^J; Non-Standard RSX Tasks^M^J;>) ;PRINT HEADER
EXT <RSTNAM>
SETZ T3, ;YES - ZERO POINTER
FNRT.2: CAMLE T3,RSTPTR## ;FINISHED?
JRST FNRT.1 ;YES
$TEXT (CETBYT,< TSK$DF ^A>);NO - PUT IN MACRO CALL
LSH T3,1 ;TIMES 2
$TEXT (CETBYT,<^T/RSTNAM(T3)/^A>);PUT IN TASK NAME
LSH T3,-1 ;DIVIDE BY 2
SKIPL RSTUSE##(T3) ;AUTOMATIC START?
$TEXT (CETBYT,<,4^A>) ;YES - START AFTER 4 SECS
$TEXT (CETBYT,<>)
AOJA T3,FNRT.2 ;BACK FOR NEXT TASK
FNRT.1: ;HERE WHEN DONE ALL TASKS
;
;Continued on Next Page
;
;
; NOW DO THE END$DF MACRO
;
$TEXT (CETBYT,<;^M^J;^M^J END$DF^M^J;^M^J;[End of CETAB]^M^J;>)
$TEXT (CETBYT,< .END^M^J^M^J>)
;
; HERE TO CLOSE CETAB.MAC
;
MOVE S1,CETIFN
$CALL F%REL
JUMPF CLOSER
SETZM CETIFN
$TEXT ,< [OK]>
SUBTTL FINISH Command -- Generate NETPAR.MAC
; ============== -------------------
;
;
; Open NETPAR.MAC
;
TOPS20 <MOVE S1,[XWD 3,0]>
TOPS10 <MOVE S1,[XWD 5,0]>
MOVEM S1,NTPFD
MOVEI S1,NTPFD ;set FD address
MOVEM S1,NTPFOB ; in FOB
MOVEI S1,7 ;set byte-
MOVEM S1,NTPFOB+1 ; size too
MOVEI S1,2 ;length of FOB
MOVEI S2,NTPFOB ; and its address
$CALL F%OOPN ;open netpar.mac for output
JUMPF OPNER
MOVEM S1,NTPIFN ;save its IFN
SETOM S2 ; Flag for exact FD
$CALL F%FD ; Get it for printing
$TEXT ,<[Generating ^F/@S1/^A]>
;
; Continued on next page
;
;
; Here to write-out NETPAR file
;
$TEXT (NTPBYT,< .TITLE NETPAR>)
TOPS20< $TEXT (NTPBYT,< .SBTTL from ^W/IB##+IB.PRG/-20 on ^H/CDAT/>) >
TOPS10< $TEXT (NTPBYT,< .SBTTL from ^W/IB##+IB.PRG/-10 on ^H/CDAT/>) >
$TEXT (NTPBYT,<^I/IDENT/^M^J^T/CPYRGT/>)
$TEXT (NTPBYT,<;^M^J; [Beginning of NETPAR]^M^J;^M^J.enabl lc>)
$TEXT (NTPBYT,<;+^M^J; MCB Process data base prefix file NETPAR^M^J;->)
;
; Continued on next page
;
EXT <NTPLIX,NTPBLK>
$TEXT (NTPBYT,< CE.lix = ^D/NTPLIX/. ; CEX - Number of line indices>)
$TEXT (NTPBYT,< DL.blk = ^D/NTPBLK/. ; DL - Block Size>)
$TEXT (NTPBYT,<^T/RDBSDF/>) ;CEX Rec. Buffer Size
;
; Buffer Pool Macros - CE$buf
;
$TEXT (NTPBYT,<^M^J .macro CE$buf macro ; CEX - buffer pools>)
MOVEI T4,BUFLST ; Start with CE$buf pools.
CEB.1: SKIPN T3,0(T4) ; For each one
JRST CEB.3 ; defined,
$CALL 0(T3) ; get min/max.
JUMPF CEB.2 ; (if the pool is appropriate)
HLRZ T3,T3
CAIE T3,RDBLEN##
$TEXT (NTPBYT,< 'macro' ^D/(T3)/.,^D/S2/.^A>)
CAIN T3,RDBLEN##
$TEXT (NTPBYT,< 'macro' RDB.sz,^D/S2/.^A>)
CAME S2,S1
$TEXT (NTPBYT,<,^D/S1/.^A>)
$TEXT (NTPBYT,<>)
CEB.2: AOJA T4,CEB.1
CEB.3: $TEXT (NTPBYT,< .endm CE$buf>)
;
;CE$cbb macro
;
$TEXT (NTPBYT,<^M^J .macro CE$cbb macro ; CEX - CCB/buffer pools>)
MOVEI T4,CBBLST ; Now the CE$cbb pools.
CEB.4: SKIPN T3,0(T4) ; For each one
JRST CEB.6 ; defined,
$CALL 0(T3) ; get min/max.
JUMPF CEB.5 ; (if the pool is appropriate)
HLRZ T3,T3
CAIE T3,RDBLEN##
$TEXT (NTPBYT,< 'macro' ^D/(T3)/.,^D/S2/.^A>)
CAIN T3,RDBLEN##
$TEXT (NTPBYT,< 'macro' RDB.sz,^D/S2/.^A>)
CAME S2,S1
$TEXT (NTPBYT,<,^D/S1/.^A>)
$TEXT (NTPBYT,<>)
CEB.5: AOJA T4,CEB.4
CEB.6: $TEXT (NTPBYT,< .endm CE$cbb>)
;
;
EXT <NODNAM>
$TEXT (NTPBYT,<^M^J .macro CE$nod macro ; CEX - local node name>)
$TEXT (NTPBYT,< 'macro' ^T/LBRAK/^T/NODNAM/^T/RBRAK/>);PUT IN NODE NAME
$TEXT (NTPBYT,< .endm CE$nod^M^J>) ;PUT IN THE END OF THE
; MACRO CALL
;
; DRIVER PARAMETERS
;
$TEXT (NTPBYT,< ;^M^J ;Driver Parameters^M^J ;>)
EXT <DMCPXB>
$TEXT (NTPBYT,< DMC.mx = 8. ; DMC - Max # DMCs>)
$TEXT (NTPBYT,< DMC.bf = RDB.sz ; DMC - DMC transmit buffer size>)
$TEXT (NTPBYT,< DMC.xb = ^D/DMCPXB/. ; DMC - DMC transmit buffers>)
$TEXT (NTPBYT,< DTE.mx = 4. ; DTE - Max # DTEs>)
$TEXT (NTPBYT,< DTE.bf = RDB.sz ; DTE - DTE transmit buffer size>)
$TEXT (NTPBYT,< KMC.mx = 3. ; KDP - Max # KMCs>)
$TEXT (NTPBYT,< DUP.mx = 12. ; KDP - Max # DUPs>)
$TEXT (NTPBYT,< KDP.mx = 4. ; KDP - Max # DUPs per KMC>)
$TEXT (NTPBYT,< ; hard limit of 16.>)
$TEXT (NTPBYT,< KDP.sg = 7. ; KDP - KDP transmit segment limit^M^J>)
;Continued on Next Page
;
;
;Phase II and III block sizes - added 3JUN81
;
EXT <NTPEBQ,NTPIBQ,NTPLBQ,NTPMXC,NTPMXH,NTPMXP>
$TEXT (NTPBYT,< XP.bl2 = DL.blk ; XPT - Phase II block size>)
$TEXT (NTPBYT,< XP.bl3 = DL.blk ; XPT - Phase III block size>)
$TEXT (NTPBYT,< XP.ebq = ^D/NTPEBQ/. ; XPT - ECL buffer quota (to NSP)>)
$TEXT (NTPBYT,< XP.ibq = ^D/NTPIBQ/. ; XPT - Input buffer quota (from NSP)>)
$TEXT (NTPBYT,< XP.lbq = ^D/NTPLBQ/. ; XPT - Line buffer quota>)
$TEXT (NTPBYT,< XP.mxc = ^D/NTPMXC/. ; XPT - Maximum total path cost>)
$TEXT (NTPBYT,< XP.mxh = ^D/NTPMXH/. ; XPT - Maximum network diameter (hops)>)
$TEXT (NTPBYT,< XP.mxl = 25. ; XPT - Maximum data-link cost>)
$TEXT (NTPBYT,< XP.mxp = ^D/NTPMXP/. ; XPT - Maximum Phase II logical links>)
;
;Continued on Next Page
;
EXT <NTPMXV,PLKNUM,NTPNN,NTPT1,NTPT2,NTPT3,NTPT4>
$TEXT (NTPBYT,< XP.mxv = ^D/NTPMXV/. ; XPT - Maximum visits (XP.mxh * 2)>)
$TEXT (NTPBYT,< XP.nln = ^D/PLKNUM/. ; XPT - Number of XPT lines>)
$TEXT (NTPBYT,< XP.nn = ^D/NTPNN/. ; XPT - Number of nodes in net>)
$TEXT (NTPBYT,< XP.t1 = ^D/NTPT1/. ; XPT - Maximum time between routing messages>)
$TEXT (NTPBYT,< XP.t2 = ^D/NTPT2/. ; XPT - Minimum time between routing messages>)
$TEXT (NTPBYT,< XP.t3 = ^D/NTPT3/. ; XPT - Time between hello messages>)
$TEXT (NTPBYT,< XP.t4 = ^D/NTPT4/. ; XPT - Node listener timeout>)
$TEXT (NTPBYT,< XP.uhq = CE.lix ; XPT - Update/Hello message quota^M^J>)
;
;Continued on Next Page
;
;
; HERE TO ISSUE THE XP$NID MACRO
;
EXT <NODID>
$TEXT (NTPBYT,<^T/NIDMAC/^A>) ;PRINT HEADER
$TEXT (NTPBYT,<^T/NODID/^A>) ;node id
$TEXT (NTPBYT,<^T/NIDEND/>) ;TRAILER
;
; Insert Maximum address table macro
;
$TEXT (NTPBYT,<
.MACRO XP$mxa macro>)
MOVEI S2,1
NTP.3: SKIPE S1,XPTMXA##-1(S2)
$TEXT (NTPBYT,< 'macro' ^D/S2/.,^D/S1/.>)
AOS S2
CAMG S2,NTPNN##
JRST NTP.3
$TEXT (NTPBYT,< .ENDM XP$mxa>)
;
; CONTINUED ON NEXT PAGE
;
;
; NOW DO THE PASSWORD MACROS
;
EXT <RCVPSW,XMTPSW>
$TEXT (NTPBYT,<^T/RCVMAC/^A>) ;print header
$TEXT (NTPBYT,<^T/RCVPSW/^A>) ;receive password
$TEXT (NTPBYT,<^T/RCVEND/^A>) ;print header
$TEXT (NTPBYT,<^T/XMTPSW/^A>) ;transmit password
$TEXT (NTPBYT,<^T/NIDEND/^M^J>) ;reuse this trailer
;
; CONTINUED ON NEXT PAGE
;
; NSP DEFINITIONS
;
EXT <NTPACT,NTPBUF,NTPDLY,NTPRET,NTPSLF>
$TEXT (NTPBYT,< NS.act = ^D/NTPACT/. ; NSP - Inactivity timer value>)
$TEXT (NTPBYT,< NS.buf = ^D/NTPBUF/. ; NSP - Minimum SC receive buffer size>)
$TEXT (NTPBYT,< NS.dly = ^D/NTPDLY/. ; NSP - NSP delay factor>)
$TEXT (NTPBYT,< NS.ret = ^D/NTPRET/. ; NSP - Retransmission threshold>)
$TEXT (NTPBYT,< NS.slf = ^D/NTPSLF/. ; NSP - Local node address>)
;
;Continued on Next Page
;
EXT <NTPTPT,NTPTRS,NTPWGT>
$TEXT (NTPBYT,< NS.tpt = ^D/NTPTPT/. ; NSP - Total number of ports supported>)
$TEXT (NTPBYT,<^T/TOTNDS/^A>) ;this used to include l and r brackets
$TEXT (NTPBYT,< NS.trs = ^D/NTPTRS/. ; NSP - Total number of reserved ports>)
$TEXT (NTPBYT,< NS.wgt = ^D/NTPWGT/. ; NSP - Delay Weight^M^J>)
;
; X25-Protocol Line Pararmeters
;
MOVE S1,NODTYP##
CAIE S1,NX25## ;IF NOT X25 THEN SKIP
JRST NX25C
$TEXT (NTPBYT,< ;^M^J ;X25 Line Definitions^M^J ;>)
EXT <XTPBLK,XTPWS,XTPIT1,XTPIRC>
$TEXT (NTPBYT,< FL.blk = RDB.sz ; MAX Block Size >)
$TEXT (NTPBYT,< FL.ws = ^D/XTPWS/. ; MAX Window Size >)
$TEXT (NTPBYT,< FL.it1 = ^D/XTPIT1/. ; Retransmit Timer >)
$TEXT (NTPBYT,< FL.irc = ^D/XTPIRC/. ; MAX Retransmit count >)
$TEXT (NTPBYT,< ;^M^J ;X25 Protocol Definitions^M^J ;>)
EXT <XTPDPS,XTPDWS,XTPMPS,XTPMWS,XTPTCA,XTPTCL>
EXT <XTPTRE,XTPTRS,XTPRCL,XTPRRE,XTPRRS,XTPLCN,XTPUGS>
$TEXT (NTPBYT,< PL.dps = ^D/XTPDPS/. ; Default Data Size >)
$TEXT (NTPBYT,< PL.dws = ^D/XTPDWS/. ; Default Window Size >)
$TEXT (NTPBYT,< PL.mps = ^D/XTPMPS/. ; MAX Packet Size >)
$TEXT (NTPBYT,< PL.mws = ^D/XTPMWS/. ; MAX Window Size >)
$TEXT (NTPBYT,< PL.tca = ^D/XTPTCA/. ; Call Timer >)
$TEXT (NTPBYT,< PL.tcl = ^D/XTPTCL/. ; Clear Timer >)
$TEXT (NTPBYT,< PL.tre = ^D/XTPTRE/. ; Reset Request Timer >)
$TEXT (NTPBYT,< PL.trs = ^D/XTPTRS/. ; Restart Request Timer >)
$TEXT (NTPBYT,< PL.rcl = ^D/XTPRCL/. ; MAX Clears >)
$TEXT (NTPBYT,< PL.rre = ^D/XTPRRE/. ; MAX Resets >)
$TEXT (NTPBYT,< PL.rrs = ^D/XTPRRS/. ; MAX Restarts >)
$TEXT (NTPBYT,< PL.lcn = ^D/XTPLCN/. ; MAX Channels >)
$TEXT (NTPBYT,< PL.ugs = ^D/XTPUGS/. ; MAX Groups >)
;
; Gateway Module Parameters
;
$TEXT (NTPBYT,< ;^M^J ;X25 Gateway Definitions^M^J ;>)
EXT <XTPDST,XTDCKT>
$TEXT (NTPBYT,< GA.dst = ^D/XTPDST/. ; MAX Destinations >)
$TEXT (NTPBYT,< GA.ckt = ^D/XTDCKT/. ; MAX Circuits >)
;
; Network Name
;
$TEXT (NTPBYT,< ;^M^J ;X25 Network Name Macro ^M^J ;>)
EXT <NETNAM>
$TEXT (NTPBYT,< .macro PL$NNM macro >)
$TEXT (NTPBYT,< 'macro' ^T/NETNAM/ >)
$TEXT (NTPBYT,< .endm >)
;
; X25 PL$DTE MACRO DEF
;
$TEXT (NTPBYT,< ;^M^J ;PL$DTE Macro Definitions^M^J ;>)
$TEXT (NTPBYT,< .macro PL$DTE macro >)
EXT <DEVTXT,CTLNUM,UNTNUM,DTEADR,CHRAGL,CHRAGH>
SKIPG T1,KDPNUM##
JRST PLX5
$CALL DEVKDP##
PLX1: $CALL DEVCTL##
SKIPG T2,KDPLNM##(I1) ;ARE THERE ANY DUPS ON THIS LINE?
JRST PLX4 ;NO - SKIP THIS KDP
SETZM UNTNUM##
PLX2: $CALL DEVUNT##
SKIPE DTEADR##(I2) ;This DTE in use?
$TEXT NTPBYT,< 'macro' ^T/LBRAK/^T/DEVTXT/-^d/ctlnum/-^d/untnum/^T/RBRAK/,^t/dteadr(I2)/,^D/CHRAGL(I1)/.,^D/CHRAGH(I1)/.>
AOS UNTNUM##
SOJG T2,PLX2 ;BACK FOR NEXT DUP WITHIN KDP
PLX4: AOS CTLNUM##
SOJG T1,PLX1 ;BACK FOR NEXT KDP
PLX5: $TEXT (NTPBYT,< .endm >)
;
; Destination Parameters Macro
;
$TEXT (NTPBYT,< ;^M^J ;DST$DF Macro Definitions^M^J ;>)
EXT <DESNAM,DSNODE,DSOBJS,DSOBJN,DSUSER,DSPASS,DSACCT,DSGRUP>
EXT <DSNUM,DSSUBL,DSSUBH,DSMASK,DSVAL,DSPRIO>
$TEXT (NTPBYT,< .macro DST$DF macro >)
SETZB I1,I2
LDX: CAMN I1,@QUADST##+ECUR
JRST LDX1
$TEXT (NTPBYT,< 'macro' ^T/DESNAM(I2)/^A>)
SKIPE DSNODE(I2)
$TEXT (NTPBYT,<,^D/DSNODE(I2)/^A>)
SKIPN DSNODE(I2)
$TEXT (NTPBYT,<,^T/DSNODE+1(I2)/^A>)
$TEXT (NTPBYT,<,^T/DSOBJS(I2)/,^D/DSOBJN(I1)/.,^T/DSUSER(I2)/,^T/DSPASS(I2)/,^T/DSACCT(I2)/,^T/DSGRUP(I2)/,^T/DSNUM(I2)/,^D/DSSUBL(I1)/.,^D/DSSUBH(I1)/.,^A>)
PUSH P,T1
PUSH P,T2
PUSH P,T3
PUSH P,T4
MOVEI T3,"<"
$TEXT (NTPBYT,<^7/T3/^A>)
MOVE T1,[POINT 7,DSMASK(I2)]
SETZB T3,T4
CNT: ILDB T2,T1
SKIPE T2
AOJA T4,CNT
MOVE T3,T4
AOS T4
ASH T4,-1
MOVE T1,[POINT 7,DSMASK(I2)]
TXNE T3,1
JRST LDX.0
LDX0: ILDB T2,T1
JUMPE T2,LDX.3
CAIG T2,"9"
JRST LDX.1
SUBI T2,"A"
ADDI T2,^D10
SKIPA
LDX.1: SUBI T2,"0"
IMULI T2,^D16
LDX.0: ILDB T3,T1
JUMPE T3,LDX.3
CAIG T3,"9"
JRST LDX.2
SUBI T3,"A"
ADDI T3,^D10
SKIPA
LDX.2: SUBI T3,"0"
ADD T2,T3
MOVEI T3,","
$TEXT (NTPBYT,<^O/T2/^A>)
SOSLE T4
$TEXT (NTPBYT,<^7/T3/^A>)
JRST LDX0
LDX.3:
MOVEI T3,">"
$TEXT (NTPBYT,<^7/T3/,^A>)
MOVEI T3,"<"
$TEXT (NTPBYT,<^7/T3/^A>)
MOVE T1,[POINT 7,DSVAL(I2)]
SETZB T3,T4
CNT.0: ILDB T2,T1
SKIPE T2
AOJA T4,CNT.0
MOVE T3,T4
AOS T4
ASH T4,-1
MOVE T1,[POINT 7,DSVAL(I2)]
TXNE T3,1
JRST LDX.10
LDX10: ILDB T2,T1
JUMPE T2,LDX.13
CAIG T2,"9"
JRST LDX.11
SUBI T2,"A"
ADDI T2,^D10
SKIPA
LDX.11: SUBI T2,"0"
IMULI T2,^D16
LDX.10: ILDB T3,T1
JUMPE T3,LDX.13
CAIG T3,"9"
JRST LDX.12
SUBI T3,"A"
ADDI T3,^D10
SKIPA
LDX.12: SUBI T3,"0"
ADD T2,T3
MOVEI T3,","
$TEXT (NTPBYT,<^O/T2/^A>)
SOSLE T4
$TEXT (NTPBYT,<^7/T3/^A>)
JRST LDX10
LDX.13:
MOVEI T3,">"
$TEXT (NTPBYT,<^7/T3/^A>)
POP P,T4
POP P,T3
POP P,T2
POP P,T1
$TEXT (NTPBYT,<,^D/DSPRIO(I1)/.>)
ADD I2,QUADST##+EINC
AOJA I1,LDX
LDX1: $TEXT (NTPBYT,< .endm >)
; GROUP MACRO DEFINITIONS
;
$TEXT (NTPBYT,< ;^M^J ;GRP$DF Macro Definitions^M^J ;>)
EXT <GRPNAM,GRPTYP,GRPNUM,DTEADR>
$TEXT (NTPBYT,< .macro GRP$DF macro >)
SETZB I1,I2
LGX: CAMN I1,@QUAGRP##+ECUR
JRST LGX4
$TEXT (NTPBYT,<^M^J 'macro' ^T/GRPNAM(I2)/,^D/GRPTYP(I1)/^A>)
SETZB T1,T2
SETZM T3
LGX2: CAIN T1,NUMDUP##
JRST LGX1
SKIPN DTEADR(T2)
JRST LGX3
MOVE T4,T3
IMULI T4,NUMDUP##
ADD T4,I1
$TEXT (NTPBYT,<,^D/GRPNUM(T4)/^A>)
AOJ T3,
LGX3: ADDI T2,4
AOJA T1,LGX2
LGX1: ADD I2,QUAGRP##+EINC
AOJA I1,LGX
LGX4: $TEXT (NTPBYT,<^M^J .endm>)
;
; PVC MACRO DEFINITIONS
;
$TEXT (NTPBYT,< ;^M^J ;PVC$DF Macro Definitions^M^J ;>)
EXT <X25CIR,DTECIR,CIRCHP,MXDATP,MXWINP>
$TEXT (NTPBYT,< .macro PVC$DF macro >)
SETZB I1,I2
LCX: CAMN I1,@ENTCIR##+ECUR
JRST NX25B
$TEXT (NTPBYT,< 'macro' ^T/X25CIR(I2)/,^T/DTECIR(I2)/,^D/CIRCHP(I1)/.,^D/MXWINP(I1)/.,^D/MXDATP(I1)/.>)
ADD I2,ENTCIR##+EINC
AOJA I1,LCX
NX25B: $TEXT (NTPBYT,< .endm>)
NX25C:
;
; SESSION CONTROL DEFINITIONS
;
;Session Control parameters added 3JUN81
;
$TEXT (NTPBYT,< ;^M^J ;Session Control Parameters^M^J ;>)
EXT <NTPITM,NTPOTM,NTPOPN>
$TEXT (NTPBYT,< SC.nln = XP.nln ; SC - Number of lines>)
$TEXT (NTPBYT,< SC.nn = XP.nn ; SC - Number of nodes>)
$TEXT (NTPBYT,< SC.tpt = NS.tpt ; SC - Number of logical links>)
$TEXT (NTPBYT,< SC.itm = ^D/NTPITM/. ; SC - Incoming connect timer default>)
$TEXT (NTPBYT,< SC.otm = ^D/NTPOTM/. ; SC - Outgoing connect timer default>)
$TEXT (NTPBYT,< SC.opn = ^D/NTPOPN/. ; SC - Number of OPEN ports to keep>)
;
;OUTPUT THE SC$NMT, SC$OBJ, AND SC$PRO MACROS
;
$TEXT (NTPBYT,<
;mapping from node number to node name
.macro SC$NMT MACRO
.endm SC$NMT>)
EXT <NTPNCK,NTPNLN>
MOVE S1,NODTYP##
CAIN S1,NDN200## ;dn200?
$TEXT (NTPBYT,<^T/OBJHD2/^A>) ;yes - use alternate text
CAIE S1,NDN200## ;dn200?
$TEXT (NTPBYT,<^T/OBJHDR/^A>) ;no - used to incl l and r brackets
$TEXT (NTPBYT,<^M^J NM.nck = ^D/NTPNCK/. ; NMX - Number of NMX Circuits>)
$TEXT (NTPBYT,< NM.nln = ^D/NTPNLN/. ; NMX - Number of NMX Lines>)
$TEXT (NTPBYT,< NM.nmo = 2. ; NMX - Number of NMX Modules>)
$TEXT (NTPBYT,< NM.nev = 6. ; NMX - Maximum event queue length>)
;
; Put in event filter settings
;
$TEXT (NTPBYT,<^M^J .macro NM$flt macro ; NMX - filter data base>)
MOVEI T4,7
SETZ I1,
FIN.1: SKIPN T1,GBLFLT##(I1) ; Get next class mask
JRST FIN.6 ; (if any are on).
$TEXT (NTPBYT,< 'macro' ^D/I1/.,^T/LBRAK/^A>)
SETZB T2,T3
FIN.2: HRRZ S1,T3 ; Find next bit on
LSHC T1,-1 ; by shifting it from T1
SKIPL T2 ; to T2.
AOJA T3,FIN.2
FIN.3: HRRZ S2,T3 ; Find next bit off
LSHC T1,-1 ; by shifting it from T1
SKIPG T2 ; to T2.
AOJA T3,FIN.3
FIN.5: TXOE T3,1000000
$TEXT (NTPBYT,<,^A>)
CAMN S1,S2 ; Single flag
$TEXT (NTPBYT,<^D/S1/.^A>)
CAME S1,S2 ; or range.
$TEXT (NTPBYT,<^T/LBRAK/^D/S1/.,^D/S2/.^T/RBRAK/^A>)
ADDI T3,2 ; Account for test bits
JUMPN T1,FIN.2 ; and go on if more.
$TEXT (NTPBYT,<^T/RBRAK/>)
FIN.6: AOS I1 ; On to next class.
SOJG T4,FIN.1
$TEXT (NTPBYT,< .endm NM$flt>)
;HERE TO WRITE NRM/NRD INFORMATION
;
MOVE NODTYP##
CAIE NDN200##
JRST FIN.7
EXT <NRLNUM>
$TEXT (NTPBYT,<^M^J NR.pip = ^D/NRLNUM/. ; NRM - Number of NRM Pipes>)
$TEXT (NTPBYT,< NR.flw = 4. ; NRM - Flow Count>);*EDIT 5
SKIPE LPTNUM##
$TEXT (NTPBYT,<^M^J LE.CSR = 177514^M^J LE.VEC = 200^M^J LE.PRI = 4>)
SKIPE CR1NUM##
$TEXT (NTPBYT,< CR.CSR = 177160^M^J CR.VEC = 230^M^J CR.PRI = 6>)
$TEXT (NTPBYT,<^M^J .macro NR$RES macro ; NRM>)
SKIPE PRVLDG##
SKIPE LPTNUM## ;DO WE HAVE A PRINTER?
$TEXT (NTPBYT,< 'macro' LP0,102,LP11>) ;yes - say so
SKIPE CR1NUM## ;DO WE HAVE A CARD READER?
$TEXT (NTPBYT,< 'macro' CR0,103,CR11>) ;yes - say so
$TEXT (NTPBYT,< .endm NR$RES>) ;print end of macro call
$TEXT (NTPBYT,<^M^J ND.flw = 10. ; NRD - Flow Count>)
$TEXT (NTPBYT,< ND.fld = 3. ; NRD - Low Water Flow Count>)
FIN.7:
;
;Continued on Next Page
;
;
; Write ending of NETPAR
;
$TEXT (NTPBYT,<^T/NTPTRL/>)
;
; Close NETPAR.MAC
;
MOVE S1,NTPIFN
$CALL F%REL
JUMPF CLOSER
SETZM NTPIFN ;No JFN assigned
$TEXT ,< [OK]>
;
; Continued on next page
;
SUBTTL FINISH Command -- Termination
; ============== -----------
;
;
; ALL DONE WITH FINISH COMMAND
;
; Ensure that a SAVE Command has been done, if not issue warning message.
;
WDONE: SKIPE SAVDON## ;0 if SAVE command has been done
$TEXT ,<%Have you issued a SAVE command for this configuration?>
$RETT
CLOSER: $TEXT ,<False returned by F%REL for cetab or netpar.>
$HALT
;
TOTNDS: ASCIZ / .if le,<NS.tpt-XP.nn>
NS.nod = NS.tpt ; NSP - Total number of nodes supported
.iff
NS.nod = XP.nn ; NSP - Total number of nodes supported
.endc
/
TOTNLN=<.-TOTNDS>*5
P2NM1: ASCIZ /
'macro' </
P2NM1L=<.-P2NM1>*5
P2NM2: ASCIZ />,/
LBRAK:: ASCIZ /</
RBRAK:: ASCIZ />/
NIDMAC: ASCIZ / .MACRO XP$nid macro
'macro' </
NIDEND: ASCIZ />
.ENDM/
RCVMAC: ASCIZ /
.MACRO XP$rcv macro
'macro' </
RCVMLN=<.-RCVMAC>*5
RCVEND: ASCIZ />
.ENDM
.MACRO XP$xmt macro
'macro' </
RCVELN=<.-RCVEND>*5
;
;SC$OBJ AND SC$PRO HEADER
;
OBJHDR: ASCIZ\
;mapping for NSP obj name to RSX task name
.macro SC$OBJ MACRO
'macro' 2,<NURD..>
'macro' 7,<NRM...>
'macro' 19.,<NMLMCB>
'macro' 25.,<NMLMCB>
'macro' 31.,<X25GAT>
'macro' 65.,<TOP...>
'macro' 63.,<DTR...>
'macro' 0,<SCX...>
.endm SC$OBJ
;mapping for RSX task name to MCB process name
.macro SC$PRO macro
'macro' <DNDDT.>,<NDT>
'macro' <TOP...>,<TOP>
'macro' <NRM...>,<NRM>
'macro' <NURD..>,<NRD>
'macro' <DTR...>,<DTR>
'macro' <X25GAT>,<GAT>
.endm SC$PRO
\
OBJHD2: ASCIZ\
;mapping for NSP obj name to RSX task name
.macro SC$OBJ MACRO
'macro' 2,<NURD..>
'macro' 7,<NRM...>
'macro' 19.,<NMLMCB>
'macro' 25.,<NMLMCB>
'macro' 65.,<TOP...>
'macro' 39.,<POSI..>
'macro' 63.,<DTR...>
'macro' 0,<SCX...>
.endm SC$OBJ
;mapping for RSX task name to MCB process name
.macro SC$PRO macro
'macro' <DNDDT.>,<NDT>
'macro' <NRM...>,<NRM>
'macro' <NURD..>,<NRD>
'macro' <DTR...>,<DTR>
.endm SC$PRO
\
;
RDBSDF: ASCIZ/ RDB.sz = <DL.blk+6.+1>&<-2> ; CEX - Receive Buffer Size/
;
;NETPAR TRAILER
;
NTPTRL: ASCIZ /
;
; [End of NETPAR]
;
/
;
;
; INCLUDE NONSTD MCB PROCESS
;
MCBNAM::BLOCK 2 ;for holding mcb process name/also for ph-II node name
MCBUSE::BLOCK 1 ; " " . . . use (llc yes=0, no=-1)/also ph-II node number
;
;ROUTINE TO GET NODE NAME IN S1,S2
; CALL WITH S1 = string address
;
GETNOD::$SAVE <P1,P2>
TXZ TF,F.ALPH ;NO ALPHA CHARACTER SEEN
SETZB P1,P2 ;CLEAR BOTH INITIALLY
MOVE T1,[POINT 7,P1] ;WHERE TO PLACE CHARS
MOVEI T2,6 ;MAX NUMBER OF CHARS
MOVE T3,[POINT 7,(S1)] ;WHERE TO LOAD CHARS FROM
GETND1: ILDB T4,T3 ;GET NEXT CHAR
JUMPE T4,GETND2 ;SPACE-FILL ON NUL
TRNE T4,100 ;MAKE UPPER-CASE
TRZ T4,40 ;IF NECESSARY
caige t4,"0" ;if chr not 0-9, a-z, or A-Z,
jrst badchr ; illegal
caig t4,"9"
jrst gn1
caig t4,"@"
jrst badchr
caige t4,"["
jrst gn1
caig t4,"`"
jrst badchr
caige t4,"{"
jrst badchr
gn1: CAIL T4,"A" ;ALPHA CHAR?
CAILE T4,"Z" ;WELL?
CAIA ;NO - DO NOTHING
TXO TF,F.ALPH ;YES - SET FLAG
IDPB T4,T1 ;STORE THE CHAR
SOJG T2,GETND1 ;BACK FOR NEXT CHAR
GETND2: SETZ T4, ;set null char & use it for flag check
CAME T4,NAMFLG## ;if flag=0, pad w/nulls[S.T. 28-JAN-81]
MOVEI T4," " ;SET UP TO SPACE FILL
SOJL T2,GETND3 ;RETURN WHEN DONE
IDPB T4,T1 ;STORE A SPACE
JRST GETND2 ;BACK FOR NEXT
GETND3: MOVE S1,P1 ;return char in S1
MOVE S2,P2 ; and S2
TXNE TF,F.ALPH ;ALPHA CHARACTER SEEN?
$RETT ;YES - TRUE RETURN
seto s1
$RETF ;NO - FALSE RETURN
badchr: $text ,<?Illegal character in node name>
setz s1
$retf
;
EXT <VERSION>
IDENT: ITEXT (< .IDENT /X^D2R0/VERSION,VI%MAJ/^D/VERSION,VI%MIN/^D2R0/VERSION,VI%EDT//>)
CPYRGT: ASCIZ \;
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1982,1983,1985,1986.
;ALL RIGHTS RESERVED.
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSION
;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES THEREOF
;MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. NO
;TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
;SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
;\
CDAT: EXP -1
TOPS20 <
CETFD: block 1
ASCIZ /CETAB.MAC/ ;file
NTPFD: block 1
ASCIZ /NETPAR.MAC/ ; descriptors
PACFD: block 1
ASCIZ /NMLACC.MAC/ ;
>
TOPS10 <
CETFD: EXP <NTPFD-CETFD> ; .FDLEN - LENGTH WORD
SIXBIT /DSK/ ; .FDSTR - STRUCTURE CONTAINING THE FILE
SIXBIT /CETAB/ ; .FDNAM - FILE NAME
SIXBIT /MAC/ ; .FDEXT - FILE EXTENSION
EXP 0 ; .FDPPN - OWNER OF THE FILE
NTPFD: EXP <CETIFN-NTPFD> ;
SIXBIT /DSK/ ;
SIXBIT /NETPAR/ ;
SIXBIT /MAC/ ;
EXP 0
PACFD: EXP <CETIFN-PACFD> ;
SIXBIT /DSK/ ;
SIXBIT /NMLACC/ ;
SIXBIT /MAC/ ;
EXP 0
>
CETIFN: BLOCK 1 ; CETAB int. file #
CETFOB: BLOCK 2 ; and file output block
NTPIFN: BLOCK 1 ; NETPAR int. file #
NTPFOB: BLOCK 2 ; and file output block
PACIFN: BLOCK 1 ; NMLACC int. file #
PACFOB: BLOCK 2 ; and file output block
END