IDENT INSTALL,FETS
ABS
SST
ENTRY INSTALL
ENTRY RFL=
ENTRY SSJ=
SYSCOM B1 DEFINE (B1) = 1
TITLE INSTALL - INSTALL DEADSTART FILE.
*COMMENT INSTALL - INSTALL DEADSTART FILE.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
SPACE 4,10
***** INSTALL - INSTALL DEADSTART FILE.
*
* P. D. HAAS. 78/02/28.
* D. R. HILGREN. 78/08/18.
SPACE 4,10
*** *INSTALL* COPIES A FILE TO A MASS STORAGE DEVICE AND
* UPDATES THE DEADSTART SECTOR SO THAT THE RESULTING FILE CAN BE
* DEADSTARTED. THE DEVICE SPECIFIED MUST BE A SINGLE UNIT
* *LDAM* TYPE DEVICE WHICH IS *ON*, AVAILABLE, AND HAS HAD *CTI*
* INSTALLED ON IT.
SPACE 4,10
*** CONTROL CARD CALL.
*
* INSTALL,LFN,EQXXX.
*
* LFN = MASS STORAGE FILE (ASSIGNED TO THE CONTROL POINT)
* WHICH IS TO BE INSTALLED AS A SYSTEM DEADSTART
* FILE. IF *LFN* IS OMITTED, DEFAULT IS FILE
* *SYSTEM* (WHICH MUST BE ASSIGNED TO THE CONTROL
* POINT). *SDF* IS A RESERVED FILE NAME AND CANNOT
* BE USED AS *LFN*.
*
* XXX = EST ORDINAL ON WHICH *LFN* IS TO BE WRITTEN.
*
* CALLING JOB MUST BE SYSTEM ORIGIN OR MUST BE VALIDATED
* FOR SYSTEM ORIGIN PRIVILEGES. IF THE DEADSTART FILE
* TO BE INSTALLED IS ON TAPE, IT MUST FIRST BE COPIED TO
* MASS STORAGE.
SPACE 4,10
*** DAYFILE MESSAGES.
*
* * DEADSTART FILE FORMAT ERROR.* - AN ERROR WAS DETECTED IN
* THE DIRECTORY OF THE DEADSTART FILE.
*
* * INSTALL - ARGUMENT ERROR.* - AN ERROR WAS DETECTED IN THE
* PARAMETERS ASSOCIATED WITH THE *INSTALL* CONTROL STATEMENT.
*
* * SDF INSTALLATION COMPLETE.* - SYSTEM DEADSTART FILE
* INSTALLATION IS COMPLETED.
SPACE 4,10
** COMMON DECKS.
*CALL COMCMAC
*CALL COMCCMD
*CALL COMSPRD
*CALL COMSSSD
*CALL COMSSSJ
SPACE 4,10
**** ASSEMBLY CONSTANTS.
CBUFL EQU 22000B BUFFER LENGTH
* CODE REQUIRES CBUFL DIVISIBLE BY 3
ERRNZ CBUFL/3*3-CBUFL
****
****
FETS SPACE 4,10
** FETS.
ORG 104B
FETS BSS 0
I BSS 0 INSTALL FILE
SYSTEM RFILEB TBUF,TBUFL,FET=7
O BSS 0 *SDF* FILE
SDF RFILEB CBUF,CBUFL,FET=6,EPR
TITLE DATA STORAGE.
** DATA STORAGE.
EORF CON 1 CURRENT BLOCK EOR FLAG
SPACE 4,10
* SPECIAL ENTRY POINTS.
SSJ= BSS 0
VFD 12/0,24/-0,12/SYCS,12/IRSI
BSSZ SSJ=+SSJL-*
SPACE 4,10
* *1IS* FUNCTION REQUESTS.
VIFF VFD 18/0L1IS,6/0,12/1,12/0,12/I
IDFF VFD 18/0L1IS,6/0,12/2,12/O,12/I
CFIF VFD 18/0L1IS,6/0,12/3,12/O,12/I
PMEF VFD 18/0L1IS,6/0,12/4,12/O,12/0
TITLE MAIN PROGRAM.
INSTALL SPACE 4,10
** INSTALL - MAIN PROGRAM.
INSTALL BSS 0
SB1 1 PRESET PROGRAM
RJ PRS
RJ CDF COPY DEADSTART FILE
INS1 R= X7,2
SX1 CFIF COMPLETE *SDF* INSTALLATION
R= A7,ARGR
SYSTEM SPC,,X1 CALL *1IS*
SA1 CFIF
ZR X1,INS2 IF *1IS* ASSIGNED
RECALL
EQ INS1 RETRY *SYSTEM REQUEST
INS2 RECALL ARGR WAIT *1IS* COMPLETE
MESSAGE (=C* SDF INSTALLATION COMPLETE.*)
ENDRUN
TITLE SUBROUTINES.
CDF SPACE 4,10
** CDF - COPY DEADSTART FILE.
*
* ENTRY (B2) = 2.
*
* USES A - ALL.
* B - 3, 4, 5, 6, 7.
* X - ALL.
*
* CALLS *1IS*.
*
* MACROS ABORT, MESSAGE, READCW, RECALL, SYSTEM, WRITECW.
*
* NOTE WHEN CHECKING FOR FET COMPLETE AND DATA IN THE BUFFER,
* THE FET STATUS MUST BE PICKED UP BEFORE THE BUFFER
* POINTER.
CDF SUBR ENTRY/EXIT
SB5 CBUF+CBUFL SET LIMIT ADDRESS
SA2 I+3
BX0 X0-X0 INDICATE NO BLOCKS AVAILABLE OR COMPLETE
SA0 X2 INITIALIZE INPUT PSEUDO OUT POINTER
EQ CDF13 INITIATE CONTROL WORD READ
* CHECK FOR INPUT BLOCK AVAILABLE.
CDF1 SA5 I CHECK INPUT FILE STATUS
SA3 I+2 CHECK INPUT IN = PSEUDO OUT POINTER
BX0 X0-X0 INDICATE NO BLOCKS AVAILABLE OR COMPLETE
SX1 A0
IX1 X3-X1
LX5 59-0
NZ X1,CDF3 IF INPUT BLOCK AVAILABLE
PL X5,CDF8 IF BUFFER BUSY
LX5 59-11-59+0
NG X5,CDF15 IF PARITY ERROR STATUS IN FET
LX5 59-3-59+11
PL X5,CDF8 IF NOT EOF
* PROCESS EOF.
RECALL O WAIT OUTPUT FILE NOT BUSY
SA3 O+2 CHECK DATA IN BUFFER
SA4 A3+B1
IX7 X3-X4
ZR X7,CDF2 IF BUFFER EMPTY
WRITECW X2,R FLUSH BUFFER
CDF2 SA3 CDFB
SA1 X2+B1
SA4 A3+B1
BX6 X3 SET EOF CONTROL WORDS IN BUFFER
LX7 X4
SA6 X1
SA7 X1+B1
SX6 A6 OUT = FIRST
SX7 X1+B2 IN = FIRST+2
SA6 A1+B2
SA7 A1+B1
WRITECW X2,R WRITE EOF
EQ CDFX RETURN
* PROCESS INPUT BLOCK.
CDF3 SX0 B1 INDICATE INPUT BLOCK TRANSFERRED
SA4 A0 CRACK CONTROL WORD HEADER
SX2 5
SX7 X4+4
IX7 X7/X2 CALCULATE WORD COUNT
AX4 36
SB6 X7
SA2 EORF CHECK FOR PREVIOUS EOR
SB7 X4 PRU SIZE
ZR X2,CDF6 IF PREVIOUS BLOCK NOT EOR
SB4 A0+B1
NE B4,B5,CDF4 IF NO WRAP AROUND
SB4 CBUF SET FIRST
CDF4 ZR B6,CDF6 IF ZERO LENGTH RECORD
MX6 12
SA1 B4 GET RECORD NAME
BX6 X6*X1
LX6 12
SX6 X6-7700B
NZ X6,CDF5 IF NOT 77 TABLE
SB3 B4+B1
SA1 B4+B1
NE B3,B5,CDF5 IF NO WRAP AROUND
SA1 CBUF
CDF5 MX7 42
BX7 X7*X1
SA7 CDFA+1 ENTER NAME IN MESSAGE
MESSAGE A7-B1,1 DISPLAY RECORD NAME
CDF6 SB4 A0+B6 ADVANCE POINTER
SX7 B6-B7 NO EOR IF FULL BLOCK
SB4 B4+B2 SKIP CONTROL WORDS
SB3 B4-B5
LT B4,B5,CDF7 IF NO WRAP AROUND
SB4 B3+CBUF
CDF7 SX6 B4
SA7 EORF SAVE EOR FLAG
SA1 A0 GET CONTROL WORD HEADER
NG X1,CDF15 IF ERROR OCCURRED ON THIS BLOCK
* TRANSFER BLOCK TO OUTPUT.
SA6 O+2 ADVANCE OUTPUT IN POINTER
SB0 0
SA0 B4+ ADVANCE INPUT PSEUDO OUT POINTER
* CHECK FOR REINITIATE CONTROL WORD WRITE.
CDF8 SA2 O CHECK OUTPUT FILE STATUS
LX2 59-0
SA1 A2+B2
PL X2,CDF10 IF BUFFER BUSY
SA2 A1+1 CHECK BUFFER THRESHOLD
SX3 CBUFL/3
IX1 X1-X2 (IN-OUT)
IX2 X1-X3 (IN-OUT) - 1/3(BUFFER SIZE)
ZR X1,CDF10 IF BUFFER EMPTY
PL X1,CDF9 IF IN .GT. OUT
LX3 1
SB0 0
IX2 X3+X1 2/3(BUFFER SIZE) - (OUT-IN)
CDF9 NG X2,CDF10 IF BUFFER THRESHOLD NOT REACHED
WRITECW O REINITIATE CONTROL WORD WRITE
* CHECK FOR OUTPUT BLOCK WRITTEN.
CDF10 SA1 O+3 CHECK OUTPUT OUT = INPUT OUT
SA2 I+3
IX3 X1-X2
ZR X3,CDF11 IF BLOCK NOT WRITTEN
BX6 X1
SX0 1 INDICATE OUTPUT BLOCK COMPLETE
SA6 I+3 UPDATE INPUT OUT = OUTPUT OUT
* CHECK FOR REINITIATE CONTROL WORD READ.
CDF11 SA4 I CHECK INPUT FILE STATUS
LX4 59-0
SA1 A4+B2
PL X4,CDF14 IF BUFFER BUSY
LX4 59-3-59+0
SA2 A1+B1
NG X4,CDF14 IF EOF/EOI ENCOUNTERED
SX3 CBUFL/3 CHECK BUFFER THRESHOLD
IX1 X1-X2 (IN-OUT)
IX2 X3+X1 1/3(BUFFER SIZE) + (IN-OUT)
ZR X1,CDF13 IF BUFFER EMPTY
NG X1,CDF12 IF OUT .GT. IN
LX3 1
IX2 X1-X3 (IN-OUT) - 2/3(BUFFER SIZE)
CDF12 PL X2,CDF14 IF BUFFER THRESHOLD NOT REACHED
CDF13 READCW I,17B INITIATE CONTROL WORD READ TO EOF
* CHECK FOR RECALL.
CDF14 NZ X0,CDF1 IF INPUT AND/OR OUTPUT BLOCKS TRANSFERRED
RECALL WAIT FOR DATA TRANSFER
EQ CDF1 CHECK FOR INPUT BLOCKS
* PROCESS PARITY ERROR.
CDF15 SX1 PMEF PROCESS MASS STORAGE ERROR
SYSTEM SPC,,X1 CALL *1IS*
SA1 PMEF
ZR X1,CDF16 IF *SYSTEM* REQUEST PERFORMED
RECALL
EQ CDF15 RETRY *SYSTEM* REQUEST
CDF16 ABORT
CDFA DATA 10H COPYING
CON 0,0
CDFB VFD 24/100B,36/0 EOF CONTROL WORDS
VFD 12/17B,48/0
SPACE 4,10
** COMMON DECKS.
*CALL COMCCIO
*CALL COMCSYS
SPACE 4,10
** BUFFERS.
USE BUFFERS
CBUF BSS 0
RFL= EQU CBUF+CBUFL+4
TITLE PRESET.
PRS SPACE 4,10
** PRS - PRESET PROGRAM.
*
* ENTRY (B1) = 1.
*
* EXIT (B2) = 2.
*
* USES A - 1, 2, 3, 4, 5, 6, 7.
* B - 2, 3, 7.
* X - ALL.
*
* CALLS DXB, *1IS*.
*
* MACROS ABORT, GETSPS, MESSAGE, READ, RECALL, REWIND, SKIPB,
* SYSTEM.
PRS SUBR ENTRY/EXIT
GETSPS CHECK USER ACCESS
SA1 ACTR GET ARGUMENT COUNT
SA2 I
SB7 X1
ZR B7,PRS2 IF NO ARGUMENTS
SB7 B7-B1
NE B7,B1,PRS6 IF ILLEGAL ARGUMENT COUNT
* PROCESS INPUT FILE NAME.
R= A5,ARGR INPUT FILE NAME
MX0 42
SX4 3RSDF
BX7 X0*X5
LX4 42
ZR X7,PRS1 IF NULL NAME (DEFAULT TO *SYSTEM*)
BX4 X7-X4
SX3 X2
ZR X4,PRS6 IF FILE NAME CONFLICT
BX7 X7+X3
SA7 A2
* PROCESS EST ORDINAL.
PRS1 SA5 A5+B1 GET NEXT ARGUMENT
LX5 12
SX2 X5
BX5 X5-X2
SX2 X2-2REQ
SB7 0
NZ X2,PRS6 IF ILLEGAL PARAMETER
RJ DXB CONVERT EST ORDINAL
NZ X4,PRS6 IF CONVERSION ERROR
SA6 O+5 SET EST ORDINAL IN *SDF* FET
PRS2 R= X7,2
SX1 VIFF VALIDATE INSTALL FILE
R= A7,ARGR
SYSTEM SPC,,X1 CALL *1IS*
SA1 VIFF
ZR X1,PRS2.1 IF *SYSTEM* REQUEST PERFORMED
RECALL
EQ PRS2 RETRY *SYSTEM* REQUEST
PRS2.1 SB2 B1+B1
RECALL ARGR WAIT *1IS* COMPLETE
EREXIT CDF15 SET ERROR EXIT PROCESSOR ADDRESS
SX7 B2
SX3 B1
LX7 29-1 POSITION RANDOM REWRITE FLAG
BX6 X3+X7
SA6 O+6 SET RANDOM REWRITE REQUEST
* READ DIRECTORY RECORD ON INSTALL FILE.
SKIPB I,2,R BACKSPACE ACROSS EOF AND DIRECTORY
SA1 I+6
BX6 X1
AX6 30
PRS3 SX7 TBUF SET IN = FIRST
SA6 I+6 SET RANDOM ADDRESS FOR READ
SA7 X2+B2
SA6 A6+B1
READ X2,R
SA4 X2+B2 IN POINTER
SA3 A4+B1
SA1 X3 CHECK FIRST WORD OF RECORD
LX1 18
SX6 X1-770000B
LX1 6
SB3 X1+B1
NZ X6,PRS7 IF NOT 7700 (PRFX) TABLE
SX7 X1-16B
NZ X7,PRS7 IF TABLE WORD COUNT INCORRECT
SA5 X3+B3 CHECK RECORD TYPE
LX5 18
SX7 X5-700000B
SA1 X2
SA3 X3+B1
NZ X7,PRS7 IF NOT OPLD RECORD
LX1 59-4 CHECK BUFFER STATUS
MX0 42+12
PL X1,PRS7 IF NOT EOR (BUFFER TOO SMALL)
SX6 10B
LX0 12
BX6 X3+X6 DIRECTORY NAME + RECORD TYPE OPLD
SA5 A5-B1
SA6 X4 STORE SEARCH PARAMETER AT (IN)
* SEARCH DIRECTORY FOR FIRST OPLD ENTRY.
PRS4 BX7 X0*X3
SA5 A5+2 GET DIRECTORY ENTRY
BX3 X5-X6
NZ X7,PRS4 IF NOT DIRECTORY OPLD ENTRY
SX3 A5-B2
BX6 X4-X3
ZR X6,PRS7 IF NO OPLD ENTRY FOR DIRECTORY
SA1 I+7 RANDOM ADDRESS FOR CURRENT DIRECTORY
SA5 A5-1
IX7 X5-X1
BX6 X5 RANDOM ADDRESS OF FIRST DIRECTORY
NZ X7,PRS3 IF NOT FIRST DIRECTORY ON FILE
SA2 PRSA
SA3 A4+B1 SET UP *OSB* SEARCH
BX6 X2
SA1 A1-B1
SB3 X3+B3
AX1 30
SX7 B2
SA6 X4 STORE SEARCH PARAMETER AT (IN)
SX2 B1
IX1 X1+X7 RANDOM ADDRESS OF EOI
SA5 B3-B1
LX2 47 POSITION RANDOM ACCESS BIT
BX3 X6
* SEARCH DIRECTORY FOR *OSB* ENTRY.
PRS5 BX7 X0*X3
SA5 A5+2
BX3 X5-X6
NZ X7,PRS5 IF NO MATCH
SX3 A5-2
BX6 X4-X3
SA5 A5-B1
ZR X6,PRS7 IF *OSB* NOT FOUND
LX5 36
BX6 X5+X1
SA6 I+5 SAVE RELATIVE SECTOR ADDRESS OF *OSB*
MX0 42
BX0 -X2*X0 CLEAR RANDOM ACCESS BIT IN MASK
SA1 A4-B1
AX2 47-44 POSITION ERROR PROCESSING FLAG
BX1 X0*X1
SX7 CBUF RESET BUFFER POINTERS
BX1 X1+X2
BX6 X1+X7
SA6 A1
SA7 A1+B1
SA7 A7+B1
PRS5.1 R= X6,2
SX1 IDFF INITIALIZE *SDF*
R= A6,ARGR
SYSTEM SPC,,X1 CALL *1IS*
SA1 IDFF
ZR X1,PRS5.2 IF *SYSTEM* REQUEST PERFORMED
RECALL
EQ PRS5.1 RETRY *SYSTEM* REQUEST
PRS5.2 REWIND I REWIND INSTALL FILE
RECALL ARGR WAIT *1IS* COMPLETE
EQ PRSX RETURN
PRS6 MESSAGE PRSB,0 * INSTALL - ARGUMENT ERROR.*
ABORT
PRS7 MESSAGE PRSC,0 * DEADSTART FILE FORMAT ERROR.*
ABORT
PRSA VFD 42/0LOSB,6/0,12/1
PRSB DATA C* INSTALL - ARGUMENT ERROR.*
PRSC DATA C* DEADSTART FILE FORMAT ERROR.*
SPACE 4,10
** COMMON DECKS.
*CALL COMCCPM
*CALL COMCDXB
SPACE 4,10
TBUF BSS 0
TBUFL EQU CBUF+CBUFL-TBUF
SPACE 4,10
END