Trailing-Edge
-
PDP-10 Archives
-
BB-P363B-SM_1985
-
mcb/netgen/netcnf.mac
There are 2 other files named netcnf.mac in the archive. Click here to see a list.
TITLE NETCNF
; ======
;
; COPYRIGHT (c) 1980, 1981, 1982, 1985
; DIGITAL EQUIPMENT CORPORATION
;
; 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.
;
; module NETCNF, containing the save file sections for the
; NETGEN - Network configurator program
;
;
; SUMMARY OF EDIT HISTORY - FOR FULL DETAILS SEE MODULE NETGEN.MAC
;
; EDIT # DATE
; 4.1
; 2. 23Nov82
; 7. 06Jan85
;
SUBTTL Universal searches and version information
SEARCH NETMAC
INIGEN (NETCNF) ; Initialize GLXLIB assembly options
;
;********** INITIALIZE THE DEFAULTS
;
PRMLST: EXP DN100##
EXP DN500##,DN502##,DN510##,DN511##
EXP DN710##,DN721##,DN722##,DN723##
EXP DN910##,DN920##,DN922##,DN923##,DN924##,DN931##
EXP DNS0##,DNS6##,DNS7##,DNS8##,DNS9##
EXP DNS10##,DNS11##,DNS12##,DNS13##
EXP DNS1##,DNS2##,DNS3##,DNS4##,DNS5##
EXP DN502##,DN920##,DN931## ; For min/max adjust
EXP DN923##,DN924## ; For min/max adjust
EXP DKC906##,DKC907##
EXP DMS1##
EXP DPD1##
EXP DNX2##,DNX3##,DNX4##
EXP XKL121##,XKL130##,XKL131##,XKL132##
EXP XP1110##,XP1131##,XP1140##,XP1141##,XP1150##,XP1151##,XP1152##
EXP XP1153##,XP1154##,XP1160##,XP1161##,XP1162##,XP1163##
EXP XPS0##,XSS0##
EXP XKL130##,XP1140##,XP1150## ; For min/max adjust
EXP 0
NGINIT::SETOM SAVDON## ;A SAVE has not been done
SETZ S1,
SKIPE PDN200##
MOVEI S1,NDN200## ;DEFAULT NODE TYPE = DN200
SKIPE PX25##
MOVEI S1,NX25## ;DEFAULT NODE TYPE = X25
SKIPE PDN20##
MOVEI S1,NDN20## ;DEFAULT NODE TYPE = DN20
MOVEM S1,NODTYP##
SETOM NOTSTA## ;STATUS = DEFAULT
MOVEI S1,PRMLST
$CALL INIPRM
MOVEI S1,1 ;DEFAULT IS 1 NRM PIPES *edit 5
MOVEM S1,NRLNUM##
SETOM NRLSTA## ;SAY DEFAULT
MOVEI S2,^D50
MOVEM S2,BUFDIF##
LOAD S1,DMS2##,PRMINI
ADD S2,S1 ;DEFAULT IS 64 RDBS
MOVEM S2,RDBNUM##
SETOM RDBSTA##
;
; CONTINUED ON NEXT PAGE
;
;
; SET UP COMMUNICATIONS CONFIGURATION
;
SETZM KDPNUM## ;DEFAULT IS NO KDP11S
MOVSI I1,-NUMDUP## ;NO DUP11S EXIST
SETZ I2,
INI.1: SETOM DUPUSE##(I1)
SETZM DTEADR##(I2)
ADD I2,QUADTE##+EINC
AOBJN I1,INI.1 ;MARK IT SO.
SETOM KDPSTA##
MOVSI S1,-NUMKDP## ;NO DUP LINES FOR ANY KDPS
INI.3A: SETZM KDPLNM##(S1)
AOBJN S1,INI.3A
SETZM DMXNUM## ;DEFAULT IS NO DMC11S, DMR11S OR DMP11S
SETZM DMCNUM## ;DEFAULT IS NO DMC11S
SETOM DMCSTA##
MOVSI S1,-NUMDMC## ;NO DMC11S IN USE
INI.2: SETOM DMCUSE##(S1)
AOBJN S1,INI.2 ;MAKE IT SO
SETZM DMRNUM## ;DEFAULT IS NO DMR11S
SETOM DMRSTA##
MOVSI S1,-NUMDMR## ;NO DMR11S IN USE
SETOM DMRUSE##(S1)
AOBJN S1,.-1 ;MAKE IT SO
;
; CONTINUED ON NEXT PAGE
;
;
; INITIALIZE THE DEVICE CONFIGURATION FOR THE DN20.
;
SETZM LPTNUM## ;NO LP11S OR LP20S
SETOM LPTSTA##
MOVSI S1,-NUMLPT## ;SET ALL PRINTERS TO UNUSED
INI.10: SETOM LPTUSE##(S1)
AOBJN S1,INI.10
SETZM CR1NUM## ;NO CR11S
SETOM CR1STA##
MOVSI S1,-NUMCDR## ;SET ALL CR11S TO UNUSED
SETOM CR1USE##(S1)
AOBJN S1,.-1 ;DO THEM ALL
MOVEI S1,2 ;fudge = 2
MOVEM S1,NTPNCK## ; NMX - # NMX CIRCUITS
AOS NTPNCK## ; set orig to fudge factor +1
MOVEI S2,1 ;DTE20 NUMBER
MOVEM S2,DTENUM##
LOAD S1,DC900##,PRMINI
MOVEM S1,DTECST##
MOVEM S2,NTPNLN## ;DEFAULT NUMBER OF NMX LINES
MOVEM S2,PLKNUM## ;DEFAULT IS 1 PHYSICAL LINK (DTE)
MOVEM S2,NTPLIX## ; CEX - Number of line indices
SETOM NTDLIX## ;SAY DEFAULT
SETOM PLKSTA##
SETOM DTESTA##
;
;Continued on next page
;
MOVEI S1,^D2 ; NSP - NSP delay factor
MOVEM S1,NTPDLY## ; NSP - NSP delay factor
SETOM NTDDLY## ;SAY DEFAULT
SETOM CURPTN## ;INITIALIZE POINTER TO PHASE-II NODES
SETOM PTNSTA## ;SAY DEFAULT
SETOM PRCPTR## ;INITIALIZE MCB PROCESS POINTER
SETOM RSTPTR## ;INITIALIZE RSX TASK POINTER
SETZM NMLTYP## ;Include large NML
SETOM RSDPTR## ;INITIALIZE RSX DRIVER POINTER
SETOM PRCMDT## ;SAY NO DEBUGGER (MDT)
MOVE S2,[IOWD NUMNOD##,1]
INI.11: LOAD S1,DNS14##,PRMINI
MOVEM S1,@DNS14##+PRMPTR
AOBJN S2,INI.11
;
; Init X25 netpar parameters
;
SETZM NUMCIR## ;No X.25 circuits
SETZM NUMDES## ;No X.25 destinations
SETZM NCIR## ;DEFAULT
MOVEI ^B1111001111 ;Set events 0.0-3,6-9
MOVEM GBLFLT##+0
SETZM GBLFLT##+1 ;Clear events 1.0-31
MOVEI ^B11 ;Set events 2.0-1
MOVEM GBLFLT##+2
MOVEI ^B111 ;Set events 3.0-2
MOVEM GBLFLT##+3
MOVEI ^B11011111111111 ;Set events 4.0-10,12-13
MOVEM GBLFLT##+4
MOVEI ^B1111111000000 ;Set events 5.6-12
MOVEM GBLFLT##+5
MOVEI ^B11000 ;Set events 6.3-4
MOVEM GBLFLT##+6
$RETT ; END OF 1ST PART INITIALIZATION.
INIPRM: $SAVE <P1,P2> ; Initialize parameters from blocks.
MOVE P2,S1
INIPR1: SKIPN P1,0(P2) ; For each parameter block,
$RETT
MOVEM P1,PRMBLK##
LOAD S1,(P1),PRMINI ; Get the initial value
SKIPE PRMSTR(P1) ; and if there is a store routine
$CALL PRMSTR(P1) ; then initialize.
LOAD S1,(P1),PRMDFL ; If the is a default indicator
SKIPE S1 ; then
SETOM 0(S1) ; indicate defaulted.
AOJA P2,INIPR1 ; Do for all.
;
NGIN2:: MOVEI S1,4 ;*EDIT 5
MOVEM S1,FLOWCT## ;INIT VAL FOR FLOW COUNT = 4
SETOM FLOSTA## ;Show Status default
LOAD S1,DN931##,PRMINI ;SET DEFAULT DL BLOCK SIZE
MOVEM S1,NTPBLK## ; AND SAVE IT
SETOM NTDBLK## ;SAY DEFAULT
$CALL RDBCLC## ; CALCULATE DEFAULT RDB SIZE
MOVEM S1,RDBLEN## ; AND SAVE IT
SETOM RDSSTA## ; SAY DEFAULT
$RETT
;
;
; * * * NODE * * * * *
;
;*******NODE - top level command routine
;
NOD::
$CALL P$KEYW## ;get keyword value
JUMPF [$TEXT ,<?Error returned from P$KEYW>
$RETT]
JUMPE S1,NOD
MOVEM S1,NODTYP## ;STORE IT
SETZM NOTSTA## ;STATUS = "TYPED IN"
;
; ADJUST THE DEFAULTS BASED ON THE NEW NODE TYPE.
; ANY VALUE WHICH HAS BEEN SPECIFIED EXPLICITLY BY THE USER
; IS NOT ADJUSTED.
;
SKIPN DTESTA## ;DTE20 DEFAULT?
JRST NOT.6 ;NO, LEAVE IT ALONE.
SKIPL DTENUM## ;If DTE defined
$CALL DELXPT## ;then take away from transport.
SETZM DTENUM##
CAIE S1,NDN20## ;If DN20
JRST NOT.6 ;then
AOS DTENUM## ;set for DTE #1
$CALL ADDXPT## ;and transport line.
;
; FALL THROUGH TO NEXT PAGE
;
;
;INCLUDE/EXCLUDE DMC #0 (IF STILL DEFAULTED) BASED ON NODE TYPE
; (EDIT 5)
;
NOT.6: SKIPN DMCSTA## ;don't adjust if user has
JRST NOT.6A ; touched DMCs
CAIE S1,NDN200## ;
JRST NOT.61 ;
;CHANGING TO DN200
MOVE S2,DMXNUM## ;get # DMx11 devices already included
CAIL S2,NUMDMX## ;ok to add another?
JRST [ $TEXT ,<?Too Many DMx11 Devices - Can't Add The DN200's Default DMC>
JRST NOT.6A]
MOVEI S2,0 ;set the dmc #
SETZM DMCUSE##(S2) ; in use
LOAD T1,DC900##,PRMINI
MOVEM T1,DMCCST##(S2) ;Set default cost
LOAD T1,DL1111##,PRMINI
MOVEM T1,DMCDUP(S2) ;Set default cost
AOS DMXNUM## ;yes - add 1 to # DMx11 devices
AOS DMCNUM## ; and to # DMCs
$CALL ADDXPT## ;Give transport another line.
JRST NOT.6A
;
; CHANGING TO DN20
;
NOT.61: MOVEI S2,0 ;DMC involved is #0
SKIPE DMCUSE##(S2) ;
JRST NOT.6A ;should only happen when found too many
;DMx11 devices when changed to DN200
SETOM DMCUSE##(S2) ;set dmc#0 not in use
SOS DMCNUM## ;one less dmc11
SOS DMXNUM## ;one less dmx11 device
$CALL DELXPT## ;Take away from transport.
JRST NOT.6A ;this jump for good measure
;
; NOW CHANGE THE COMMUNICATIONS CONFIGURATION.
;
NOT.6A: MOVEI S2,^D64 ;Default for DN20
CAIN S1,NDN200## ;DN200?
MOVEI S2,^D30 ;Yes, User DN200 Default
SKIPE CCBSTA## ;Number of CCBs Defaulted ?
MOVEM S2,CCBNUM## ;Store new value
SKIPN RDBSTA## ;Number of RDBs Defaulted?
JRST NOT.8D ;No, Continue on
MOVEI S2,^D64 ;Default for DN20
CAIN S1,NDN200## ;DN200?
MOVEI S2,^D20 ;Yes, Use DN200 Defaults
MOVEM S2,RDBNUM## ;Store number of RDBs
MOVEI S2,^D8 ; for dn20, default = 8
CAIN S1,NDN200## ; dn200?
MOVEI S2,^D20 ; yes, use dn200 default = 20.
MOVEM S2,NTPIBQ## ; XPT - Input buffer quota (from NSP)
MOVEM S2,NTPEBQ## ; XPT - ECL buffer quota (to NSP)
NOT.8D: SKIPE PRVLDG##
SKIPGE NRLSTA## ;NRM PIPES DEFAULTED?
$CALL SETPIP## ;Set number of NRM pipes.
$RETT ;ALL DONE.
;
; * * * RESTORE * * * *
;
;
; Process the Restore command
;
RESTR::
$CALL P$IFILE## ;get the FD from the parse block
MOVEM S1,SRFOB ;put FD addr in FOB
MOVEI S1,^D36 ;
MOVEM S1,SRFOB+1 ;put byte size in FOB
MOVEI S1,2 ;length of FOB
MOVEI S2,SRFOB ;address of FOB
$CALL F%IOPN ;OPEN FILE FOR INPUT
JUMPF [$TEXT ,<?error opening restore file>
$RETT]
MOVEM S1,SRIFN ;save IFN
$CALL F%IBYT ;GET THE FIRST WORD
JUMPF [$TEXT ,<?Cannot read file after open ok>
JRST RES.3]
CAIE S2,SAVLNW## ;LENGTHS MATCH?
JRST [$TEXT ,<?Length Of Save File Differs From Expected Length - Cannot Restore This File>
JRST RES.3] ;DATA BASE MUST HAVE CHANGED
;
$CALL F%IBYT ;get next word
JUMPF [$TEXT ,<?Cannot read file after open ok>
JRST RES.3]
CAME S2,VERSION## ;DOES THE VERSION MATCH?
$TEXT ,<%Version Mis-Match - File Might Not Be Compatible>
;WARN HIM BUT CONTINUE
MOVE S1,SRIFN
$CALL F%REW ;rewind the file
MOVE S1,SRIFN
MOVEI T1,SAVLNW## ;use # of words as loop counter
MOVEI T2,DBBEG## ;start address of restore data
RES.2: $CALL F%IBYT ;get word (ie, 36-bit byte)
JUMPF [$TEXT ,<?Error Reading Restore File - Data Area Corrupted>
$CALL NGINIT ;Re-initialize
$CALL NGIN2 ;the data base
MOVE S1,VERSION## ;and set
MOVEM S1,FILVER## ;our version.
JRST RES.3]
MOVEM S2,@T2 ;put it away where it goes
AOJ T2,RES.4 ;incr to next dest
RES.4: SOJN T1,RES.2 ;loop
$TEXT ,<[Configuration Restored From: ^F/@SRFOB/]>
RES.3: MOVE S1,SRIFN
$CALL F%REL ;Close and release the file
JUMPF [$TEXT ,<?Error closing restore file>]
SETZM SRIFN ;Not in use
LOAD T1,FILVER##,VI%MAJ ; Get major version number,
LOAD T2,FILVER##,VI%MIN ; minor version number,
LOAD T3,FILVER##,VI%EDT ; and edit number.
CAIN T1,^D3 ; Changes during version 3:
$CALL [CAIGE T3,^D41
$CALL EDIT41 ; Updates in edit 3(51):
CAIGE T3,^D42
$CALL EDIT42 ; Updates in edit 3(52):
CAIGE T3,^D46
$CALL EDIT46 ; Updates in edit 3(56):
MOVE T4,DBLVL## ; The data base level comes into being
CAIN T3,^D46 ; during edit 3(56):
$CALL [CAIL T4,^D100
CAILE T4,^D120
MOVEI T4,^D100
MOVEM T4,DBLVL##
$RET]
$RET]
CAIN T4,^D100
$CALL [LOAD S1,DPD1##,PRMINI ; Initialize
MOVEM S1,DMCPXB## ; DMC transmit buffer allocation.
SETZM NMLTYP## ; NMLTYP = NML, not NMS.
AOS T4,DBLVL##
$RET]
CAIN T4,^D101
$CALL [MOVEI S2,NUMNOD##-1 ; For all nodes
RES.10: SETZM XPTMXA##(S2) ; purge the fence.
SOJGE S2,RES.10
AOS T4,DBLVL##
$RET]
CAIN T4,^D102
$CALL [LOAD S1,DL1112##,PRMINI ; Set DDCMP-DMC
MOVSI S2,-NUMDUP## ; for
RES.11: MOVEM S1,LNTYP##(S2) ; all line protocol types.
AOBJN S2,RES.11
SETZM NUMCIR## ; No X.25 circuits
SETZM NUMDES## ; No X.25 destinations
SETZM NCIR## ; No circuit high-water mark.
MOVEI S1,RES.12 ; Initialize all X.25 parameters.
$CALL INIPRM
AOS T4,DBLVL##
$RET
RES.12: EXP DNX2##,DNX3##,DNX4##
EXP XKL121##,XKL130##,XKL131##,XKL132##,XP1110##
EXP XP1131##,XP1140##,XP1141##,XP1150##,XP1151##,XP1152##
EXP XP1153##,XP1154##,XP1160##,XP1161##,XP1162##,XP1163##
EXP XKL130##,XP1140##,XP1150## ; For min/max adjust
EXP 0]
CAIN T4,^D103
$CALL [;
; Add filter data base.
;
MOVEI ^B1111001111 ;Set events 0.0-3,6-9
MOVEM GBLFLT##+0
SETZM GBLFLT##+1 ;Clear events 1.0-31
MOVEI ^B11 ;Set events 2.0-1
MOVEM GBLFLT##+2
MOVEI ^B111 ;Set events 3.0-2
MOVEM GBLFLT##+3
MOVEI ^B11011111111111 ;Set events 4.0-10,12-13
MOVEM GBLFLT##+4
MOVEI ^B1111111000000 ;Set events 5.6-12
MOVEM GBLFLT##+5
MOVEI ^B11000 ;Set events 6.3-4
MOVEM GBLFLT##+6
;
; Add duplex indicator for KDP lines.
;
; Set DTEADR corresponding to non-LAPB lines to zero
; in order to eliminate DTE qualifier list access
; dependency. A X25-PROTOCOL DTE is now active when
; DTEADR is non-zero.
;
LOAD S1,DL1111##,PRMINI ; Default duplex is FULL
MOVSI I1,-NUMDUP## ; Set for all included DUPs
SETZ I2,
RES.13: SKIPL DUPUSE##(I1)
MOVEM S1,DUPDUP##(I1)
MOVE LNTYP##(I1) ; If line protocol
CAIE ^D5 ; is not LAPB
SETZM DTEADR##(I2) ; then no associated DTE.
ADD I2,QUADTE##+EINC
AOBJN I1,RES.13
;
; Initialize forgotten X.25 variables
;
MOVEI S1,RES.14
$CALL INIPRM
AOS T4,DBLVL##
$RET
RES.14: EXP XPS0##,XSS0##
EXP 0]
$RETT
;
; Data base changes made during 2(51)
;
EDIT41: SETOM CURPTN## ; INITIALIZE POINTER TO PHASE-II NODES
SETOM PTNSTA## ; SAY DEFAULT
SETOM PRCPTR## ; INITIALIZE MCB PROCESS POINTER
SETOM RSTPTR## ; INITIALIZE RSX TASK POINTER
SETOM RSDPTR## ; INITIALIZE RSX DRIVER POINTER
SETOM PRCMDT## ; SAY NO DEBUGGER (MDT)
LOAD S1,DC900##,PRMINI ; This is the default cost.
SKIPLE DTENUM##
MOVEM S1,DTECST## ; Set for the included DTE
MOVSI S2,-NUMDMC## ; Set for all included DMCs
EDT41A: SKIPL DMCUSE##(S2)
MOVEM S1,DMCCST##(S2)
AOBJN S2,EDT41A
MOVSI S2,-NUMDMR## ; Set for all included DMRs
EDT41B: SKIPL DMRUSE##(S2)
MOVEM S1,DMRCST##(S2)
AOBJN S2,EDT41B
MOVSI S2,-NUMDUP## ; Set for all included DUPs
EDT41C: SKIPL DUPUSE##(S2)
MOVEM S1,DUPCST##(S2)
AOBJN S2,EDT41C
$RET
;
; Data base changes made during 2(52)
;
EDIT42: SETZM BUFDIF## ; Clear buffer shrink count
$RET
;
; Data base changes made during 2(56)
;
EDIT46: MOVE S1,BUFDIF##
SKIPE RDBSTA## ; If RDBs defaulted,
SUBM S1,RDBNUM## ; then remove buffer shrink count.
SKIPN S1,BUFDIF## ; If defaulted,
MOVEI S1,^D50 ; buffer shrink count is now 50.
MOVEM S1,BUFDIF##
ADD S1,RDBNUM## ; Figure new default RDB count.
SKIPE RDBSTA##
MOVEM S1,RDBNUM##
LOAD S1,DN920##,PRMINI ; MAXIMUM ADDRESS is now 255
SKIPE NTDNN## ; if defaulted.
CAMN S1,NTPNN##
SKIPA
$CALL [$TEXT (,<
%MAXIMUM ADDRESS is being left as ^D/NTPNN/ (default is now ^D/S1/)>)
SETZM NTDNN##
$RET]
LOAD S1,DN931##,PRMINI ; BUFFER SIZE is now 576
SKIPE NTDBLK## ; if defaulted.
CAMN S1,NTPBLK##
SKIPA
$CALL [$TEXT (,<
%BUFFER SIZE is being left as ^D/NTPBLK/ (default is now ^D/S1/)>)
SETZM NTDBLK##
$RET]
MOVE S1,NTPSLF## ; Check consistency of
CAMLE S1,NTPNN## ; ADDRESS vs MAXIMUM ADDRESS
$CALL [$TEXT (,<
%The Node Number and MAXIMUM ADDRESS parameters are inconsistent
% MAXIMUM ADDRESS is being increased from ^D/NTPNN/ to ^D/S1/>)
MOVEM S1,NTPNN##
$RET]
MOVE S1,NTPNN## ; Check consistency of
IMULI S1,^D2
ADDI S1,^D5
CAMLE S1,NTPBLK## ; MAXIMUM ADDRESS vs BUFFER SIZE
$CALL [$TEXT (,<
%The MAXIMUM ADDRESS and BUFFER SIZE parameters are inconsistent
% BUFFER SIZE is being increased from ^D/NTPBLK/ to ^D/S1/>)
MOVEM S1,NTPBLK##
$RET]
LOAD S1,DN923##,PRMINI ; MAXIMUM HOPS is now 16
SKIPE NTDMXH## ; if defaulted.
MOVEM S1,NTPMXH##
LOAD S1,DN924##,PRMINI ; MAXIMUM VISITS is now 32
SKIPE NTDMXV## ; if defaulted.
MOVEM S1,NTPMXV##
MOVE S1,NTPMXH## ; Check consistency of
CAMLE S1,NTPMXV## ; MAXIMUM VISITS vs MAXIMUM HOPS
$CALL [$TEXT (,<
%The MAXIMUM VISITS and MAXIMUM HOPS parameters are inconsistent
% MAXIMUM VISITS is being set from ^D/NTPMXV/ to ^D/S1/>)
MOVEM S1,NTPMXV##
$RET]
LOAD S1,DL1111##,PRMINI ; Default duplex is FULL
MOVSI S2,-NUMDMC## ; Set for all included DMCs
EDT46A: SKIPL DMCUSE##(S2)
MOVEM S1,DMCDUP##(S2)
AOBJN S2,EDT46A
MOVSI S2,-NUMDMR## ; Set for all included DMRs
EDT46B: SKIPL DMRUSE##(S2)
MOVEM S1,DMRDUP##(S2)
AOBJN S2,EDT46B
LOAD S1,DPD1##,PRMINI
MOVEM S1,DMCPXB##
$RET
;
; SAVE Command - Prefill routine
;
SRFIL::SETZB T1,T2 ;clear to start
MOVE T3,[POINT 7,T1] ;dest byte ptr
MOVEI T4,6 ;max 6 char
MOVE S1,[POINT 7,NODNAM##] ;src byte ptr
SAVF.1: ILDB S2,S1 ;get char into s2
JUMPE S2,SAVF.2 ;done if null before 6th char
IDPB S2,T3 ;store char
SOJG T4,SAVF.1 ;loop
SAVF.2: SETZ S2 ;
MOVEI S2,"." ;put in
IDPB S2,T3 ; ".
MOVEI S2,"C" ;
IDPB S2,T3 ; C
MOVEI S2,"N" ;
IDPB S2,T3 ; N
MOVEI S2,"F" ;
IDPB S2,T3 ; F"
DMOVEM T1,SRNAM## ;store nodnam.CNF as default save file
$RETT ;and return
;
; * * * SAVE * * * * *
;
;
; Process SAVE command
;
SAVER:: $CALL SETDFL## ;Make sure defaults are set
MOVE S1,VERSION## ;and this file
MOVEM S1,FILVER## ;has our version.
$CALL P$OFIL## ;Get FD from parser
MOVEM S1,SRFOB ;Put its addr in FOB
MOVEI S1,7 ;Put byte-size
MOVEM S1,SRFOB+1 ; in FOB
MOVEI S1,2 ;Length of FOB
MOVEI S2,SRFOB ; and its address
$CALL F%OOPN ;Open save file for output
JUMPF [$TEXT ,<?Error opening save file>
$RETT]
MOVEM S1,SRIFN ;Save IFN
MOVE S2,[XWD <SAVLNW##*5>,DBBEG##] ;
$CALL F%OBUF
JUMPF [$TEXT ,<?Error writing save file>
JRST SAVR.1]
MOVE S1,SRIFN ;Get IFN
SETO S2, ; Flag for exact FD
$CALL F%FD ; Get it for printing
$TEXT ,<[Configuration Saved On: ^F/@S1/]>
MOVE S1,SRIFN ;Setup to close save file
SAVR.1: $CALL F%REL ;Close and release file
JUMPF [$TEXT ,<?Error closing save file>
SETZM SRIFN
$RETT]
SETZM SRIFN ;No longer in use
SETZM SAVDON## ;a SAVE has been done
$RETT
SRIFN: BLOCK 1 ;This location must not be in the saved
; area or nasty and generally bad things
; will happen
SRFOB: BLOCK 2 ;SAVE/RESTORE FOB
END