Trailing-Edge
-
PDP-10 Archives
-
bb-d868b-bm_tops20_v3a_2020_dist
-
3a-sources/setspd.mac
There are 33 other files named setspd.mac in the archive. Click here to see a list.
;<3A.UTILITIES>SETSPD.MAC.21, 4-Aug-78 13:13:02, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.20, 4-Aug-78 13:11:23, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.19, 3-Aug-78 17:12:20, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.18, 28-Jul-78 15:33:15, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.17, 27-Jul-78 14:41:21, EDIT BY MILLER
;INCREMENT EDIT NUMBER
;<3A.UTILITIES>SETSPD.MAC.16, 26-Jul-78 15:00:29, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.15, 16-May-78 09:21:33, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.14, 16-May-78 09:19:58, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.13, 16-May-78 09:17:32, EDIT BY MILLER
;AND CHANGE VERSION TO 3A
;<3A.UTILITIES>SETSPD.MAC.12, 16-May-78 09:16:35, EDIT BY MILLER
;ADD MINOR VERSION TO CONFIG NAME
;<1MCLEAN>SETSPD.MAC.17, 4-May-78 18:31:02, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.16, 4-May-78 18:24:33, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.15, 4-May-78 17:37:31, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.14, 4-May-78 17:22:55, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.13, 4-May-78 17:22:03, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.12, 4-May-78 16:22:12, Edit by MCLEAN
;<1MCLEAN>SETSPD.MAC.11, 4-May-78 16:16:56, Edit by MCLEAN
;TCO 1880 ADD SLAVE TYPES TO MTALN JSYS
;<3A.UTILITIES>SETSPD.MAC.10, 7-Apr-78 00:41:18, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.9, 7-Apr-78 00:15:05, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.8, 7-Apr-78 00:13:21, Edit by MCLEAN
;<3A.UTILITIES>SETSPD.MAC.7, 7-Apr-78 00:07:24, Edit by MCLEAN
;ADD HSB (HALT STATUS BLOCK) FOR KS10
;<3A.UTILITIES>SETSPD.MAC.6, 28-Feb-78 15:45:42, EDIT BY MILLER
;FIX NODNAM TO CHECK FOR EOL
;<3A.UTILITIES>SETSPD.MAC.5, 24-Feb-78 09:54:01, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.4, 24-Feb-78 09:45:50, EDIT BY MILLER
;<3A.UTILITIES>SETSPD.MAC.3, 24-Feb-78 09:45:11, EDIT BY MILLER
;ADD NODE NUMBER TO NODE COMMAND
;<4.UTILITIES>SETSPD.MAC.2, 16-Dec-77 14:01:29, EDIT BY MILLER
;<4.UTILITIES>SETSPD.MAC.1, 16-Dec-77 13:56:02, EDIT BY MILLER
;TCO 1879. ADD NODE COMMAND
;<3-UTILITIES>SETSPD.MAC.16, 8-Nov-77 10:51:06, EDIT BY KIRSCHEN
;MORE COPYRIGHT UPDATING...
;<3-UTILITIES>SETSPD.MAC.15, 3-Nov-77 09:07:50, EDIT BY KIRSCHEN
;RECOVER IF BOUT TO ALIGN LPT FORMS FAILS
;<3-UTILITIES>SETSPD.MAC.14, 26-Oct-77 11:48:16, EDIT BY KIRSCHEN
;UPDATE COPYRIGHT FOR RELEASE 3
;<3-UTILITIES>SETSPD.MAC.13, 12-Oct-77 18:57:55, EDIT BY HURLEY
;ADDED THE COMMANDS TO ENABLE/DISABLE FULL LATENCY OPTIMIZATION
;<3-UTILITIES>SETSPD.MAC.12, 16-Aug-77 16:17:50, EDIT BY HURLEY
;<3-UTILITIES>SETSPD.MAC.11, 16-Aug-77 11:17:22, EDIT BY HURLEY
;ADD THE TERMINAL AUTO COMMAND
;<3-UTILITIES>SETSPD.MAC.10, 11-Aug-77 17:05:15, EDIT BY HURLEY
;MAKE SETSPD LOOKUP X-CONFIG WHERE X IS THE RELEASE NUMBER
;<3-UTILITIES>SETSPD.MAC.9, 11-Aug-77 09:21:45, EDIT BY HURLEY
;MAKE SETSPD LOOK ON SYSTEM: FOR CONFIG.CMD
;<3-UTILITIES>SETSPD.MAC.8, 3-Aug-77 00:05:43, EDIT BY CROSSLAND
;RESTORE HOST COMMAND
;<3-UTILITIES>SETSPD.MAC.7, 27-Jul-77 11:55:15, EDIT BY HURLEY
;<3-UTILITIES>SETSPD.MAC.6, 26-Jun-77 12:41:01, EDIT BY MILLER
;UNMAP DUMP PAGES AFTER ERROR
;<3-UTILITIES>SETSPD.MAC.5, 23-Jun-77 13:20:46, Edit by MACK
;TCO 1822 - DISABLE/ENABLE ACCOUNT VALIDATION
;<3-UTILITIES>SETSPD.MAC.4, 23-Jun-77 12:27:01, EDIT BY MILLER
;TCO 1686 AGGAIN. ADD ERJMP'S
;<3-UTILITIES>SETSPD.MAC.3, 23-Jun-77 11:35:38, EDIT BY KIRSCHEN
;TCO 1716 - ADD ENABLE/DISABLE DIRECTORY-PARAMETER-SETTING COMMANDS
; ALSO REMOVE STRUCTURE COMMAND, NO LONGER APPLICABLE
;<3-UTILITIES>SETSPD.MAC.2, 25-May-77 13:53:35, EDIT BY KIRSCHEN
;TCO 1807 - ADD NOBELL OPTION TO THE TERMINAL COMMAND (SEE ALSO TCO 1802)
;<3-UTILITIES>SETSPD.MAC.1, 17-Jan-77 11:55:09, Edit by LCAMPBELL
;TCO 1714 - Fix LODANY to type error message if LPINI fails.
;<2-UTILITIES>SETSPD.MAC.14, 27-Dec-76 17:07:56, EDIT BY HURLEY
;<2-UTILITIES>SETSPD.MAC.13, 22-Dec-76 13:42:19, EDIT BY HURLEY
;<2-UTILITIES>SETSPD.MAC.12, 22-Dec-76 10:17:55, EDIT BY KIRSCHEN
;<2-UTILITIES>SETSPD.MAC.11, 20-Dec-76 12:19:25, EDIT BY KIRSCHEN
;TCO 1686 - MAKE SETSPD COPY DUMPS GREATER THAN 256 K
;<2-UTILITIES>SETSPD.MAC.10, 23-Nov-76 10:31:18, Edit by MACK
;<2-UTILITIES>SETSPD.MAC.9, 19-Nov-76 09:33:17, Edit by MACK
;TCO 1666 - MORE TIMEZONE EDITS
;<2-UTILITIES>SETSPD.MAC.8, 18-Nov-76 20:26:22, EDIT BY MILLER
;DISABLE CACHE REFILL CODE
;<2-UTILITIES>SETSPD.MAC.7, 16-Nov-76 11:32:27, Edit by MACK
;TCO 1666 - ADDED FUNCTIONS TO SET TIME ZONE AND ARPANET SITE ADDRESS
;<2-UTILITIES>SETSPD.MAC.4, 4-Nov-76 15:08:10, EDIT BY HURLEY
;TCO 1604- ADD CODE TO RESET TTY NO MSG BITS IN F.E.
;<2-UTILITIES>SETSPD.MAC.3, 25-Oct-76 17:27:57, EDIT BY HURLEY
;TAKE OUT CALL TO QUEBLK DURING NORMAL RUNNING OF SETSPD
;<2-UTILITIES>SETSPD.MAC.2, 21-Oct-76 14:56:33, Edit by MACK
;TCO 1615 - ADD ALTERNATE SETSPD ENTRY, START1:
;<2-UTILITIES>SETSPD.MAC.1, 2-Aug-76 14:12:05, EDIT BY KIRSCHEN
;TCO 1468 - ADD STRUCTURE COMMAND
;<1B-UTILITIES>SETSPD.MAC.8, 9-Jul-76 09:40:18, EDIT BY HURLEY
;INCREASED VERSION NUMBER FOR RELEASE 1B
;<1B-UTILITIES>SETSPD.MAC.7, 23-Jun-76 18:33:29, EDIT BY HURLEY
;<1B-UTILITIES>SETSPD.MAC.6, 16-Jun-76 16:26:47, EDIT BY MILLER
;TCO 1437. ADD SETSPD: TO ALL ERROR MESSAGES
;<1B-UTILITIES>SETSPD.MAC.5, 16-Jun-76 16:20:16, EDIT BY MILLER
;<1B-UTILITIES>SETSPD.MAC.4, 16-Jun-76 16:17:15, EDIT BY MILLER
;TCO 1435. IMPROVE ERROR MESSAGE FROM BAD DEFINE COMMAND
;<1B-UTILITIES>SETSPD.MAC.3, 16-Jun-76 16:04:45, EDIT BY MILLER
;TCO 1433. IMPROVE ERROR MESSAGE FOR RAM OR VFU LOAD ERROR
;<1B-UTILITIES>SETSPD.MAC.2, 23-MAY-76 10:58:55, EDIT BY HALL
;<1B-UTILITIES>SETSPD.MAC.1, 22-MAY-76 11:40:05, EDIT BY MILLER
;<1A-UTILITIES>SETSPD.MAC.69, 6-MAY-76 11:03:02, EDIT BY HURLEY
;<1A-UTILITIES>SETSPD.MAC.68, 6-MAY-76 10:45:25, EDIT BY HURLEY
;<1A-UTILITIES>SETSPD.MAC.65, 12-APR-76 10:46:11, EDIT BY MILLER
;TCO 1167 AGAIN. FIX OFF-LINE INTERRUPT
;<1A-UTILITIES>SETSPD.MAC.64, 8-APR-76 11:51:17, EDIT BY HURLEY
;TCO 1244 - ADD .DIRECT .XTABM FOR MACRO 50 ASSEMBLIES
;<1A-UTILITIES>SETSPD.MAC.63, 1-APR-76 18:37:26, EDIT BY HURLEY
;TCO # 1205 - SET PROTECTION OF <SYSTEM>DUMP.EXE TO 770000
;<1A-UTILITIES>SETSPD.MAC.62, 31-MAR-76 09:43:47, EDIT BY HURLEY
;TCO # 1227 - ADD TOPS-20 ENTRY VECTOR AND VERSION NUMBER
;<V-SOURCES>SETSPD.MAC.61, 27-MAR-76 12:22:23, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.60, 27-MAR-76 12:02:14, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.59, 27-MAR-76 12:01:37, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.58, 27-MAR-76 09:07:22, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.57, 27-MAR-76 09:05:33, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.56, 23-MAR-76 15:05:31, EDIT BY HURLEY
;TCO 1205 - MAKE PROTECTION OF DUMP.EXE BE 770000
;<V-SOURCES>SETSPD.MAC.55, 16-MAR-76 14:51:06, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.54, 15-MAR-76 14:12:49, EDIT BY MILLER
;TCO 1015. FIX UP CHFDB
;<V-SOURCES>SETSPD.MAC.53, 15-MAR-76 09:45:25, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.52, 12-MAR-76 10:21:14, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.51, 12-MAR-76 10:13:48, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.50, 12-MAR-76 09:30:06, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.49, 11-MAR-76 19:29:33, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.48, 11-MAR-76 19:26:43, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.47, 11-MAR-76 19:25:48, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.46, 11-MAR-76 19:20:29, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.45, 11-MAR-76 19:16:49, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.44, 11-MAR-76 19:09:30, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.43, 11-MAR-76 12:37:59, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.42, 11-MAR-76 09:22:07, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.41, 10-MAR-76 21:35:51, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.40, 9-MAR-76 13:24:00, EDIT BY KIRSCHEN
;<V-SOURCES>SETSPD.MAC.39, 9-MAR-76 13:23:16, EDIT BY KIRSCHEN
;TCO 1169 - CREATE DUMP.CPY FILES WITH PROTECTION 770000.
;<V-SOURCES>SETSPD.MAC.38, 9-MAR-76 09:53:58, EDIT BY KIRSCHEN
;TCO 1167 - ADD "PRINTER" COMMANDS TO INITIALIZE PRINTERS
;<V-SOURCES>SETSPD.MAC.37, 9-FEB-76 15:35:59, EDIT BY MILLER
;<V-SOURCES>SETSPD.MAC.37, 9-FEB-76 15:00:02, EDIT BY MILLER
;MCO 1066. LOAD CACHE REFILL ALGORITHM
;<V-SOURCES>SETSPD.MAC.36, 6-FEB-76 14:16:17, EDIT BY MILLER
;MORE EDITS FOR MCO 15
;<V-SOURCES>SETSPD.MAC.35, 21-JAN-76 12:13:58, EDIT BY MILLER
;MCO # 15. SET RETENTION COUNT OF DUMP.CPY AND CHECK DBUGSW
;<V-SOURCES>SETSPD.MAC.34, 12-JAN-76 10:25:44, EDIT BY MILLER
TITLE SETSPD
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976, 1977, 1978 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
SEARCH MONSYM,MACSYM,SERCOD
.REQUIRE SYS:MACREL,SERCOD
SALL
IFNDEF .PSECT,<
.DIRECT .XTABM>
; VERSION NUMBER DEFINITIONS
VMAJOR==3 ;MAJOR VERSION OF SETSPD
VMINOR==1 ;MINOR VERSION NUMBER
VEDIT==7 ;EDIT NUMBER
VWHO==0 ;GROUP WHO LAST EDITED PROGRAM (0=DEC DEVELOPMENT)
VSTSPD== <VWHO>B2+<VMAJOR>B11+<VMINOR>B17+VEDIT
;THIS ROUTINE IS RUN BY THE MONITOR AT SYSTEM START UP AND SETS
;VARIOUS PARAMETERS ABOUT THE SYSTEM. PRESENTLY IT WILL SET:
; 1. LINE SPEEDS AND REMOTE CHARACTERSITICS
;
; 2. SYSTEM LOGICAL NAMES
;
; 3. READ THE PREVIOUS DUMP AND QUEUE UP ANY SYSERR BLOCKS
; THAT DID NOT GET QUEUED UP BEFORE THE CRASH
;
; 4. SET MAGTAPE LOGICAL TO PHYSICAL CORRESPONDENCE
;
; 5. LOAD RAM AND VFU FILES FOR LINEPRINTERS
;
; 6. ENABLE DIRECTORY-PARAMETER-SETTING
;
; 7. SET LOCAL TIME ZONE
;
; 8. SET THIS SITE'S ARPANET ADDRESS
;
; 9. ENABLE ACCOUNT-VALIDATION
;LOCAL STORAGE
MTBLK: 3 ;SIZE OF BLOCK
BLOCK 2 ;FOR OTHER ARGS
EOLF: BLOCK 1
PDL: BLOCK 20 ;THE PDL
FILNAM: BLOCK ^D28 ;NAME OF RAM OR VFU FILE PUT HERE
LINES: BLOCK 1 ;WORD TO HOLD LINES
STRBLK: BLOCK .MSSLN ;BLOCK FOR STRUCTURE COMMAND
HSBBUF: BLOCK HS%LEN ;LENGTH OF HSB AND HEADER
SPDTBL==10000 ;SPEED TABLE
REMTBL==20000 ;REMOTE TABLE
CPYPGS==^D10 ;# OF PAGES TO COPY WITH EACH PMAP
CPYWDS==CPYPGS_PGSFT ;NUMBER OF WORDS TO COPY
PGSFT==11 ;PAGE SHIFT VALUE
PG0PG==30 ;PAGE 0 OF DUMP.EXE
PG0ADR=PG0PG_PGSFT
TMPPG==31 ;2 PAGES FOR TEMPORARY MAPPING
TMPADR=TMPPG_PGSFT
DMPPG==40 ;PAGE FOR MAPPING DUMP FILE
DMPADR==DMPPG_PGSFT
CPYPG==DMPPG+CPYPGS ;PAGE FOR MAPPING COPY FILE
CPYADR==CPYPG_PGSFT
;THE TEXTI ARG BLOCK
TEXT: 4
FLAGS: RD%JFN!RD%PUN ;FLAGS
JFN: 0,,377777 ;JFN'S
BUFPTR: -1,,BUFFER ;BUFFER POINTER
COUNT: SIZE ;SIZE OF BUFFER
SIZE==100
SIZEB==SIZE*5 ;# OF BYTES IN BUFFER
BUFFER: BLOCK SIZE ;WORK BUFFER
RELOC 1000-140 ;ALL THE REST IS PURE
;PROGRAM ENTRY VECTOR
ENTVEC: JRST START ;STARTING LOCATION
JRST START ;REENTER LOCATION
VSTSPD ;VERSION NUMBER
JRST START1 ;ALTERNATE STARTING LOCATION
ENVLEN==.-ENTVEC ;ENTRY VECTOR LENGTH
;COMMAND TABLES:
;****************************************************************
;
; WARNING!!!
;
; THESE TABLES MUST BE KEPT IN ALPHABETICAL ORDER FOR TBLUK
;
;****************************************************************
LEV1TB: ELEVL1-.-1,,ELEVL1-.-1
XWD [ASCIZ /DEFINE/],DEFINE
XWD [ASCIZ /DISABLE/],DISABL
XWD [ASCIZ /ENABLE/],ENABLE
XWD [ASCIZ /HOST/],HOST
XWD [ASCIZ /MAGTAPE/],MAGTAP
XWD [ASCIZ /NODE/],NODNAM
XWD [ASCIZ /PRINTER/],LPTLOD
XWD [ASCIZ /TERMINAL/],TERM
XWD [ASCIZ /TIMEZONE/],TIMZON
ELEVL1:
;TABLE FOR TERMINAL CHARACTERISTICS
LEV2TB: ELEVL2-.-1,,ELEVL2-.-1
XWD [ASCIZ /AUTO-BAUD/],AUTO
XWD [ASCIZ /NOBELL/],NOBELL
XWD [ASCIZ /REMOTE/],REMOTE
XWD [ASCIZ /SPEED/],SPEED
ELEVL2:
; TABLE OF OPTIONS FOR ENABLE COMMANDS
ENAOPT: ENASIZ-1,,ENASIZ-1
XWD [ASCIZ/ACCOUNT-VALIDATION/], ENACCT
XWD [ASCIZ/DIRECTORY-PARAMETER-SETTING/], ENADIR
XWD [ASCIZ/FULL-LATENCY-OPTIMIZATION/], ENAFLO
ENASIZ==.-ENAOPT
; TABLE OF OPTIONS FOR DISBLE COMMANDS
DISOPT: DISSIZ-1,,DISSIZ-1
XWD [ASCIZ/ACCOUNT-VALIDATION/], DISACT
XWD [ASCIZ/DIRECTORY-PARAMETER-SETTING/], DISDIR
XWD [ASCIZ/FULL-LATENCY-OPTIMIZATION/], DISFLO
DISSIZ==.-DISOPT
; TABLE OF OPTIONS FOR LOADING PRINTERS
LPTTAB: LPTBSZ-1,,LPTBSZ-1
XWD [ASCIZ /LOWERCASE/], .MOSTS
XWD [ASCIZ /RAM/], .MOLTR
XWD [ASCIZ /VFU/], .MOLVF
LPTBSZ==.-LPTTAB
SLAVT: SLVBSZ-1,,SLVBSZ-1
XWD [ASCIZ /TU45/],.MTT45 ;TU45
XWD [ASCIZ /TU70/],.MTT70 ;TU70
XWD [ASCIZ /TU71/],.MTT71
XWD [ASCIZ /TU72/],.MTT72 ;TU72
SLVBSZ==.-SLAVT
;DEFINE REGISTERS USED
A==1
B==2
C==3
D==4
T1=1
T2=2
T3=3
T4=4
Q1==5
Q2==6
Q3==7
P1==10
P2==11
P3==12
P4==13
P5==14
P==17
;USEFUL DEFINITIONS
OPDEF CALL [PUSHJ P,]
OPDEF RET [POPJ P,]
DEFSTR SEBSIZ,0,17,12 ;POINTER TO SIZE FIELD IN SYSERR BLOCK
DEFSTR SEBERC,HSBBUF,8,9 ;POINTER TO ERROR BLOCK IN SYSERR BLOCK
SEBQOU=24 ;ADDRESS OF POINTER TO SYSERR QUEUE
SEBHED==2 ;NUMBER OF HEADER WORDS IN SYSERR BLOCK
;DEFINE INTERRUPT SYSTEM TABLES
ADDR: BLOCK 1
LEVTAB: ADDR
CHNTAB: 1,,LPTINT
DEFINE BCONFIG (R) <
IFE VMINOR,<ASCIZ /SYSTEM:'R'-CONFIG.CMD/>
IFG VMINOR,<
DEFINE BSP (R1,LETT) <
IRPC LETT,<
IFE "A"-"'LETT'"+VMINOR-1,<
ASCIZ /SYSTEM:'R1'LETT'-CONFIG.CMD/
STOPI>
>
>
BSP (\VMAJOR,"ABCDEFGHIJKLMNOPQRSTUVWXYZ")>
>
RCONFG: BCONFIG (\VMAJOR)
;THE CODE
START: RESET ;GET TO A KNOWN STATE
MOVEI A,.FHSLF ;GET OWN ID
RPCAP ;READ CAPABILITES
MOVE C,B ;ENABLE ALL CAPABILITIES
EPCAP ;DO IT
MOVE P,[IOWD 20,PDL] ;SET UP PUSH DOWN LIST
MOVE B,[LEVTAB,,CHNTAB] ;DEFINE INT SYSTEM
SIR
MOVSI B,(1B0) ;ENABLE LPT CHANNEL
AIC
EIR ;TURN ON INTS
;NOW FIND THE COMMAND FILE
MOVX A,GJ%SHT!GJ%OLD!GJ%PHY
HRROI B,RCONFG ;SYSTEM:X-CONFIG.CMD
GTJFN ;FIND THE FILE
JRST FINISH ;NOT THERE. GO DEFAULT EVERYTHING
HRLM A,JFN ;STASH THE JFN IN THE TEXTI BLOCK
MOVE B,[070000,,200000] ;READ ONLY
OPENF ;GET IT
JRST [ MOVEI A,.PRIOU ;THE CTY NO DOUBT
HRLOI B,.FHSLF ;THIS FORK
SETZ C, ;NO FLAGS
ERSTR ;OUTPUT SOMETHING
JFCL
JFCL
JRST FINISH] ;AND GO DEFAULT EVERYTHING
;FOUND THE FILE. NOW PROCESS THE COMMANDS
CMND: CALL PBLANK ;SKIP BLANKS
JRST .-1 ;NULL LINE
CAIE B,";" ;A COMMENT?
CAIN B,"!" ;OR THIS TYPE
JRST PURGE ;YES. SKIP ALL OF THE LINE
MOVEI A,LEV1TB ;THE TABLE
JRST GTKEY ;GO FIND AND DISPATCH ON KEY
;ALTERNATE SETSPD ENTRY
START1: RESET ;GET TO A KNOWN STATE
MOVEI A,.FHSLF ;GET OWN ID
RPCAP ;READ CAPABILITIES
MOVE C,B ;ENABLE ALL CAPABILITIES
EPCAP ;DO IT
MOVE P,[IOWD 20,PDL] ;SET UP PUSH DOWN LIST
MOVE B,[LEVTAB,,CHNTAB] ;DEFINE INT SYSTEM
SIR
MOVSI B,(1B0) ;ENABLE LPT CHANNEL
AIC
EIR ;TURN ON INTERRUPTS
CALL QUEBLK
HALTF
;ROUTINE TO PURGE INVALID COMMAND
PURGE1: HLRZ A,JFN
BKJFN ;GO BACK ONE
JFCL
PURGE: MOVX A,RD%BEL!RD%JFN ;FIND END OF COMMAND
MOVEM A,FLAGS
HRROI A,BUFFER ;WHERE TO PUT IT
MOVEM A,BUFPTR
MOVEI A,SIZEB ;SIZE OF BUFFER
MOVEM A,COUNT ;TO THE ARG BLOCK
MOVEI A,TEXT ;ARG BLOCK
TEXTI ;PURGE THE COMMAND
JRST FINISH ;FILE SCREWED UP. GO FINISH UP
MOVX A,RD%BTM ;CHECK FOR TERMINATOR FOUND
TDNE A,FLAGS ;DID WE
JRST CMND ;YES. GO TO NEXT COMMAND
CALL SEEEOF ;SEE IF AT EOF
JRST PURGE ;NOT .CONTINUE PURGING
JRST FINISH ;YES. ALL DONE
SEEEOF: HLRZ A,JFN ;SEE IF AT EOF
GTSTS ;GET STATUS
TXNE B,GS%EOF ;AT EOF?
AOS 0(P) ;YES
RET ;RETURN
;ROUTINE TO SKIP BLANKS AND TABS
;WILL RETURN TERMINATING BYTE IN B
PBLANK: HLRZ A,JFN
BIN ;GET NEXT BYTE
CAIN B,.CHLFD ;A LINE FEED?
RET ;YES. TELL HIM EOL
JUMPE B,[ CALL SEEEOF ;SEE IF EOF
JRST .+1 ;NO
JRST FINISH] ;YES. BAD FILE
CAIE B," " ;A BLANK
CAIN B," " ;OR A TAB?
JRST PBLANK ;YES. SKIP IT
CAIN B,15 ;A CR?
JRST PBLANK ;YES. SKIP IT
BKJFN
JFCL
AOS (P) ;SKIP
RET ;AND DONE
;CODE TO FIND THE NEXT KEY WORD IN THE COMMAND FILE AND DISPATCH
;TO THE ACTION ROUTINE. INPUT IS:
; A/ ADDRESS OF TABLE
GTKEY: PUSH P,A ;SAVE ARG
MOVEI A,SIZEB ;SIZE OF BUFFER
MOVEM A,COUNT ;TO ARG BLOCK
HRROI A,BUFFER ;WHERE DATA IS GOING
MOVEM A,BUFPTR
MOVX A,RD%JFN!RD%PUN!RD%BEL ;FLAGS
MOVEM A,FLAGS ;TO THE ARGS
MOVEI A,TEXT ;ARG BLOCK
TEXTI ;READ KEY VALUE
JRST FINISH ;FILE IS SCREWED UP. GO FINISH
MOVX A,RD%BTM ;SEE IF FOUND TERMIANTOR
TDNN A,FLAGS ;DID WE?
JRST [ CALL SEEEOF ;NO. AT EOF?
JRST PURGE ;NO. SKIP REST OF LINE
JRST FINISH] ;YES. DONE
LDB A,BUFPTR ;GET TERMINATOR
SETZM EOLF ;NOT AN EOL
CAIN A,.CHLFD ;WAS IT A LINE FEED?
SETOM EOLF ;YES. REMEMBER THIS
;FOUND KEY WORD. DO DISPATCH
SETZ B,
DPB B,BUFPTR ;TIE OFF STRING
SKIPE EOLF ;AT END OF LINE?
JRST [ MOVE A,BUFPTR ;YES
BKJFN ;BACK UP BYTE POINTER
JFCL
LDB C,A
CAIN C,15 ;A CR?
DPB B,A ;YES. ZAP IT TOO
JRST .+1]
POP P,A ;TABLE
HRROI B,BUFFER ;THE KEY WORD
TBLUK ;LOOK UP THE ENTRY
TXNN B,TL%ABR!TL%EXM ;GOT A GOOD MATCH?
JRST [ SKIPE EOLF ;NO. FOUND EOL YET?
JRST CMND ;SKIP IT
JRST PURGE] ;GO PURGE
HRRZ A,0(A) ;GET DISPACTH ADDRESS
JRST 0(A) ;GO TO IT
;COMMAND LEVEL ACTION ROUTINES.
;FIRST TERMINAL
TERM: SKIPE EOLF ;HAVE MORE ARGS?
JRST CMND ;NO. IGNORE LINE
CALL PBLANK ;SKIP BLANKS
JRST CMND ;FORGET IT
;NOW READ OUT THE LINE NUMBERS
HLRZ A,JFN ;GET JFN
MOVEI C,10 ;READ NUMNER IN OCTAL
NIN ;GET THE NUMBER
JRST PURGE1 ;PURGE LINE
HRLZM B,LINES ;SAVE FIST LINE NUMBER
BKJFN ;READ OUT TERMINATOR AGAIN
JFCL
BIN ;GET IT
CAIN B,"-" ;SPECIFYING A RANGE?
JRST GTRNGE ;YES. GET RANGE
HLRS LINES ;EXTEND LINE NUMBER
JRST LINKEY ;GO GET THE KEY
GTRNGE: NIN ;GET SECOND PART
JRST PURGE1 ;PURGE BAD COMMAND
HRRM B,LINES ;STASH LAST LINE NUMBER
; ..
;NOW READ OUT THE KEY WORD
LINKEY: HLRZ A,JFN
BKJFN ;GET TERMINATOR
JFCL
BIN ;""
CAIN B,.CHLFD ;A LINE FEED?
JRST LNKEY1 ;YES. END OF THIS ONE
LNKEY: CALL PBLANK ;SKIP BLANKS
JRST LNKEY1 ;NO KEY WORDS
SETZB P1,P2 ;ASSUME IS REMOTE
MOVEI A,LEV2TB ;KEY WORD
JRST GTKEY ;GET KEY WORD
LNKEY1: SETZB P1,P2 ;NO KEYWORDS
SETOM EOLF ;MARK THAT THE EOL WS SEEN
JRST REMOTE ;GO SET THIS LINE UP
;IF HERE, LINES ARE REMOTE
AUTO: TXOA P2,MO%AUT ;SET THE AUTO BUAD BIT
REMOTE: TXO P2,MO%RMT ;SET THE REMOTE BIT
HRRZ A,LINES ;GET FIRST LINE
HLRZ B,LINES ;GET LAST LINE
SUBI B,1(A) ;GET # TO DO
HRLI A,0(B) ;AN AOBJN WORD
HLR A,LINES ;FIRST LINE AGAIN
DOLINE: SKIPN P1 ;SETTING SPEED?
IORM P2,REMTBL(A) ;SAY IT IS REMOTE
SKIPE P1 ;SETTING REMOTE?
MOVEM P1,SPDTBL(A) ;NO. SET SPEED
SKIPN SPDTBL(A) ;HAVE A SPEED YET?
SKIPE EOLF ;NO, IS THIS THE END OF LINE?
SKIPA ;YES, SET THE SPEED
JRST REMOT1 ;NO. GO ON UNITIL ONE APPEARS
PUSH P,A ;SAVE LINES
CALL SPDSET ;GO SET THE SPEED
POP P,A ;RESTORE AOBJN WORD
REMOT1: AOBJN A,DOLINE ;GO DO ALL OF THEM
SKIPE EOLF ;FOUND AN EOF?
JRST CMND ;YES. GO DO COMMAND
JRST LNKEY ;NO
; HERE TO SET THE "IGNORE INPUT" (NO BELLS) BIT
NOBELL: HRRZ D,LINES ;GET LAST LINE NUMBER
HLRZ B,LINES ;GET FIRST LINE NUMBER
SUBI B,1(D) ;FORM - NUMBER IN RANGE
HRLI D,(B) ;FORM AN AOBJN POINTER TO LOOP
HLR D,LINES ; OVER ALL THE LINES IN THE RANGE
NOBEL1: MOVEI A,400000(D) ;GET LINE DESIGNATOR
MOVX B,.MOSIG ;SET "IGNORE INPUT" BIT
MOVX C,1 ;TURN THE BIT ON
MTOPR ;SET THE LINE TO IGNORE CHARACTERS UNTIL OPENED
ERJMP .+1 ;IGNORE FAILURE HERE
AOBJN D,NOBEL1 ;LOOP OVER ALL THE LINES IN THE INDICATED RANGE
JRST LNKEY ;GO GET THE NEXT KEYWORD IN THE COMMAND
;SET LINE SPEEDS
SPEED: CALL PBLANK ;SKIP BLANKS
JRST CMND ;GIVE IT UP
HLRZ A,JFN ;THE FILE
MOVEI C,^D10 ;GET SPEED IN DECIMAL
NIN ;GET IT
JRST PURGE1 ;GIVE UP
HRRZ P1,B ;SAVE SPEED
HRLI P1,400000(B) ;IN CASE NO MORE
BKJFN ;LOOK AT TERMINATOR
JFCL
BIN ;GET IT
CAIN B,.CHLFD ;A LINE FEED?
SETOM EOLF ;YES. REMEMBER THIS
SKIPE EOLF
JRST REMOTE ;GO DO IT
CALL PBLANK ;GO FIND OTHER SPEED
JRST [ SETOM EOLF ;REMEMBER EOL
JRST REMOTE] ;GO SET THE SPEED
MOVEI C,^D10
NIN ;READ THE BYTE
JRST PURGE1 ;BLEW IT
HRRI P1,0(B) ;SAVE OUTPUT SPEED
BKJFN
JFCL
BIN
CAIN B,.CHLFD ;A LINE FEED?
SETOM EOLF ;REMEMBER EOL
JRST REMOTE ;GO SET SPEEDS
;ROUTINE TO SET SPEED OF A LINE.
;INPUT IS : A/ LINE NUMBER
SPDSET: MOVEI A,0(A) ;CLEAN UP ARG
SKIPE REMTBL(A) ;THIS A REMOTE SETTING?
JRST SPDST1 ;YES. ALWAYS USE FILE SETTING
MOVEI A,400000(A) ;GET TTY DESIGNATOR
MOVEI B,.MORSP ;GET SPEED FROM MONITOR
MTOPR ;GET IT
ERJMP REMOT2 ;?
TRZ A,400000
SKIPG C ;GET IT?
SPDST1: MOVE C,SPDTBL(A) ;NO. USE FILE'S VALUE
TLZ C,(1B0) ;GET RID OF SIGN BIT
MOVEI B,.MOSPD ;SPEED SETTING
IOR B,REMTBL(A) ;ADD IN THE REMOTE AND AUTO BITS (IF ANY)
TRO A,400000 ;TTY DESIGNATOR
MTOPR ;DO IT
ERJMP REMOT2 ;IGNORE ERROR
MOVEI B,.MORNT ;REQ MSG SUPPRESS STATUS FROM
MTOPR ;MONITOR FOR TTY (A/ TTY#)
ERJMP REMOT2 ;IGNORE ERROR
MOVEI B,.MOSNT ;SET MSG SUPPRESS BIT FOR TTY
MTOPR ;SAME AS BEFORE
ERJMP REMOT2 ;IGNORE ERROR
REMOT2: RET ;ALL DONE
;ROUTINE TO APPLY DEFAULT SPEEDS AT EOF
FINISH: MOVE A,[SIXBIT /TTYJOB/] ;FIRST FIND # OF TTY'S
SYSGT ;GET IT
HLLZ P3,B ;MAKE AOBJN POINTER
FIN1: SKIPE SPDTBL(P3) ;THIS ONE SET YET?
JRST FIN2 ;YES. GO ON
MOVEI A,0(P3) ;NO. GET LINE #
MOVE B,[^D300,,^D300] ;DEFAULT SPEED
MOVEM B,SPDTBL(A) ;STORE IT
CALL SPDSET ;GO SET THE SPEED
FIN2: AOBJN P3,FIN1 ;DO ALL LINES
CALL REFILL ;GO LOAD THE CACHE REFILL ALGORITHM
HALTF ;AND DONE
;THIS CODE PROCESSES THE MAGTAPE CONFIGURATION COMMANDS. FORMAT
;OF A COMMAND LINE IS:
; MAGTAPE "LUN" "SERIAL#" "SLAVE"
MAGTAP: SKIPN EOLF ;AT EOL YET?
CALL PBLANK ;NO. GET TO LUN THEN
JRST CMND ;NO MORE STUFF
HLRZ A,JFN ;GET INPUT
MOVEI C,10 ;GET NUMBER IN OCTAL
NIN ;GET LUN
JRST PURGE1 ;BAD LINE
MOVE P1,B ;SAVE LUN
CALL PBLANK ;GET TO NEXT VALUE
JRST CMND ;BAD LINE. JUST GO SKIP IT
MOVE D,P1 ;RESOTRE LUN
MOVEI C,12 ;GET DECIMAL SERIAL NUMBER
HLRZ A,JFN ;THE JFN
NIN ;DO IT
JRST PURGE1 ;BAD COMMAND
HRRZ P2,B ;SAVE SERIAL NUMBER
BKJFN ;LOOK FOR TERMINATOR
HLRZ A,JFN ;READ A CHARACTER
BIN ;GET IT
CAIN B,.CHLFD ;LINEFEED?
JRST MAGTP1 ;YUP END
CALL PBLANK ;REMOVE BLANKS
JRST MAGTP1 ;END OF COMMAND
HRROI A,BUFFER ;READ REST
MOVEM A,BUFPTR
MOVEI A,SIZEB ;STORE SIZE
MOVEM A,COUNT
MOVX A,RD%JFN!RD%BEL!RD%PUN
MOVEM A,FLAGS
MOVEI A,TEXT ;FIND ARGUMENT
TEXTI ;GET STRING
JRST FINISH ;QUIT END OF FILE
MOVX A,RD%BTM ;CHECK FOR CORRECT TERMINATION
TDNN A,FLAGS
JRST [CALL SEEEOF ;CHECK FOR EOF
JRST PURGE
JRST FINISH] ;DONE
MOVE A,BUFPTR ;GET TERMINATOR
LDB C,A ;GET TERMINATING CHARACTER
CAIE C,.CHLFD ;LF?
JRST MAGTP2
BKJFN ;BACKUP OVER LF
JSERR ;UNEXPECTED ERROR
MOVEM A,BUFPTR ;SAVE NEW STRING POINTER
MAGTP2: SETZ A, ;STORE NUL
DPB A,BUFPTR ;TERMINATE STRING
MOVEI A,SLAVT ;GET SLAVE TABLE
HRROI B,BUFFER ;CHECK FOR MATCH
TBLUK
TXNN B,TL%EXM!TL%ABR ;CORRECT MATCH?
JRST [SKIPE EOLF ;NO AT END OFLINE?
JRST CMND ;YES. GO ON TO NEXT ONE
JRST PURGE1] ;NOPE PURGE JUNK
HRL P1,(A) ;GET UNIT TYPE
MAGTP1: MOVE A,P1 ;SET LUN
MOVE B,P2 ;SET SERIAL #
MTALN ;DO IT
ERJMP [ HRROI A,[ASCIZ /
? SETSPD: COULD NOT SET MTA /]
PSOUT
MOVEI A,.PRIOU ;TO THE CTY
EXCH B,D ;GET MTA, SAVE SERIAL #
MOVEI C,10 ;IN OCTAL
NOUT ;DO IT
JFCL
HRROI A,[ASCIZ / SERIAL # /]
PSOUT
MOVEI A,.PRIOU
MOVE B,D
MOVEI C,12
NOUT ;OUPUT THE SERIAL # AS WELL
JFCL
JRST .+1] ;AND DONE
JRST PURGE1 ;GO SYNCH LINE
; ENABLE COMMAND
DISABL: TDZA P1,P1 ;MARK THAT THIS IS A DISABLE COMMAND
ENABLE: SETOM P1 ;MARK THAT THIS IS AN ENABLE COMMAND
SKIPE EOLF ;AT END OF COMMAND ?
JRST CMND ;YES, GO GET NEXT LINE
CALL PBLANK ;SKIP BLANKS
JRST CMND ;PUNT
HRROI A,BUFFER ;WHERE TO STASH IT
MOVEM A,BUFPTR ;TO THE ARG BLOCK
MOVEI A,SIZEB ;THE SIZE OF IT
MOVEM A,COUNT ;TO THE BLOCK
MOVX A,RD%JFN!RD%BEL
MOVEM A,FLAGS ;TO ARG BLOCK
MOVEI A,TEXT ;THE ARG BLOCK
TEXTI ;GET DEFINITION
JRST FINISH ;FILE IS SCREWED UP
MOVX A,RD%BTM ;SEE IF PROPERLY TERMINATED
TDNN A,FLAGS ;IS IT?
JRST [ CALL SEEEOF ;NO. SEE IF EOF THEN
JRST PURGE ;NOT. DO MORE PURGING
JRST FINISH] ;YES. ALL DONE
MOVE A,BUFPTR ;GET BYTE POINTER
LDB C,A ;GET TERMINATING CHARACTER
CAIE C,.CHLFD ;TERMINATED BY A LINE FEED ?
JRST ENA010 ;NO, GO ON
BKJFN ;YES, BACK UP TO CARRIAGE RETURN
JSERR ;UNEXPECTED ERROR
MOVEM A,BUFPTR ;SAVE NEW POINTER TO TERMINATOR
ENA010: MOVEI A,.CHNUL ;GET A NULL
DPB A,BUFPTR ;TERMINATE STRING
MOVEI A,ENAOPT ;GET ADDRESS OF OPTION TABLE
SKIPL P1 ;IS THIS AN ENABLE COMMAND ?
MOVEI A,DISOPT ;NO, USE DISABLE OPTION TABLE
HRROI B,BUFFER ;GET POINTER TO OPTION REQUESTED
TBLUK ;FIND OPTION IN TABLE
TXNN B,TL%EXM!TL%ABR ;FOUND A MATCH ?
JRST [ SKIPE EOLF ;NO, AT END OF LINE ?
JRST CMND ;YES, GO ON TO NEXT COMMAND
JRST PURGE1 ] ;NO, IGNORE REMAINDER OF LINE
HRRZ A,(A) ;GET ADDRESS OF PROCESSING ROUTINE
CALL (A) ;GO PERFORM INDICATED FUNCTION
SKIPE EOLF ;AT END OF LINE YET ?
JRST CMND ;YES, GO ON TO NEXT COMMAND
JRST PURGE1 ;NO, IGNORE REMAINDER OF LINE
; HERE TO PERMIT CHANGING DIRECTORY PARAMETERS
DISDIR: TDZA B,B ;TURN OFF THE PARAMETER
ENADIR: MOVEI B,1 ;TURN ON THE OPTION
MOVEI A,.SFCRD ;GET FUNCTION CODE
SMON ;TELL THE MONITOR
RET ;RETURN
; HERE TO ENABLE ACCOUNT VALIDATION
DISACT: TDZA B,B ;TURN OFF ACCOUNT VALIDATION
ENACCT: MOVEI B,1 ;TURN ON ACCOUNT VALIDATION
MOVEI A,.SFAVR ;GET THE FUNCTION CODE
SMON ;TELL THE MONITOR
RET ;RETURN
DISFLO: TDZA B,B ;TURN OFF FULL LATENCY OPTIMIZATION
ENAFLO: MOVEI B,1 ;TURN ON FULL LATENCY OPTIMIZATION
MOVEI A,.SFFLO ;GET THE SMON FUNCTION CODE
SMON ;SET THE DESIRED STATE
RET ;AND RETURN
;DEFINE A LOGICAL NAME
DEFINE: SKIPE EOLF ;AT EOL?
JRST CMND ;YES. GET NEXT COMMAND
CALL PBLANK ;GO FIND LOGICAL NAME
JRST CMND ;NO ARGS
HRROI A,BUFFER ;WHERE TO STASH IT
MOVEM A,BUFPTR ;TO THE ARG BLOCK
MOVEI A,SIZEB ;THE SIZE OF IT
MOVEM A,COUNT ;TO THE BLOCK
MOVX A,RD%JFN!RD%PUN!RD%BEL
MOVEM A,FLAGS ;TO ARG BLOCK
MOVEI A,TEXT ;THE ARG BLOCK
TEXTI ;GET DEFINITION
JRST FINISH ;FILE IS SCREWED UP
MOVX A,RD%BTM ;SEE IF PROPERLY TERMINATED
TDNN A,FLAGS ;IS IT?
JRST [ CALL SEEEOF ;NO. SEE IF EOF THEN
JRST PURGE ;NOT. DO MORE PURGING
JRST FINISH] ;YES. ALL DONE
LDB A,BUFPTR ;LOOK AT TERMINATER
CAIN A,.CHLFD ;A LINE FEED?
JRST CMND ;YES. NOTHING TO DEFINE THEN
SETZ A, ;GET RID OF THE TERMINATER
DPB A,BUFPTR ;TIE IT OFF
CALL PBLANK ;GET TO DEFINITION
JRST CMND ;NOTHING TO DEFINE
PUSH P,BUFPTR ;SAVE START OF DEFINITION
MOVX A,RD%JFN!RD%BEL ;GET REST OF COMMAND
MOVEM A,FLAGS
MOVEI A,TEXT ;THE BLOCK
TEXTI ;GOBBLE DOWN THE DEFINITION
JRST FINISH ;BAD FILE
POP P,C ;THE DEFINITION
MOVX A,RD%BTM ;SEE IF PROPERLY TERMINATED
TDNN A,FLAGS ;IS IT?
JRST [ CALL SEEEOF ;NO. SEE IF EOF
JRST PURGE ;NOT. ILLEGAL THEN
JRST FINISH] ;IS. ALL DONE
HRROI B,BUFFER ;THE LOGICAL NAME
MOVEI A,.CLNSY ;CREATE A SYSTEM NAME
CRLNM ;DO IT
JRST [ TMSG <
? SETSPD: FAILED TO DEFINE LOGICAL NAME >
HRROI A,BUFFER ;GET NAME
PSOUT ;OUTPUT IT
TMSG < BECAUSE:
> ;AND A REASON
MOVEI A,.PRIOU ;THE OUTPUT PLACE
HRLOI B,.FHSLF ;US
SETZ C,
ERSTR ;OUTPUT THE MESSAGE
JFCL
JFCL
JRST CMND] ;GO DO MORE
JRST CMND ;GO DO MORE
;SET LOCAL TIME ZONE; IT MUST BE A NUMBER FROM -12 TO 12
TIMZON: SKIPN EOLF ;GET TO THE ARGUMENT
CALL PBLANK ; ...
JRST CMND ;NONE THERE
HLRZ A,JFN ;NOW READ A NUMBER FOR THE TIMEZONE
MOVEI C,12 ; IN DECIMAL
NIN
JRST PURGE1 ;NOT A GOOD ARGUMENT
MOVM D,B ;CHECK IT FOR RANGE
CAILE D,^D12 ;MUST BE FROM -12 TO 12 DECIMAL
JRST [ TMSG <
? setspd: illegal time zone value
>
JRST PURGE1] ;GO RE-SYNCH LINE
MOVEI A,.SFTMZ ;SET TIME ZONE
SMON ;ARGUMENT IN B
ERJMP TZERR
JRST PURGE1 ;SUCCESS, ON TO NEXT COMMAND
;ATTEMPT TO SET TIME ZONE FAILED
TZERR: TMSG <
? setspd: unable to set time zone because:
>
GENERR: MOVEI A,.PRIOU ;TYPE OUT MONITOR ERROR
HRLOI B,.FHSLF ; FOR THIS FORK
ERSTR
JFCL
JFCL
JRST PURGE1 ;ON TO NEXT LINE
;SET LOCAL HOST NUMBER OF AN ARPANET SITE
HOST: SKIPN EOLF ;GET TO THE ARGUMENT
CALL PBLANK ; ...
JRST CMND ;NONE THERE
HLRZ A,JFN ;READ A NUMBER FOR THE SITE ADDRESS
MOVEI C,10 ; IN OCTAL
NIN
JRST PURGE1 ;NOT A GOOD ARGUMENT
MOVEI A,.SFLHN ;SET LOCAL HOST NUMBER
SMON
ERJMP HSTERR ;FAILED?
JRST PURGE1 ;NO, ON TO NEXT COMMAND
HSTERR: TMSG <
? setspd: unable to set arpanet site address because:
>
JRST GENERR
;COMMAND TO DECLARE DECNET NODE NAME
NODNAM: SKIPE EOLF ;AT THE END-OF-COMMAND?
NODNA1: JRST [ TMSG <
?SETSPD: Invalid name given for NODE command
>
JRST PURGE1] ;AND DO IT AGAIN
CALL PBLANK ;SKIP BLANKS
JRST NODNA1 ;ERROR
MOVEI A,SIZEB ;SIZE OF BUFFER
MOVEM A,COUNT
HRROI A,BUFFER ;WHERE NAME WILL GO
MOVEM A,BUFPTR ;TO ARG BLOCK
MOVX A,RD%JFN!RD%PUN!RD%BEL!RD%CRF ;FLAGS
MOVEM A,FLAGS
MOVEI A,TEXT ;ARG BLOCK
TEXTI ;GET NAME
JRST FINISH ;FILE IS BAD. GO WRAP UP
MOVX A,RD%BTM ;SEE IF FOUND TERMINATOR
TDNN A,FLAGS ;DID WE?
JRST NODNA1 ;NO. ERROR THEN
LDB A,BUFPTR ;GET TERMINATOR?
CAIN A,.CHLFD ;EOL?
SETOM EOLF ;YES. REMEMBER THIS
MOVEI A,.CHNUL ;GET A NULL
DPB A,BUFPTR ;ZAP POINTER
SKIPN EOLF ;AT EOL?
CALL PBLANK ;SKIP TO NEXT FIELD
JRST [ SETZM D ;AT THE END. DON'T SET NUMBER
JRST NODNA2]
HLRZ A,JFN ;GET FILE JFN
MOVEI C,12 ;GET OCTAL NUMBER
NIN ;""
NODNA3: JRST [ TMSG <
?SETSPD: Illegal node number in NODE command
>
JRST PURGE1] ;SKIP REMAINDER OF COMMAND
MOVE D,B ;SAVE NUMBER
NODNA2: MOVEI A,.NDSLN ;WANT TO SET NODE NAME
MOVEI B,C ;ARG BLOCK
HRROI C,BUFFER ;WHERE NAME IS
NODE ;DO IT
ERJMP NODNA1 ;IF FAILED, GO AWAY
JUMPE D,PURGE1 ;IF NO NUMBER, GO ON
MOVEI A,.NDSNM ;SET NODE NUMBER
MOVEI B,D ;WHERE THE NUMBER IS
NODE ;SET IT
ERJMP NODNA3 ;BAD!!
JRST PURGE1 ;NAME IS SET
; ROUTINE TO LOAD A RAM OR VFU
LPTLOD: SKIPE EOLF ;AT END-OF-COMMAND ?
JRST CMND ;YES, GO GET NEXT LINE
CALL PBLANK ;SKIP BLANKS
JRST CMND ;PUNT
; READ LPT UNIT NUMBER FROM FILE
STKVAR <LODUNI,LODFNC,LODJFN,LODLCP,LPTJFN>
SETZM LODJFN ;INIT THIS TO ZERO
SETZM LODLCP ;ASSUME PRINTER IS NOT LOWER CASE
HLRZ A,JFN ;GET JFN OF FILE TO READ
MOVEI C,^D8 ;USE OCTAL FOR UNIT NUMBER
NIN ;INPUT THE PRINTER UNIT NUMBER
JRST PURGE1 ;ERROR, IGNORE REMAINDER OF LINE
MOVEM B,LODUNI ;SAVE LPT UNIT NUMBER
; SEE IF RAM OR VFU IS TO BE LOADED
LPLD20: CALL PBLANK ;SKIP BLANKS
JRST PURGE1 ;NO MORE ARGS, IGNORE REST OF LINE
MOVEI A,SIZEB ;SIZE OF BUFFER
MOVEM A,COUNT ;TO ARG BLOCK
HRROI A,BUFFER ;WHERE DATA IS GOING
MOVEM A,BUFPTR
MOVX A,RD%JFN!RD%PUN!RD%BEL ;FLAGS
MOVEM A,FLAGS ;TO THE ARGS
MOVEI A,TEXT ;ARG BLOCK
TEXTI ;READ KEY VALUE
JRST FINISH ;FILE IS SCREWED UP. GO FINISH
MOVX A,RD%BTM ;SEE IF FOUND TERMIANTOR
TDNN A,FLAGS ;DID WE?
JRST [ CALL SEEEOF ;NO. AT EOF?
JRST PURGE ;NO. SKIP REST OF LINE
JRST FINISH] ;YES. DONE
LDB A,BUFPTR ;GET TERMINATOR
SETZM EOLF ;NOT AN EOL
CAIN A,.CHLFD ;WAS IT A LINE FEED?
SETOM EOLF ;YES. REMEMBER THIS
;..
;..
MOVEI A,.CHNUL ;GET A NULL CHARACTER
DPB A,BUFPTR ;TERMINATE KEYWORD WITH A NULL
MOVEI A,LPTTAB ;GET ADDRESS OF TABLE OF OPTIONS
HRROI B,BUFFER ;GET POINTER TO TEXT ARGUMENT IN FILE
TBLUK ;LOOK FOR OPTION SPECIFIED
TXNN T2,TL%EXM!TL%ABR ;FOUND A MATCH ?
JRST [ SKIPE EOLF ;NO, HAS END-OF-LINE BEEN SEEN ?
JRST CMND ;YES, GO DO NEXT COMMAND
JRST PURGE1 ] ;NO, IGNORE REMAINDER OF LINE
HRRZ A,(A) ;GET FUNCTION TO PERFORM
CAIN A,.MOSTS ;SET STATUS FUNCTION (DECLARE LOWER CASE LPT) ?
JRST [ SETOM LODLCP ;YES, FLAG THAT PRINTER SHOULD BE LOWER CASE
JRST LPLD20 ] ;GO GET NEXT ARGUMENT
MOVEM A,LODFNC ;SAVE DESIRED FUNCTION (MTOPR CODE)
; READ FILENAME TO BE LOADED AND GET A JFN FOR IT
CALL PBLANK ;SKIP ANY BLANKS
JRST PURGE1 ;NO MORE DATA
MOVX T1,GJ%SHT!GJ%FNS!GJ%OLD ;EXISTING FILE, PHYSICAL ONLY
HLLZ T2,JFN ;GET JFN OF FILE TO READ NAME FROM
HRRI T2,.NULIO ;NO EDITING OUTPUT JFN
GTJFN ;GET A JFN FOR FILE TO BE LOADED
JRST LODERR ;FAILED
MOVEM A,LODJFN ;SAVE JFN
HLRZ A,JFN ;GET JFN FOR COMMAND FILE
BKJFN ;BACK UP ONE CHARACTER
JFCL ;IGNORE ERRORS
BIN ;GET LAST CHARACTER READ
CAIN B,.CHLFD ;READ AN END-OF-LINE ?
SETOM EOLF ;YES, INDICATE EOL SEEN
; OPEN THE PRINTER AND VERIFY THAT NO RAM OR VFU IS NOW LOADED
HRROI A,FILNAM ;GET POINTER TO WHERE DEVICE STRING GOES
MOVSI B,600007 ;GET LPT DEVICE DESIGNATOR
HRR B,LODUNI ;GET UNIT NUMBER
DEVST ;GET DEVICE NAME STRING
JRST LODERR ;FAILED
MOVEI B,":" ;GET TERMINATOR FOR GTJFN
IDPB B,A ;TERMINATE DEVICE NAME
SETZ B,
IDPB B,A ;TIE IT OFF
MOVX A,GJ%SHT!GJ%FOU ;SHORT CALL, FOR OUTPUT USE
HRROI B,FILNAM ;GET POINTER TO DEVICE NAME
GTJFN ;GET A JFN FOR THE PRINTER
JRST ENDLPT ;ALREADY ASSIGNED
MOVEM A,LPTJFN ;SAVE LPT JFN
MOVX B,<FLD(7,OF%BSZ)+OF%WR> ;OPEN FOR WRITE
OPENF ;OPEN THE PRINTER
JRST [ EXCH A,LPTJFN ;MUST BE OPEN ALREADY, GET BACK JFN
RLJFN ;RELEASE THE JFN
JFCL ;IGNORE ERRORS HERE
MOVE A,LPTJFN ;GET BACK ERROR CODE
CAIE A,OPNX9 ;ALREADY OPENED BY SOMEONE?
JRST LODANY ;NO. LOAD ANYWAY
JRST ENDLPT ] ;GO ON TO NEXT COMMAND
MOVEI B,.MOPSI ;GET OFF-LINE INTS
MOVEI C,P1 ;SET UP ARGS IN REGISTERS
MOVEI P1,3 ;3 WORDS
SETZB P2,P3 ;CHANNEL 0, NO FLAGS
MTOPR ;DO IT
ERJMP .+1 ;IN CASE SOMETHING TERRIBLE HAPPENED
GDSTS ;GET CURRENT STATUS
TXZ B,MO%LVU!MO%LCP!MO%EOF ;TURN OFF CONDITION BITS
JUMPN B,INERR ;IF AN ERROR, PUNT IT
MOVEI B,14 ;IF NO ERROR, ALIGN FORMS
BOUT ;DO IT
ERJMP .+1 ;IGNORE FAILURE
INERR: DMOVE B,[-1,,FILNAM
5*^D28] ;ARGS
DMOVEM B,MTBLK+1 ;TO ARG BLOCK
MOVE C,LODFNC ;GET FUNCTION TO PERFORM
MOVX B,.MORTR ;GET READ-RAM FUNCTION CODE
CAIE C,.MOLTR ;ARE WE LOADING THE RAM ?
MOVX B,.MORVF ;NO, GET READ-VFU FUNTION
MOVEI C,MTBLK ;GET ADDRESS OF BLOCK
SETZM FILNAM ;MAKE IT LOOK AS IF IT IS NOT LOADED
MTOPR ;READ FILENAME ALREADY LOADED
ERJMP .+1 ;UNEXPECTED ERROR. LOAD RAM ANYWAY
MOVE A,LPTJFN ;GET JFN FOR PRINTER
CLOSF ;CLOSE THE FILE
FCLOSE: JRST [ MOVE A,LPTJFN ;FAILED. GET JFN AGAIN
TXO A,CZ%ABT ;DO IT NOW WITH ABORT
CLOSF ;DO IT
JFCL ;HAS TO WORK
JRST .+1] ;ALL DONE
LDB A,[POINT 7,FILNAM,6] ;GET FIRST BYTE RETURNED
JUMPN A,ENDLPT ;IF NOT-NULL, GO ON TO NEXT COMMAND
; GET JFN, FUNCTION, AND UNIT # AND LOAD THE RAM OR VFU
LODANY: MOVE B,LODFNC ;GET FUNCTION TO BE PERFORMED
MOVE A,LODJFN
MOVE C,LODUNI ;GET UNIT NUMBER OF PRINTER
SKIPE LODLCP ;IS THIS PRINTER LOWER CASE ?
TXO B,MO%LCP ;YES, MARK THAT PRINTER IS LOWER CASE
LPINI ;LOAD RAM OR VFU
ERJMP LODERR ;ERROR - TELL SOMEONE
; HERE TO FINISH UP AND GO DO NEXT COMMAND
ENDLPT: MOVE P,[IOWD 20,PDL] ;RESET STACK
SKIPE EOLF ;AT END OF COMMAND YET ?
JRST CMND ;YES, GO DO NEXT COMMAND
JRST PURGE1 ;NO, IGNORE REST OF LINE
; HERE ON AN ERROR LOADING THE RAM OR VFU
LODERR: TMSG <
? SETSPD: Could not load the >
HRROI A,[ASCIZ/VFU/] ;GET TEXT
MOVE B,LODFNC ;GET FUNCTION BEING PERFORMED
CAIE B,.MOLVF ;ARE WE LOADING THE VFU ?
HRROI A,[ASCIZ/RAM/] ;NO, GET RAM TEXT
PSOUT ;TELL USER WHAT WE ARE LOADING
TMSG < for PLPT> ;GET UNIT NAME
MOVEI A,.PRIOU ;GET PRIMARY OUTPUT JFN
MOVE B,LODUNI ;GET UNIT NUMBER
MOVEI C,^D8 ;GET OCTAL RADIX
NOUT ;OUTPUT THE UNIT NUMBER
JFCL ;IGNORE ERRORS HERE
TMSG <
> ;END OF MESSAGE
SKIPE A,LODJFN ;GET JFN FOR FILE TO HAVE BEEN LOADED
CLOSF ;MAKE SURE IT IS REALLY CLOSED AND RELEASED
JFCL ;PROBABLY CLOSED BY MONITOR ALREADY ANYHOW
JRST ENDLPT ;GO FINISH UP
;LPT OFF-LINE INTERRUPT ROUTINE
LPTINT: MOVEI A,@FCLOSE ;REDIRECT CODE TO CLOSE AND ABORT DEVICE
MOVEM A,ADDR ;ZAP THE OLD PC WORD
DEBRK ;AND GO FINISH UP
;ROUTINE TO PULL ANY UNQUEUED SYSERR BLOCKS OUT OF THE CRASH DUMP
; AND QUEUE THEM UP TO SYSERR
QUEBLK:
; SAVEP
MOVE T1,[SIXBIT /DBUGSW/] ;CHECK ON STATE OF SYSTEM
SYSGT ;READ DBUGSW
SKIPE T2 ;FOUND IT?
CAIGE T1,2 ;YES. IS IT STAND-ALONE?
SKIPA ;NO. DO THE DUMP
RET ;YES. DON'T DO ANYTHING
TRVAR <QUEJFN,QUEFRK,QUEPGS>
SETZ T1, ;GET A FORK TO LOAD DUMP.EXE INTO
CFORK
RET ;COULD NOT GET A FORK, SO JUST EXIT
MOVEM T1,QUEFRK ;SAVE FORK HANDLE
MOVX T1,GJ%OLD!GJ%SHT ;GET A JFN FOR <SYSTEM>DUMP.EXE
HRROI T2,[ASCIZ/PS:<SYSTEM>DUMP.EXE/]
GTJFN
JRST QUEKFK ;NO DUMP FILE, NOTHING TO DO
MOVEM T1,QUEJFN ;SAVE JFN
MOVE T2,[440000,,OF%RD!OF%WR!OF%THW]
OPENF ;OPEN THE FILE FOR READ/WRITE THAWED
JRST [ MOVE T1,QUEJFN ;FAILED, CLEAN UP
RLJFN
JFCL
JRST QUEKFK]
HRLI T1,.FBPRT ;SET THE PROTECTION OF DUMP.EXE TO 770000
MOVEI T2,-1 ;RIGHT HALF PROTECTION BITS
MOVEI T3,770000 ;MUCHO PROTECTION
CHFDB ;THIS FILE MUST BE PROTECTED FOR SECURITY
ERJMP .+1
HRLZ T1,QUEJFN ;NOW MAP IN DIR PAGE
MOVE T2,[.FHSLF,,PG0PG]
MOVX T3,PM%RD!PM%WT ;READ AND WRITE
PMAP
HRRZ T1,PG0ADR ;GET LENGTH OF DIRECTORY BLOCK
HRRZ T2,PG0ADR-2(T1) ;GET STARTING FILE PAGE # OF LAST GROUP
HLRZ T3,PG0ADR-1(T1) ;GET HALFWORD CONTAINING REPEAT COUNT
LSH T3,-9 ;RIGHT JUSTIFY REPEAT COUNT
ADD T2,T3 ;COMPUTE # OF FILE PAGES TO MAP
MOVEM T2,QUEPGS ;SAVE PAGE NUMBER
HRRZ T1,PG0ADR ;GET LENGTH OF HEADER BLOCK OF DIR
HLRZ T2,PG0ADR(T1) ;GET CODE OF NEXT BLOCK
CAIE T2,1775 ;ENTRY VECTOR?
JRST QUEDON ;NO, GIVE UP
HRRZ T2,PG0ADR(T1) ;GET LENGTH
CAIGE T2,4 ;CORRECT LENGTH?
JRST QUEDON ;NO, GIVE UP
SKIPE PG0ADR+3(T1) ;ALREADY LOOKED AT THIS DUMP?
JRST QUEDON ;YES, GIVE UP
SETOM PG0ADR+3(T1) ;NO, MARK THAT WE HAVE NOW SEEN IT
SETO T1, ;AND UNMAP THE PAGE
MOVE T2,[.FHSLF,,PG0PG]
SETZ T3,
PMAP
HRRZ T1,QUEJFN ;GET JFN OF ORIGINAL DUMP FILE
MOVE T2,QUEPGS ;GET HIGHEST PAGE NUMBER TO COPY
CALL CPYDMP ;GO COPY THE DUMP FILE
HRRZ T1,QUEJFN ;CLOSE THE JFN
TXO T1,1B0 ;BUT KEEP THE JFN
CLOSF
JFCL
HRLZ T1,QUEFRK ;NOW MAP DUMP.EXE INTO FORK
HRR T1,QUEJFN
GET
SETZM QUEJFN ;JFN HAS BEEN RELEASED
;THE COPY IS EITHER DONE OR HAS BEEN DELETED BECAUSE SYSTEM IS
;STAND-ALONE. PROCEED WITH QUEUEING UP THE SYSERR BLOCKS
DMPDON: HRLZ T1,QUEFRK ;NOW MAP IN PAGE 0
MOVE T2,[.FHSLF,,PG0PG]
MOVX T3,PM%RD
PMAP
SKIPG P1,PG0ADR+SEBQOU ;IS THERE ANYTHING IN THE QUEUE?
JRST QUEDN1 ;NO, GO MARK THAT THIS DUMP IS DN1E
QUELOP: MOVEI P2,0(P1) ;GET ADDRESS OF NEXT BLOCK
ANDI P2,777 ;GET LOW ORDER BITS ONLY
MOVEI T1,0(P1) ;NOW MAP IN THE PAGE WITH THE BLOCK
LSH T1,-PGSFT
HRL T1,QUEFRK
MOVE T2,[.FHSLF,,TMPPG]
MOVX T3,PM%RD+PM%CNT+2 ;GET 2 PAGES IN CASE BLK CROSSES PAGE
PMAP
MOVEI T1,TMPADR(P2) ;GET ADDRESS OF START OF BLOCK
LOAD T2,SEBSIZ,(T1) ;GET SIZE OF BLOCK
ADDI T1,SEBHED ;DONT STORE HEADER
SUBI T2,SEBHED
SYERR ;PUT THIS BLOCK INTO ERROR LOG
HRRZ P1,TMPADR(P2) ;GET ADDRESS OF NEXT BLOCK
JUMPN P1,QUELOP ;IF ONE THERE, GO PROCESS IT
QUEDN1: MOVE T1,[SIXBIT /APRID/] ;GET APRID OF PROCESSOR
SYSGT ;TO DETERMINE KS10
CAIG T1,^D4096 ;IF GT 4096. THEN KS12
JRST QUEDON ;NO -- DON'T NEED HSB
MOVEI T1,SEC%HS ;SET UP LOGGING CODE
STOR T1,SEBERC
DMOVE T1,PG0ADR ;GET FIRST TWO WORDS OF DUMP (PHYSICAL 0,1
DMOVEM T1,HS%PC+3+HSBBUF ;STORE IN BUFFER
MOVE T1,[-HS%HSZ,,HS%HDZ] ;OFFSET POINTER
MOVEM T1,HS%PTR+4+HSBBUF ;BUFFER
MOVE T1,[PG0ADR+HSBADR,,HSBBUF+4+HS%HDZ] ;MOVE TO BUFFER
BLT T1,HSBBUF+4+HS%HSZ ;BLT LOW CORE DATA
MOVEI T1,HSBBUF ;SYSERR OUTPUT BUFFER
MOVEI T2,HS%LEN
SYERR ;OUTPUT ERROR
QUEDON: SETO T1, ;FIRST UNMAP PAGES
MOVE T2,[.FHSLF,,PG0PG] ;DO PAGE 0
SETZ T3,
PMAP
MOVE T2,[.FHSLF,,TMPPG] ;AND TEMP PAGES
MOVX T3,PM%CNT+2
PMAP
HRRZ T1,QUEJFN ;SEE IF THERE IS A JFN STILL AROUND
JUMPE T1,QUEKFK
CLOSF ;YES, CLOSE IT
JFCL
QUEKFK: MOVE T1,QUEFRK ;NOW KILL THE FORK
KFORK
RET ;ALL DONE
;CPYDMP - ROUTINE TO COPY <SYSTEM>DUMP.EXE TO <SYSTEM>DUMP.CPY
;
;ACCEPTS IN T1/ JFN OF ORIGINAL DUMP FILE
; T2/ # OF FILE PAGES TO COPY
; CALL CPYDMP
;RETURNS: +1 ALWAYS
CPYDMP: STKVAR <DMPJFN,DMPCNT,CPYJFN,CPYSIZ>
MOVEM T1,DMPJFN ;SAVE JFN OF ORIGINAL DUMP FILE
MOVEM T2,DMPCNT ;SAVE # OF FILE PAGES TO COPY
IMULI T2,1000 ;COMPUTE # OF WORDS TO BE COPIED
SUBI T2,1 ;COMPUTE # OF LAST WORD IN COPY FILE
MOVEM T2,CPYSIZ ;SAVE # OF WORDS IN FILE
MOVX T1,GJ%FOU!GJ%SHT ;GET A JFN TO MAKE THE COPY
HRROI T2,[ASCIZ /PS:<SYSTEM>DUMP.CPY;P770000/]
GTJFN ;GET IT
DMPERR: JRST [ HRROI T1,[ASCIZ /
? SETSPD: Failed to copy dump file because:
/]
PSOUT
MOVEI T1,.PRIOU ;THE DESTINATION
HRLOI T2,.FHSLF ;US
ERSTR ;OUTPUT THE ERROR
JFCL
JFCL
CALL UMPPGS ;UNMAP DUMP PAGES
RET] ;RETURN
MOVEM T1,CPYJFN ;SAVE JFN OF DUMP.CPY
MOVE T2,[440000,,OF%RD+OF%WR]
OPENF ;OPEN THE COPY FILE
JRST DMPERR ;FAILED
HRLI T1,.FBBYV ;CHANGE PROPER WORD
MOVX T2,FB%RET ;SET THE RETENTION COUNT
SETZ T3, ; TO INFINITY
CHFDB ;DO IT
ERJMP .+1 ;IGNORE ANY ERRORS
HRROI T1,[ASCIZ /
COPYING PREVIOUS SYSTEM DUMP TO:
/]
PSOUT
MOVEI T1,.PRIOU
MOVE T2,CPYJFN ;GET JFN OF DUMP.CPY FILE
SETZ T3, ;USE DEFAULT
JFNS ;OUTPUT THE THE FILE NAME
; ..
; ..
; SET UP TO COPY THE FILE
SETZM T4 ;START WITH FILE PAGE 0
CPYD10: MOVE T1,DMPCNT ;GET # OF PAGES TO COPY
JUMPLE T1,CPYD20 ;IF DONE, GO UNMAP THE PAGES
SUBI T1,CPYPGS ;COMPUTE # OF PAGES LEFT TO COPY
MOVEM T1,DMPCNT ;SAVE NEW # OF PAGES TO COPY
HRL T1,DMPJFN ;GET JFN OF ORIGINAL DUMP FILE
HRR T1,T4 ;GET FILE PAGE NUMBER
MOVE T2,[.FHSLF,,DMPPG] ;THIS FORK, FIRST PAGE TO MAP DUMP FILE
MOVEI T3,CPYPGS ;GET # OF PAGES TO MAP
SKIPGE DMPCNT ;NEED TO MAP LESS THAN THIS MANY ?
ADD T3,DMPCNT ;YES, COMPUTE # REMAINING TO BE MAPPED
TXO T3,PM%RD+PM%WR+PM%PLD+PM%CNT
PMAP ;MAP THE PAGES FROM THE ORIGINAL FILE
ERJMP DMPERR ;JUST IN CASE
HRL T1,CPYJFN ;GET JFN OF COPY FILE
HRR T1,T4 ;GET FILE PAGE NUMBER
MOVE T2,[.FHSLF,,CPYPG] ;THIS FORK, FIRST PAGE OF COPY FILE DATA
TXZ T3,PM%PLD ;NO PRE-LOADING
PMAP ;MAP THE COPY FILE
ERJMP DMPERR ;JUST IN CASE
MOVE T1,[DMPADR,,CPYADR] ;SET UP TO COPY DATA
BLT T1,CPYADR+CPYWDS-1 ;COPY DATA
ERJMP DMPERR ;IN CASE DISK IS FULL.
ADDI T4,CPYPGS ;COMPUTE ADDRESS OF NEXT FILE PAGE
JRST CPYD10 ;LOOP OVER ALL PAGES TO COPY
; HERE WHEN COPY IS COMPLETE
CPYD20: CALL UMPPGS ;UNMAP DUMP PAGES
HRRZ T1,CPYJFN ;GET JFN OF NEW FILE
HRLI T1,.FBSIZ ;GET OFFSET TO EOF POINTER
SETOM T2 ;CHANGE ALL BITS IN THE WORD
MOVE T3,CPYSIZ ;GET # OF LAST WORD IN FILE
CHFDB ;SET THE EOF POINTER
HRRZ T1,CPYJFN ;GET JFN OF COPY FILE
CLOSF ;CLOSE NEW FILE
JRST DMPERR ;FAILED, REPORT ERROR
RET ;RETURN
;COPY DUMP CONTINUED....
;ROUTINE TO UNMAP DUMP PAGES ON NORMAL COMPLETION OR ERROR
UMPPGS: SETOM T1 ;UNMAP THE PAGES
MOVE T2,[.FHSLF,,DMPPG] ;PAGES MAPPED TO ORIGINAL FILE
MOVE T3,[PM%CNT+CPYPGS] ;NUMBER OF PAGES TO UNMAP
PMAP ;UNMAP THE PAGES
MOVE T2,[.FHSLF,,CPYPG] ;PAGES MAPPED TO COPY FILE
PMAP ;UNMAP THE PAGES
RET ;AND DONE
; CACHE REFILL ALGORITHM RAM LOADING INSTRUCTIONS
REFILL: JFCL ;TURN ON USER IOT
RET ;FAILED
BLKO APR,0
BLKO APR,100004
BLKO APR,200010
BLKO APR,300014
BLKO APR,400020
BLKO APR,500024
BLKO APR,600030
BLKO APR,700034
BLKO APR,300040
BLKO APR,100044
BLKO APR,200050
BLKO APR,300054
BLKO APR,200060
BLKO APR,100064
BLKO APR,200070
BLKO APR,300074
BLKO APR,700100
BLKO APR,100104
BLKO APR,200110
BLKO APR,700114
BLKO APR,100120
BLKO APR,100124
BLKO APR,200130
BLKO APR,700134
BLKO APR,600140
BLKO APR,500144
BLKO APR,600150
BLKO APR,700154
BLKO APR,500160
BLKO APR,500164
BLKO APR,600170
BLKO APR,700174
BLKO APR,000200
BLKO APR,300204
BLKO APR,200210
BLKO APR,300214
BLKO APR,000220
BLKO APR,200224
BLKO APR,200230
BLKO APR,300234
BLKO APR,000240
BLKO APR,100244
BLKO APR,200250
BLKO APR,300254
BLKO APR,400260
BLKO APR,500264
BLKO APR,600270
BLKO APR,700274
BLKO APR,000300
BLKO APR,700304
BLKO APR,700310
BLKO APR,700314
BLKO APR,000320
BLKO APR,000324
BLKO APR,000330
BLKO APR,700334
BLKO APR,400340
BLKO APR,600344
BLKO APR,600350
BLKO APR,600354
BLKO APR,400360
BLKO APR,400364
BLKO APR,600370
BLKO APR,400374
BLKO APR,300400
BLKO APR,100404
BLKO APR,300410
BLKO APR,300414
BLKO APR,100420
BLKO APR,100424
BLKO APR,100430
BLKO APR,300434
BLKO APR,000440
BLKO APR,700444
BLKO APR,700450
BLKO APR,700454
BLKO APR,000460
BLKO APR,000464
BLKO APR,000470
BLKO APR,700474
BLKO APR,000500
BLKO APR,100504
BLKO APR,200510
BLKO APR,300514
BLKO APR,400520
BLKO APR,500524
BLKO APR,600530
BLKO APR,700534
BLKO APR,400540
BLKO APR,500544
BLKO APR,500550
BLKO APR,700554
BLKO APR,400560
BLKO APR,500564
BLKO APR,400570
BLKO APR,700574
BLKO APR,000600
BLKO APR,100604
BLKO APR,200610
BLKO APR,200614
BLKO APR,000620
BLKO APR,100624
BLKO APR,200630
BLKO APR,100634
BLKO APR,000640
BLKO APR,500644
BLKO APR,600650
BLKO APR,600654
BLKO APR,000660
BLKO APR,500664
BLKO APR,600670
BLKO APR,000674
BLKO APR,400700
BLKO APR,500704
BLKO APR,600710
BLKO APR,500714
BLKO APR,400720
BLKO APR,500724
BLKO APR,600730
BLKO APR,400734
BLKO APR,000740
BLKO APR,100744
BLKO APR,200750
BLKO APR,300754
BLKO APR,400760
BLKO APR,500764
BLKO APR,600770
BLKO APR,700774
RET ;AND DONE
END <ENVLEN,,ENTVEC>