Trailing-Edge
-
PDP-10 Archives
-
T10_704_DECNET_3-31-88
-
10,7/netgen/ngndia.mac
There are 7 other files named ngndia.mac in the archive. Click here to see a list.
TITLE NGNDIA -- Perform configuration dialog
; ====== ----------------------------
;
SEARCH NGNMAC
INIGEN (NGNDIA) ; Initialize GLXLIB assembly options
IFNDEF FT.NET, FT.NET==-1
TOPS10 <IFNDEF FT.X25, <FT.X25==-1>>
TOPS20 <IFNDEF FT.X25, <FT.X25== 0>>
TOPS10 <IFE <FT.NET!FT.X25>, <FT.NET==-1
FT.X25==-1>>
TOPS20 <IFE <FT.NET!FT.X25>, <FT.NET==-1
FT.X25== 0>>
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1980,1981,1982,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.
;
; NGNDIA - Network configurator dialog module
;
;++
; FACILITY: Dialog for network configuration
;
; FUNCTIONAL DESCRIPTION:
;
; This module performs the NETGEN dialog for network
; configuration. Control transfers here via the START command.
; For each dialog prompt, control transfers back to the main
; command processing loop in NETGEN, and then resumes at the
; next dialog step in this module.
;
; This dialog sequence is intended to complete the minimum set
; of NETGEN commands required to configure a runnable node.
;
;--
SUBTTL Parser Argument Blocks for Dialog
; ---------------------------------
;
PAB.NT::$BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \Node type: \]
$SET PAR.TB,,PDB.NT
$SET PAR.SM,,<[
$CALL P$KEYW##
MOVEM S1,NODTYP##
$RETT]>
$EOB
PAB.NA: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTEXE##,DN500##)
$SET PAR.PM,,[ASCIZ \Node name: \]
$SET PAR.TB,,PDB.NA
$SET PAR.SM,,STRPRM
$EOB
PAB.NU: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTEXE##,DN502##)
$SET PAR.PM,,[ASCIZ \Node address: \]
$SET PAR.TB,,PDB.NU
$SET PAR.SM,,STRPRM
$EOB
BP1110: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXPR##,XP1110##)
$SET PAR.PM,,[ASCIZ \X.25 Network name: \]
$SET PAR.TB,,PP1110
$SET PAR.SM,,STRPRM
$EOB
PAB.TP: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTEXE##,DNS1##)
$SET PAR.PM,,[ASCIZ \Transmit password: \]
$SET PAR.TB,,PDB.TP
$SET PAR.SM,,STRPRM
$EOB
PAB.DT: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \What DTE port number is used for this DN20: \]
$SET PAR.TB,,PDB.DT
$SET PAR.SM,,GETDTE
$EOB
PAB.XT: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \What DTE port number is used for this node: \]
$SET PAR.TB,,PDB.XT
$SET PAR.SM,,GETDTE
$EOB
GETDTE: $CALL P$NUM##
MOVEM S1,UNTNUM##
$RETT
PAB.DM: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many DMC11 lines are on this DN20: \]
$SET PAR.TB,,PDB.DM
$SET PAR.SM,,GETCTL
$EOB
PAB.XM: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many DMC11 lines are on this node: \]
$SET PAR.TB,,PDB.XM
$SET PAR.SM,,GETCTL
$EOB
PAB.DR: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many DMR11 lines are on this DN20: \]
$SET PAR.TB,,PDB.DR
$SET PAR.SM,,GETCTL
$EOB
PAB.XR: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many DMR11 lines are on this node: \]
$SET PAR.TB,,PDB.XR
$SET PAR.SM,,GETCTL
$EOB
PAB.KD: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many KDPs are on this DN20: \]
$SET PAR.TB,,PDB.KD
$SET PAR.SM,,GETCTL
$EOB
PAB.XD: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \How many KDPs are on this node: \]
$SET PAR.TB,,PDB.XD
$SET PAR.SM,,GETCTL
$EOB
GETCTL: $CALL P$NUM## ; Get number
MOVEM S1,CTLCNT# ; Save it
$RETT
BCNAM: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTCIR##)
$SET PAR.PM,,[ASCIZ \X.25 Circuit name: \]
$SET PAR.TB,,PCNAM
$SET PAR.SM,,<[
$CALL GETCFM
$RETIT
$CALL GETENT##
$CALL FNDENT##
JUMPT [$DEFFAIL(Circuit is already defined)]
PJRST ADDENT##]>
$EOB
BC1120: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTCIR##,XC1120##)
$SET PAR.PM,,[ASCIZ \DTE address: \]
$SET PAR.TB,,PC1120
$SET PAR.SM,,STRPRM
$EOB
BC1121: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(ENTCIR##,XC1121##)
$SET PAR.PM,,[ASCIZ \Channel for this DTE: \]
$SET PAR.TB,,PC1121
$SET PAR.SM,,STRPRM
$EOB
BS300: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS300##,QUADST##)
$SET PAR.PM,,[ASCIZ \X.25 Destination name: \]
$SET PAR.TB,,PS300
$SET PAR.SM,,<[
$CALL GETCFM
$RETIT
$CALL GETQUA##
$CALL FNDQUA##
JUMPT [$DEFFAIL(Destination is already defined)]
PJRST ADDQUA##]>
$EOB
BS320: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS320##,QUADST##)
$SET PAR.PM,,[ASCIZ \Destination node: \]
$SET PAR.TB,,PS320
$SET PAR.SM,,<[
MOVEI S1,XS320## ; Get destination node
GETDN1: MOVEM S1,PRMBLK##
$CALL STRPRM
$CALL P$CFM## ; If line not terminated
$RETIT ; then
$CALL P$KEYW## ; get parameter name keyword
JRST GETDN1]> ; and collect parameter data.
$EOB
BS340: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS340##,QUADST##)
$SET PAR.PM,,[ASCIZ \Destination object: \]
$SET PAR.TB,,PS340
$SET PAR.SM,,STRPRM
$EOB
BS350: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS350##,QUADST##)
$SET PAR.PM,,[ASCIZ \Priority: \]
$SET PAR.TB,,PS350
$SET PAR.SM,,STRPRM
$EOB
BS351: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS351##,QUADST##)
$SET PAR.PM,,[ASCIZ \Call mask: \]
$SET PAR.TB,,PS351
$SET PAR.SM,,STRPRM
$EOB
BS352: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS352##,QUADST##)
$SET PAR.PM,,[ASCIZ \Call value: \]
$SET PAR.TB,,PS352
$SET PAR.SM,,STRPRM
$EOB
BS355: $BUILD PARSIZ
$SET PAR.PV,,PVLIST(MODXSR##,XS355##,QUADST##)
$SET PAR.PM,,[ASCIZ \Subaddresses: \]
$SET PAR.TB,,PS355
$SET PAR.SM,,STRPRM
$EOB
STRPRM: $CALL GETCFM ; Get parameter
$RETIT
MOVE T1,PRMBLK##
XCT PRMDEF(T1)
$RETIF
PJRST PRMSTR(T1)
GETCFM: $CALL P$CFM## ; Look for CR/LF
MOVEM TF,SAVCFM# ; and save result.
$RET
CHKCFM: MOVE TF,SAVCFM# ; Get result of CR/LF check
$RET
PAB.CI: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \Specify either DMC11 or DMR11: \]
$SET PAR.TB,,PDB.CI
$EOB
PAB.NN: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \Do you want to specify another node address? \]
$SET PAR.TB,,PDB.YN
$EOB
PAB.CR: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \Do you have a card reader on this DN200? \]
$SET PAR.TB,,PDB.YN
$EOB
PAB.LP: $BUILD PARSIZ
$SET PAR.PM,,[ASCIZ \Do you have a line printer on this DN200? \]
$SET PAR.TB,,PDB.YN
$EOB
PAB.SV: $BUILD PARSIZ
$SET PAR.SR,,<[ASCIZ \
\]> ; CR/LF sequence
$SET PAR.TB,,PDB.SV
$EOB
SUBTTL PDBs - Parser Database Elements
; -------------------------------
;
PDB.NT: $INIT (NTYPDB##) ; Node type
PDB.NA: $INIT (NNAPDB) ; Node name
NNAPDB: $NOISE (NNA.1,is)
NNA.1: $FIELD (NNA.2,<<Node Name, 1 to 6 alphanumeric characters>>,<$PREFILL(NNA.3),$ACTION(CHKNAM##)>)
NNA.2: $CRLF ($ERRTXT (Specify 1 to 6 alphanumerics for the node name) )
NNA.3: LOAD T1,DN500##,PRSMIN ;Set minimum
MOVEM T1,NUMMIN##
LOAD T1,DN500##,PRSMAX ;and maximum.
MOVEM T1,NUMMAX##
$RETT
PDB.NU: $INIT (NNUPDB) ; Node number
NNUPDB: $NOISE (NNU.1,is)
NNU.1: $NUMBER (CRLF,^D10,<<Node Address, XXXXX to YYYYY>>,<$PREFILL(NNU.2),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
NNU.2: LOAD T1,DN502##,PRSMIN ;Set minimum
MOVEM T1,NUMMIN##
LOAD T1,DN502##,PRSMAX ;and maximum.
MOVEM T1,NUMMAX##
$CALL NUMLIM##
$RETT
PDB.TP: $INIT (NTPPDB)
NTPPDB: $CTEXT (CRLF,<<Transmit password - 1 to 8 alphanumeric characters>>,<$DEFAULT(DECNET20)>)
PDB.DT: $INIT (IDTE.1##) ; DTE number
PDB.XT: $INIT (IDTE.1##) ; DTE number
PDB.DM: $INIT (PD.DMC) ; Number of DMC11 lines
PDB.XM: $INIT (PD.DMC) ; Number of DMC11 lines
PD.DMC: $NUMBER (PD.DCR,^D10,<<Number of DMC11s, X to X>>,<$PREFILL(PDDMC1),$DEFAULT(0),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
PDB.DR: $INIT (PD.DMR) ; Number of DMR11 lines
PDB.XR: $INIT (PD.DMR) ; Number of DMR11 lines
PD.DMR: $NUMBER (PD.DCR,^D10,<<Number of DMR11s, X to X>>,<$PREFILL(PDDMR1),$DEFAULT(0),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
PDB.KD: $INIT (PD.KDP) ; Number of KDPs
PDB.XD: $INIT (PD.KDP) ; Number of KDPs
PD.KDP: $NUMBER (PD.DCR,^D10,<<Number of KDP11s, X to X>>,<$PREFILL(PDKDP1),$DEFAULT(0),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
PD.DCR: $CRLF ($ERRTXT(Specify a decimal number))
PDDMC1: MOVEI T1,NUMDMC##
PJRST PDDV1
PDDMR1: MOVEI T1,NUMDMX##
SUB T1,DMXNUM##
SKIPN PRVLDG##
CAILE T1,NUMDMR##
MOVEI T1,NUMDMR##
PJRST PDDV1
PDKDP1: MOVEI T1,NUMKDP##
PDDV1: SETZM NUMMIN## ;Set minimum
MOVEM T1,NUMMAX## ;and maximum.
$CALL NUMLIM##
$RETT
PCNAM: $INIT (PCNAM1,$ACTION(ENTLIM))
TOPS20 <PCNAM1: $FIELD (CRLF##,<<Circuit Id>>,<$DEFAULT(),$FLAGS(CM%BRK),$BREAK(LITBRK##),$ALTERNATE(SKPENT),$ACTION(CHKFLD##)>)
>
TOPS10 <PCNAM1: $FIELD (CRLF##,<<Circuit Id>>,<$FLAGS(CM%BRK),$BREAK(LITBRK##),$ALTERNATE(SKPENT),$ACTION(CHKFLD##)>)
>
PC1120: $INIT (PC120A,$ACTION(PRMLIM))
PC120A: $FIELD (CRLF##,<<Decimal DTE Address>>,<$FLAGS(CM%BRK),$BREAK(DECBRK##),$ACTION(CHKFLD##)>)
PC1121: $INIT (NUMPDB##,$ACTION(PRMLIM))
PP1110: $INIT (PP110A,$ACTION(PRMLIM))
PP110A: $FIELD (CRLF##,<<Text, Network name>>,<$ACTION(CHKNAM##)>)
PS300: $INIT (PS300A,$ACTION(QUALIM))
TOPS20 <PS300A: $FIELD (CRLF##,<<Destination Name String>>,<$DEFAULT(),$ALTERNATE(SKPQUA),$ACTION(CHKNAM##)>)
>
TOPS10 <PS300A: $FIELD (CRLF##,<<Destination Name String>>,<$ALTERNATE(SKPQUA),$ACTION(CHKNAM##)>)
>
PS320: $INIT (PS320A,$ACTION(PRMLIM))
PS320A: $NUMBER (PS320C,^D10,<<Node number, XXXXX to YYYYY>>,<$PREFILL(NODLIM##),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
PS320B: $FIELD (PS320C,<<Node name, 1 to 6 alphanumeric characters>>,<$ACTION(CHKNAM##)>)
PS320C: $KEYDSP (PS320D,<$ALTERNATE(SKPPRM),$ACTION(PS320G)>)
PS320D: $STAB
DSPTAB (PS320E,XS332##,<Account>)
DSPTAB (PS320F,XS331##,<Password>)
DSPTAB (PS320E,XS330##,<User>)
$ETAB
PS320E: $CTEXT (PS320C,<<Text, 1 to 16 characters>>,<$FLAGS(CM%BRK),$BREAK(LITBRK##),$ACTION(CHKTXT##)>)
PS320F: $CTEXT (PS320C,<<Text, 1 to 8 characters>>,<$FLAGS(CM%BRK),$BREAK(LITBRK##),$ACTION(CHKTXT##)>)
PS320G: $CALL A$KEYW##
MOVEM S1,PRMBLK##
PJRST PRMLIM
PS340: $INIT (PS340A,$ACTION(PRMLIM))
PS340A: $NUMBER (CRLF##,^D10,<<Object number, XXXXX to YYYYY>>,<$PREFILL(OBJLIM##),$ALTERNATE(PS340B),$ACTION(CHKNUM##)>)
PS340B: $FIELD (CRLF##,<<Object name >>,<$PREFILL(OBJLIM##),$ACTION(CHKNAM##)>)
PS350: $INIT (PS350A,$ACTION(PRMLIM))
;******************************************************************************
;***** Note: default should not be hard-coded like this *****
;******************************************************************************
PS350A: $NUMBER (CRLF##,^D10,<<Number, XXXXX to YYYYY>>,<$PREFILL(NUMLIM),$DEFAULT(2),$ACTION(CHKNUM),$ERROR(NUMERR)>)
PS351: $INIT (PS351A,$ACTION(PRMLIM))
TOPS20 <PS351A: $FIELD (CRLF##,<Hexadecimal Mask>,<$FLAGS(CM%BRK),$BREAK(HEXBRK##),$DEFAULT(),$ALTERNATE(SKPPRM),$ACTION(CHKHEX##)>)
>
TOPS10 <PS351A: $FIELD (CRLF##,<Hexadecimal Mask>,<$FLAGS(CM%BRK),$BREAK(HEXBRK##),$ALTERNATE(SKPPRM),$ACTION(CHKHEX##)>)
>
PS352: $INIT (PS352A,$ACTION(PRMLIM))
PS352A: $FIELD (CRLF##,<Hexadecimal Data>,<$FLAGS(CM%BRK),$BREAK(HEXBRK##),$ACTION(CHKHEX##)>)
PS355: $INIT (PS355A,$ACTION(PRMLIM))
TOPS20 <PS355A: $DIGIT (PS355B,^D10,<<Number, XXXXX to YYYYY>>,<$PREFILL(NUMLIM##),$DEFAULT(),$ALTERNATE(SKPPRM),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
>
TOPS10 <PS355A: $DIGIT (PS355B,^D10,<<Number, XXXXX to YYYYY>>,<$PREFILL(NUMLIM##),$ALTERNATE(SKPPRM),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
>
PS355B: $TOKEN (PS355C,<->,<$ALTERNATE(CRLF##)>)
PS355C: $DIGIT (CRLF##,^D10,<<Number, XXXXX to YYYYY>>,<$PREFILL(NUMLIM##),$ACTION(CHKNUM##),$ERROR(NUMERR##)>)
SKPENT:
SKPQUA: $CRLF ;continue dialog with carriage return
SKPPRM: $CRLF ;leave undefined with carriage return
ENTLIM: MOVE S2,ENTBLK##
JRST PRMLIM+1
QUALIM: SKIPA S2,QUABLK##
PRMLIM: MOVE S2,PRMBLK##
LOAD S1,(S2),PRSMIN
MOVEM S1,NUMMIN
LOAD S1,(S2),PRSMAX
MOVEM S1,NUMMAX
$RETT
PDB.CI: $INIT (PD.CLI) ; DN200 comm line interface
PD.CLI: $KEYDSP (CIDSP,$ERRTXT(Specify either DMR11 or DMC11 -- not))
CIDSP: $STAB ; DN200 Comm Interface
DSPTAB (PD.CIS,1,<DMC11>)
DSPTAB (PD.CIR,0,<DMR11>) ; dispatch table
$ETAB
PD.CIS: $CRLF ($ACTION ( [SETOM FLG.RS#
$RETT] ))
PD.CIR: $CRLF ($ACTION ( [SETZM FLG.RS#
$RETT] ))
PDB.SV: $INIT (SAVPDB##) ; SAVE configuration
PDB.XX: $INIT (CRLF##) ; CRLF
PDB.YN: $INIT (PD.YNN) ; YES or NO (NO default)
PDB.YS: $INIT (PD.YNY) ; YES or NO (YES default)
;
; Additional PDBs for YES / NO commands
;
PD.YNN: $KEYDSP (YNDSP,<$DEFAULT(No),$ERRTXT(Specify either YES or NO -- not)>)
PD.YNY: $KEYDSP (YNDSP,<$DEFAULT(Yes),$ERRTXT(Specify either YES or NO -- not)>)
YNDSP: $STAB ; YES / NO dispatch table
DSPTAB (PD.NO,0,<No>)
DSPTAB (PD.YES,1,<Yes>)
$ETAB
PD.NO: $CRLF ($ACTION ( [SETZM FLG.YN#
$RETT] ))
PD.YES: $CRLF ($ACTION ( [SETOM FLG.YN#
$RETT] ))
SUBTTL DIALOG -- NETGEN dialog procedure
; ====== -----------------------
;
; Here to perform the NETGEN dialog sequence.
;
; Control transfers here via the entry for the START command
; in the command dispatch table (CMDVEC in NETGEN.MAC).
DIALOG::
IFN <FT.NET&FT.X25>,<
PUSH P,NODTYP## ; Save previous node type over init
>;end IFN FT.NET&FT.X25
$CALL NGINIT## ; Default initialization
$CALL NGIN2## ; And yet more initialization!
IFN <FT.NET&FT.X25>,<
POP P,NODTYP## ; Restore original node type
SETZM NOTSTA## ; Flag node type "typed in"
JRST D.NNAM ; Skip node type in START dialog
>;end IFN FT.NET&FT.X25
D.TYPE: ; Node type
SETZB S1,NODTYP## ; Check if there is a choice:
MOVEI S2,^D3 ; Three possibilities.
D.TYP1: SKIPE PRVLDG##(S2) ; If enabled
AOJA S1,[MOVEM S2,NODTYP## ; then count and store.
JRST .+1]
SOJG S2,D.TYP1 ; Do for 3, 2, and 1.
SOJE S1,D.NNAM ; If only one choice, it is found!
MOVEI S1,PAB.NT
$CALL NPARSE##
D.NNAM: MOVEI S1,PAB.NA ; Node name
$CALL NPARSE##
D.NNUM: MOVEI S1,PAB.NU ; Node number
$CALL NPARSE##
LOAD S1,@DN502##+PRMPTR
CAMG S1,NTPNN## ; Less than maximum address?
JRST D.PSWD ; If not,
EXT <NTPNN>
$TEXT ,<
?This node address is greater than ^D/NTPNN/, the maximum
number of nodes for a supported network configuration.
>
MOVEI S1,PAB.NN
$CALL NPARSE##
MOVE T1,FLG.YN# ; Pick up YES/NO flag
JUMPN T1,D.NNUM ; Yes, try again
MOVE S1,NTPSLF## ; Set new
MOVEI T2,DN920##
MOVEM T2,PRMBLK##
$CALL PRMSTR(T2) ; MAXIMUM ADDRESS
CALL BLKCLC## ; Calculate new min block size
CAIGE S1,^D576
MOVEI S1,^D576
MOVEI T2,DN931##
MOVEM T2,PRMBLK##
$CALL PRMSTR(T2) ; and set BUFFER SIZE
EXT <NTPNN,NTPBLK>
$TEXT ,<
%In order to support this node, the following parameters have been set:
MAXIMUM ADDRESS = ^D/NTPNN/
BUFFER SIZE = ^D/NTPBLK/>
LOAD S1,DN931##+PRMPTR
CAIG S1,^D576
CAIGE S1,^D290
$TEXT ,<%This system is not supported by DEC>
D.PSWD: $TEXT (,<>) ; Give CR LF
MOVE T1,NODTYP##
CAIN T1,NDN200## ; Is this a DN200?
PJRST D.200 ; Yes, Branch for DN200
PJRST D.20 ; No, Branch for DN20 or x25
SUBTTL DN20 specific dialog
; --------------------
;
D.20: ; Here to begin DN20 only stuff
D.XMTP: MOVEI S1,PAB.TP ; Transmit password
$CALL NPARSE## ;
SETZM FLG.CL# ; Indicate no comm lines yet
D.DTE: ; Here to specify DTE
$CALL DEVDTE##
MOVEI S1,PAB.DT
MOVE T1,NODTYP##
CAIN T1,NX25## ; Is this X25 ?
MOVEI S1,PAB.XT ; YES, X25
$CALL NPARSE##
SKIPN PRVLDG## ; If privledged,
JRST D.DTE2 ; then
MOVEI S1,IDTES1## ; ask for COST.
$CALL DPARSE
D.DTE2: $CALL ADDDTE##
D.DMC: ; Here to specify number of DMCs
$TEXT (,<>) ; Give CR LF
MOVEI S1,NUMDMX## ; Max number of DMx11 devices
$TEXT (,<The total number of DMC11s and DMR11s must not exceed ^D/S1/>)
MOVEI S1,PAB.DM
MOVE T1,NODTYP##
CAIN T1,NX25## ; Is this X25 ?
MOVEI S1,PAB.XM ; YES, X25
$CALL NPARSE##
SKIPN CTLCNT# ; Save it
JRST D.DMR
$CALL DEVDMC##
D.DMC1: SKIPN PRVLDG## ; If privledged,
JRST D.DMC2 ; then
MOVEI S1,IDMCS2## ; ask for duplex.
$CALL DPARSE##
D.DMC2: MOVEI S1,IDMCS1## ; Ask for cost.
$CALL DPARSE##
$CALL ADDDMC## ; Include next DMC
SETOM FLG.CL# ; Indicate comm line specified
AOS CTLNUM##
SOSE CTLCNT# ; Loop for all DMCs
JRST D.DMC1
D.DMR: ; Here to specify number of DMRs
MOVE S1,DMXNUM## ; Number of DMx11s specified
SKIPN PRVLDG##
CAIGE S1,NUMDMX## ; Max number of DMx11 devices
SKIPA
JRST D.KDP ; No more allowed
$TEXT (,<>) ; Give CR LF
MOVEI S1,PAB.DR
MOVE T1,NODTYP## ; Get node type
CAIN T1,NX25## ; Is this X25 ?
MOVEI S1,PAB.XR ; YES
$CALL NPARSE##
SKIPN CTLCNT# ; Save it
JRST D.KDP
$CALL DEVDMR##
D.DMR1: MOVEI S1,IDMRS2##
$CALL DPARSE##
MOVEI S1,IDMRS1##
$CALL DPARSE##
$CALL ADDDMR## ; Include next DMR
SETOM FLG.CL# ; Indicate comm line specified
AOS CTLNUM
SOSE CTLCNT# ; Loop for all DMRs
JRST D.DMR1
D.KDP: ; Here to specify number of KDPs
$TEXT (,<>) ; Give CR LF
MOVEI S1,PAB.KD
MOVE NODTYP##
CAIN NX25## ; X.25 node?
MOVEI S1,PAB.XD ; YES
$CALL NPARSE##
SKIPN CTLCNT# ; and skip KDPs
JRST D.KDP9 ; if none requested.
$CALL DEVKDP##
D.KDP1: MOVEI S1,IKDPS1## ; Number of DUP lines on KDP
$CALL NPARSE##
SETZM UNTNUM## ; Start on unit 0.
D.KDP2: $CALL DEVUNT##
LOAD S1,DL1111##,PRMINI ; Default duplex to FULL
MOVEM S1,DUPDUP##(I1)
LOAD S1,DL1112##,PRMINI ; Default line protocol to DDCMP-DMC
MOVEM S1,LNTYP##(I1)
MOVE NODTYP##
CAIE NX25##
JRST D.KDP3
MOVEI S1,IKDPXX## ; Prompt for line type
$CALL DPARSE
D.KDP3: MOVEI S1,IKDPS2## ; Maximum baud rate
$CALL DPARSE##
$CALL DEVUNT##
MOVE LNTYP##(I1)
CAIE ^D4
JRST D.KDP6
SKIPN PRVLDG##
JRST D.KDP4
MOVEI S1,IKDPSD## ; Duplex
$CALL DPARSE##
D.KDP4: MOVEI S1,IKDPS7## ; Cost
$CALL DPARSE##
JRST D.KDP8
D.KDP6: MOVEI MODXPR## ; Now to MODULE X25-PROTOCOL
MOVEM ENTBLK##
MOVEI QUADTE## ; for DTE qualifier.
MOVEM QUABLK##
MOVEI XP1100## ; DTE parameter.
MOVEM PRMBLK##
MOVEI S1,IKDPX2## ; KDP DTE Address prompt
$CALL DPARSE
MOVEI XP1130## ; CHANNELS parameter.
MOVEM PRMBLK##
MOVEI S1,IKDPX4## ; KDP DTE Channel range prompt
$CALL DPARSE
SETZM QUABLK## ; Back to
SETZM ENTBLK## ; devices.
D.KDP8: $CALL ADDKDP##
AOS S1,UNTNUM##
SETOM FLG.CL# ; Indicate comm line specified
$CALL DEVCTL##
CAMGE S1,KDPLNM##(I1) ; All DUP lines done?
JRST D.KDP2 ; No, loop for more DUP lines
AOS KDPNUM##
AOS CTLNUM##
SOSE CTLCNT# ; Loop for all KDPs
JRST D.KDP1
D.KDP9: SKIPN FLG.CL# ; If no comm line specified
JRST [$TEXT ,<?You have not specified any communications lines.>
JRST D.DMC]
SUBTTL X25 Circuit dialog
; ------------------
;
D.CKT: MOVE NODTYP##
CAIN NX25##
SKIPN PRVLDG##
JRST D.NET
$TEXT ,<>
D.CKT1: MOVE @ENTCIR##+ECUR
CAMN ENTCIR##+EMAX
JRST [ $TEXT ,<%No room for more circuits>
JRST D.NET]
MOVEI S1,BCNAM ; CIRCUIT
$CALL NPARSE##
$CALL CHKCFM ; If CR/LF given
JUMPT D.NET ; then quit.
MOVEI S1,BC1120 ; DTE
$CALL NPARSE##
MOVEI S1,BC1121 ; CHANNEL
$CALL NPARSE##
JRST D.CKT1
;
; X.25 Network name
;
D.NET: MOVE NODTYP##
CAIE NX25##
JRST D.DST
$TEXT ,<>
MOVEI S1,BP1110
$CALL NPARSE##
SUBTTL X25 Destination dialog
; ----------------------
;
D.DST: MOVE NODTYP##
CAIE NX25##
JRST D.FIN
$TEXT ,<>
D.DST1: MOVE @QUADST##+ECUR
CAMN QUADST##+EMAX
JRST [ $TEXT ,<%No room for more destinations>
JRST D.FIN]
CAMN XTPDST## ; Compare with current MAX DESTINATIONS
JRST [ $TEXT ,<%Exceeded maximum destinations so incrementing>
AOS XTPDST##
JRST D.DST1]
MOVEI S1,BS300 ; DESTINATION
$CALL NPARSE##
$CALL CHKCFM ; If CR/LF given
JUMPT D.FIN ; then quit.
MOVEI S1,BS320 ; NODE
$CALL NPARSE##
MOVEI S1,BS340 ; OBJECT
$CALL NPARSE##
MOVEI S1,BS350 ; PRIORITY
$CALL NPARSE##
MOVEI S1,BS351 ; CALL MASK
$CALL NPARSE##
$CALL CHKCFM ; If none given
JUMPT D.DST2 ; then skip
MOVEI S1,BS352 ; CALL VALUE
$CALL NPARSE##
D.DST2: MOVEI S1,BS355 ; SUBADDRESSES
$CALL NPARSE##
JRST D.DST1
SUBTTL DN200 specific dialog
; ---------------------
;
D.200: ; Here to begin DN200 only stuff
D.CDR: MOVEI S1,PAB.CR ; Here to specify CR on DN200
$CALL NPARSE##
MOVE T1,FLG.YN# ; Pick up YES/NO flag
JUMPE T1,D.LPT ; No, no card reader
$CALL CDRINC## ; Yes, include a line printer
D.LPT: $TEXT (,<>) ; Give CR LF
MOVEI S1,PAB.LP ; Here to specify LP on DN200
$CALL NPARSE##
MOVE T1,FLG.YN# ; Pick up YES/NO flag
JUMPE T1,D.CLI ; No, no line printer
$CALL INLINE## ; Yes, include a line printer
D.CLI: ; Here to specify communication
; line interface
$TEXT (,<
What is the communications line interface on the DN200?>)
MOVEI S1,PAB.CI
$CALL NPARSE##
MOVE T1,FLG.RS# ; Pick up DMR/DMC flag
JUMPN T1,D.FIN ; Branch for DMC (default)
; If DMR,
$CALL DEVDMC## ; Exclude DMC11 number 0
$CALL DELDMC##
$CALL DEVDMR## ; Include DMR11 number 0
LOAD S1,DC900##,PRMINI
MOVEM S1,DMRCST##+0
LOAD S1,DL1111##,PRMINI
MOVEM S1,DMRDUP##+0
$CALL ADDDMR##
SUBTTL Dialog termination
; ------------------
;
D.FIN: ; Here to terminate dialog
$TEXT (,<>) ; Give CR LF
MOVEI S1,PAB.SV ; Simulate a "SAVE" command
$CALL NPARSE##
$CALL SAVER## ; Save configuration
$CALL FINISH## ; FINISH configuration
IFE FT.NET, <$TEXT (,<
[Configuration complete]
Type SAVE and FINISH after any additional changes
Type EXIT to terminate X25GEN
>)>;end IFE FT.NET
IFN FT.NET, <$TEXT (,<
[Configuration complete]
Type SAVE and FINISH after any additional changes
Type EXIT to terminate NETGEN
>)>;end IFN FT.NET
$RETT ; Return to topmost command loop
END