Trailing-Edge
-
PDP-10 Archives
-
bb-bt99e-bb
-
plrlbp.c08
There is 1 other file named plrlbp.c08 in the archive. Click here to see a list.
REP 1/4 ;08C1
SUBTTL L$INIT -- Initialization For The Label Processor
L$INIT::POPJ P, ;FOR NOW, JUST RETURN
SUBTTL L$MDC -- Routine to Process the MDC message
WIT
SUBTTL L$INIT - Initialization For The Label Processor
L$INIT::MOVEI S1,0 ;GET SEQUENCE ERROR CHECK CODE
MOVEM S1,G$SEQC## ;SET IT (DEBUGGING HACK IF NON-ZERO)
POPJ P, ;RETURN
SUBTTL L$MDC - Routine to Process the MDC message
REP 46/6 ;08C2
JUMPF RVOL.3 ;TRIED ALL DENSITIES !!!
SETZM G$TERM## ;CLEAR THE ERROR FLAGS
JRST RVOL.1 ;AND TRY AGAIN
WIT
JUMPF RVOL.6 ;TRIED ALL DENSITIES !!!
SETZM G$TERM## ;CLEAR THE ERROR FLAGS
JRST RVOL.1 ;AND TRY AGAIN
RVOL.6: MOVEI S1,.TFD00 ;SET DEFAULT DENSITY BECAUSE SOME
PUSHJ P,I$SDEN## ; DRIVE DONT DO AUTO-DENSITY DETECT
JRST RVOL.3 ;FINISH UP
REP 1/8 ;08C3
SUBTTL L$MOUN -- Routine to Process Mount Message
WIT
SUBTTL L$RUVL - Read UVL1 record
; This routine is used by PLRINI to read the owner and protection
; information stored in the UVL1 record. This is needed when tapes
; will be re-initialized (/NEW-VOLUME processing).
L$RUVL::PUSHJ P,L$CLEF ;CLEAR PENDING ERRORS
PUSHJ P,T$OPEN## ;OPEN
JUMPF .POPJ ;RETURN ON FAILURES
CAIE LT,LT.SL ;ANSI?
CAIN LT,LT.SUL ;ANSI WITH USER LABELS?
SKIPA ;YES
$RETT ;NO USEFUL INFO ON THIS TAPE
PUSHJ P,T$RDRC## ;READ A RECORD
JUMPF .POPJ ;RETURN ON FAILURES
MOVE T1,[CPTRI ^D1,0(BUF)] ;CHECK LABEL IDENTIFIER (CP 1-4)
MOVE T2,UVLPTR ;POINT TO "UVL1"
HRRZI T3,4 ;4 CHARACTERS
HRL T3,CVTTAB(LT) ;CONVERSION ROUTINE
PUSHJ P,STRCMP ;COMPARE
JUMPT RUVL1 ;UVL1, PROCEED
MOVEI S1,'BBL' ;NO MATCH
PUSHJ P,T$POS## ;BACKUP THE TAPE
JUMPF .POPJ ;RETURN ON FAILURES
$RETT ;DONE HERE
; Protection
RUVL1: MOVE T1,[CPTRI ^D5,0(BUF)] ;POINT AT PROT (CP 5-10)
HRRZI T2,6 ;6 CHARS, NO CONVERT
HRL T2,CVTTAB(LT) ;CONVERSION IF NECESSARY
PUSHJ P,STROCT ;MAKE IT A NUMBER
SKIPT ;CHECK FOR JUNK IN LABELS
MOVE S2,G$PSTP## ;DEFAULT TO STANDARD FILE PROTECTION
SKIPGE S1,TCB.IP(B) ;WAS ONE SPECIFIED?
MOVE S1,S2 ;OLD TAPE PROT WILL BE USED
CAILE S1,777 ;IT MUST BE REASONABLE
MOVE S1,G$PSTP## ;USE STANDARD FILE PROTECTION
MOVEM S1,TCB.IP(B) ;STORE PROTECTION CODE
; PPN
RUVL2: MOVE T1,[CPTRI ^D11,0(BUF)] ;POINT AT PROJ # (CP 11-16)
HRRZI T2,6 ;6 CHARS, NO CONVERT
HRL T2,CVTTAB(LT) ;CONVERSION IF NECESSARY
PUSHJ P,STROCT ;GET A #
JUMPF .RETT ;NOT A NUMBER?
MOVE P2,S2 ;SAVE PROJ # IN P2 FOR NOW
MOVE T1,[CPTRI ^D17,0(BUF)] ;POINT AT PROG # (CP 17-22)
HRRZI T2,6 ;6 CHARS, NO CONVERSION
HRL T2,CVTTAB(LT) ;CONVERSION IF NECESSARY
PUSHJ P,STROCT ;CHANGE STRING TO OCTAL NUMBER
JUMPF .RETT ;NOT A NUMBER
MOVE T1,P1 ;GET PROT IN T1
HRRZ T2,S2 ;AND MAKE T2=PPN
HRL T2,P2 ;...
MOVEM T2,TCB.VO(B) ;STORE OWNER (PPN) FOR LATER REFERENCE
$RETT ;RETURN
SUBTTL L$MOUN - Routine to Process Mount Message
REP 13/8 ;08C4
CAXE LT,LT.BLP ;Is it bypass labels?
$RETT ;Keep the ball rolling...
MOVEI S1,'REW' ;Get code for rewind
PJRST T$POS## ;And leave tape at load point
SUBTTL L$FINP -- Routine To Handle Call On First Input
WIT
MOVEI S1,'REW' ;GET REWIND CODE
JMPUNL LT,T$POS## ;GO DO A REWIND IF UNLABELED
MOVEI S1,1 ;ELSE SET INITIAL FILE
STORE S1,TCB.PS(B),TP.POS ; SEQUENCE NUMBER TO ONE
PJRST I$CLLP## ;AND ZAP THE LABEL PARAMETER BLOCK
SUBTTL L$FINP - Routine To Handle Call On First Input
REP 1/10 ;08C5
SUBTTL L$FOUT -- Routine to Process First Output Message
WIT
SUBTTL L$FOUT - Routine to Process First Output Message
REP 14/10 ;08C6
JUMPN S1,FOUT.7 ;YES, GIVE WRITE LOCK ERROR
WIT
JUMPN S1,FOUT.9 ;YES, GIVE WRITE LOCK ERROR
REP 34/10 ;08C7
MOVEI S1,[ITEXT (<Volume protection prohibits output>)]
WIT
TXNE P2,TS.NOW ;WHOLE TAPE WRITE-PROTECTED?
JRST [PUSHJ P,VPCCHK ;YES--CHECK WITH OPERATOR
JUMPF FOUT.8 ;OPR SAID ABORT
$RETT] ;DONE
REP 45/10 ;08C8
MOVEI S1,[ITEXT (<Volume protection prohibits output>)]
PUSHJ P,O$LERR## ;TELL OPR OF PROTECTION FAILURE
;AND WAIT FOR HIS RESPONSE
JUMPF FOUT.7 ;HE SAID ABORT
WIT
PUSHJ P,VPCCHK ;QUERY OPERATOR IF NECESSARY
JUMPF FOUT.8 ;GO ABORT (TERMINATION CODE SET)
;ELSE PROCEED (TERMINATION CODE ZEROED)
REP 86/10 ;08C9
ZERO TCB.BC(B) ;CLEAR BLOCK COUNT
WIT
SETZM TCB.BC(B) ;CLEAR BLOCK COUNT
REP 99/10 ;08C10
FOUT.6: SKIPA S1,[LE.IOP] ;ILLEGAL OPERATION
FOUT.7: MOVEI S1,LE.WLK ;SAY WRITE LOCK ERROR
WIT
FOUT.6: MOVEI S1,LE.IOP ;ILLEGAL OPERATION
MOVEM S1,G$TERM## ;SET TERMINATION CODE
JRST FOUT.8 ;FINISH UP
FOUT.7: MOVEI S1,LE.VPF ;ASSUME VOLUME PROTECTION FAILURE
TXNE P2,TS.EXP ;IS IT UNEXPIRED FILE ???
MOVEI S1,LE.UEF ;YES
TXNE P2,TS.WLK ;IS IT WRITE-LOCKED?
FOUT.9: MOVEI S1,LE.WLK ;YES
REP 1/11 ;08C11
SUBTTL L$CLIN -- Routine to Process Input Close
WIT
SUBTTL L$CLIN - Routine to Process Input Close
REP 1/12 ;08C12
SUBTTL L$CLOU -- Routine to Process Close Output
WIT
SUBTTL L$CLOU - Routine to Process Close Output
REP 17/12 ;08C13
STORE S1,TCB.BC(B) ;SAVE IT IN TCB
WIT
ADDM S1,TCB.BC(B) ;SAVE IT IN TCB
REP 1/13 ;08C14
SUBTTL L$EOT -- Routine to Process EOT
WIT
SUBTTL L$EOT - Routine to Process EOT
REP 12/13 ;08C15
STORE S1,TCB.BC(B) ;STORE IT IN THE TCB
WIT
ADDM S1,TCB.BC(B) ;STORE IT IN THE TCB
REP 1/14 ;08C16
SUBTTL L$FEOV -- Process User Request to Force End Of Volume
WIT
SUBTTL L$FEOV - Process User Request to Force End Of Volume
REP 1/15 ;08C17
SUBTTL L$TMAR -- Routine Called On Encountering a Tape Mark
WIT
SUBTTL L$TMAR - Routine Called On Encountering a Tape Mark
REP 1/18 ;08C18
SUBTTL L$POSI -- MTAPE and TAPOP. Positioning functions
WIT
SUBTTL L$POSI - MTAPE and TAPOP. Positioning functions
REP 21/18 ;08C19
POS.1: LOAD S1,TCB.ST(B) ;Get status
WIT
POS.1: MOVX S1,TS.ILC ;ZAP THE INHIBIT
ANDCAB S1,TCB.ST(B) ; LABEL CLEAR BIT
REP 54/18 ;08C20
LOAD S1,TCB.IN(B) ;GET SAVED INFO FROM MESSAGE
CAIE S1,POSWBT ;Don't clear params on write blank tape
WIT
MOVX S1,TS.ILC ;BIT TO TEST
TDNN S1,TCB.ST(B) ;INHIBIT LABEL PARAMETER CLEARING?
INS 126/18 ;08C21
; HERE TO STORE TERMINATION CODE AND INHIBIT LABEL PARAMETER CLEAR
PS.TRM: MOVEM S1,G$TERM## ;SAVE TERMINATION CODE
PS.ILC: MOVX S1,TS.ILC ;INHIBIT LABEL PARAMETER BLOCK CLEARING
IORM S1,TCB.ST(B) ;DURING POST-POSITIONING CLEANUP
POPJ P, ;RETURN
REP 10/20 ;08C22
JRST WTM.3 ;NO, GIVE ERROR
WIT
JRST WTM.E ;NO, GIVE ERROR
TXNN P2,TS.OUT ;DOING OUTPUT?
JRST WTM.3 ;NO--TRUNCATING TAPE
REP 16/20 ;08C23
MOVX S1,LE.EOF ;GET END OF FILE FOR TERMINATION CODE
STORE S1,G$TERM ;SET FOR USER
$RETT ;FINE, EXIT
WTM.3: MOVEI S1,LE.PSE ;FLAG POSITIONING ERROR
WIT
JRST WTM.4 ;FINISH UP
WTM.3: PUSHJ P,L$FOUT ;TRUNCATING TAPE IMPLIES WRITE ACCESS
JUMPF .RETF ;PROPAGATE ERROR BACK
MOVEI S1,'BBL' ;BACKUP OVER
PUSHJ P,T$POS## ; THE TAPE MARK
JUMPF .RETF ;???
MOVEI S1,'BFL' ;BACKUP OVER THE HEADER RECORDS
PUSHJ P,T$POS## ; RECORDS WE JUST WROTE
JUMPF .RETF ;???
PUSHJ P,T$WRTM## ;WRITE A TAPE MARK
PUSHJ P,T$WRTM## ;ONE MORE
MOVEI S1,'BBL' ;BACKSPACE OVER THE LAST
PUSHJ P,T$POS## ; TAPE MARK SO SITTING AT LEOT
JUMPF .RETF ;???
WTM.4: MOVEI S1,LE.EOF ;GET END OF FILE FOR TERMINATION CODE
STORE S1,G$TERM ;SET FOR USER
$RETT ;ALL DONE
WTM.E: MOVEI S1,LE.PSE ;FLAG POSITIONING ERROR
REP 22/22 ;08C24
TXNE P2,TS.ATM ;EOT
PJRST PS.BSF ;YES, DO BACKSPACE FILE OPERATION
WIT
TXZ P2,TS.ATM ;CLEAR AFTER TAPE MARK
TXO P2,TS.IUD ;WILL BE IN USER DATA
MOVEM P2,TCB.ST(B) ;UPDATE
JMPUNL LT,BSR.2 ;ONWARD IF UNLABELED
MOVEI S1,'BFL' ;NEED TO BACKSPACE
PUSHJ P,T$POS## ; OVER THE EOF RECORDS
JUMPF .RETF ;CHECK FOR ERRORS
MOVEI S1,'BFL' ;AND BACKUP OVER
PUSHJ P,T$POS## ; THE TAPE MARK TOO
JUMPF .RETF ;CHECK FOR ERRORS
MOVEI S1,'SBL'
PUSHJ P,T$POS##
JUMPF .RETF
PUSHJ P,T$RDRC## ;READ EOF1 LABEL
JUMPF .RETF ;CAN'T
PUSHJ P,VEREOF ;VERRIFY EOF, GET FILE NAME, ETC.
JUMPF .RETF ;NO GOOD
LOAD S1,TCB.PS(B),TP.POS ;GET POSITION
SUBI S1,2 ;ACCOUNT FOR EOF CHECK AND FORWARD SKIP
STORE S1,TCB.PS(B),TP.POS ;UPDATE
PUSHJ P,I$STLP## ;SET LABEL PARAMETERS IN THE MONITOR
MOVEI S1,'BBL' ;BACKSPACE OVER
PUSHJ P,T$POS## ; THE TAPE MARK
JUMPF .RETF ;CAN'T
MOVEI S1,'BFL' ;BACKSPACE OVER
PUSHJ P,T$POS## ; THE EOF RECORDS
JUMPF .RETF ;CAN'T
MOVE S1,TCB.ST(B) ;GET STATUS WORD
TXZ S1,TS.ATM ;NO LONGER AFTER A TAPE MARK
TXO S1,TS.IUD ;POSITIONED IN USER DATA
MOVEM S1,TCB.ST(B) ;UPDATE
PUSHJ P,PS.ILC ;INHIBIT LABEL CLEAR
$RETT ;RETURN AND LET USER APPEND TO THE FILE
REP 43/23 ;08C25
SET.3: MOVX S1,<TI.LET> ;GET THE LEOT BIT
IORM S1,TCB.IO(B) ;TURN IT ON
MOVX S1,TS.ATM ;FLAG AFTER TAPE MARK
IORM S1,TCB.ST(B) ;IN THE TCB
MOVEI S1,LE.EOF ;RETURN EOF
WIT
SET.3: MOVEI S1,LE.EOF ;RETURN EOF
REP 19/24 ;08C26
MOVEM S1,G$TERM## ;SAVE FOR RELEASE
WIT
PUSHJ P,PS.TRM ;SAVE AND INHIBIT LABEL CLEAR
REP 23/24 ;08C27
MOVEM S1,G$TERM## ;SAVE IT FOR RELEASE
WIT
PUSHJ P,PS.TRM ;SAVE AND INHIBIT LABEL CLEAR
REP 1/29 ;08C28
SUBTTL L$USRQ -- Routine to Handle Label Request TAPOP.
WIT
SUBTTL L$USRQ - Routine to Handle Label Request TAPOP.
INS 1/31 ;08C29
SUBTTL L$ABOR - Monitor request to abort current labeling operation
; Here when the user types ^C while waiting for some tape labeler function
; to complete, or when the monitor feels malicious and wants to screw some
; unsuspecting user. The intent of this code is to gracefully unwind the
; TCB and get the user's job of event wait for the labeler. Under extreme
; circumstances, this might not work (hardware hangs, etc.). For each type
; of pending labeler request and TCB wait state, we'll attempt to unwind in
; a safe fashion.
L$ABOR::PUSHJ P,T$OPEN## ;SO WE CAN DO A LABEL RELEASE
JUMPF .RETF ;FAILED
MOVE S1,TCB.WS(B) ;GET WAIT STATE CODE
PUSHJ P,@ABOTAB(S1) ;DO SPECIAL PRE-ABORT PROCESSING FIRST
JUMPF .RETF ;HMMM
SETZM TCB.WS(B) ;MARK TCB IDLE
MOVX S1,TI.ABO ;GET ABORT FLAG
ANDCAM S1,TCB.IO(B) ;CLEAR IT
MOVEI S1,LE.LRA ;LABELER REQUEST ABORTED BY RESET UUO
MOVEM S1,G$TERM## ;STORE TERMINATION CODE
PJRST T$RELE## ;CLEAR LABELER WAIT AND RETURN
ABOSTP: $STOP (AIC,<Abort labeler request from illegal context>)
EXP .RETT ;WAITING TO RUN
ABOTAB: EXP .RETT ;IGNORE
EXP ABOMNT ;MOUNT WAIT
EXP ABOLBL ;LABEL FAILURE (OPR INTERVENTION) WAIT
EXP .RETT ;OFFLINE WAIT
EXP ABOSTP ;WAITING FOR ANOTHER TCB
EXP ABOSTP ;NEW TAPE WAIT OR OPR RESPONSE
ABOMAX==.-ABOTAB ;LENGTH OF TABLE
IFN <TW.MAX-ABOMAX>,<
PRINTX ? Missing abort code for labeler function(s)
PASS2
END
>
; TCB waiting for a mount
ABOMNT: PUSHJ P,CANMDA ;CANCEL PENDING REEL SWITCH REQUEST
$RETT ;RETURN
; TCB waiting for operator intervention on a label failure
ABOLBL: MOVX S1,TS.FSE ;GET A BIT
ANDCAM S1,TCB.S2(B) ;CLEAR FILE SEQUENCE ERROR PROCESSING
MOVEI S1,ABOTXT ;POINT TO REASON TEXT
PJRST O$KWTO## ;CANCEL WTOR AND RETURN
ABOTXT: ASCIZ |Labeler operation aborted by a RESET UUO|
REP 43/37 ;08C30
VLD.A5: MOVEI S1,[ITEXT (<Volume Protection Failure>)]
PUSHJ P,O$LERR## ;TYPE ERROR MESSAGE
;WAIT FOR OPR RESPONSE
JUMPF .RETF ;IF ERROR RETURN NOW
WIT
VLD.A5: PUSHJ P,VPCCHK ;TELL OPR ABOUT VOL PROT FAILURE
JUMPF .RETF ;RESPONSE WAS ABORT
REP 33/43 ;08C31
CAIN T2,1 ;Are we expecting first section?
MOVE T2,S2 ;Yes, expect anything
CAME T2,S2 ;DO LABEL AND TCB AGREE?
PJRST HDS.2 ;NO, WRONG SEQUENCE NUMBER
WIT
CAIN T2,1 ;ARE WE EXPECTING FIRST SECTION?
MOVE T2,S2 ;YES, EXPECT ANYTHING
CAMN T2,S2 ;DO LABEL AND TCB AGREE?
JRST HDS.1 ;ALL IS WELL
SKIPE G$SEQC## ;HAVE WE ASKED THE OPERATOR?
$WTO (<HDR file sequence warning>,<Label says ^D/S2/ when looking for ^D/T2/>,TCB.OB(B),$WTFLG(WT.SJI))
DEL 40/43 ;08C32
HDS.2: MOVEI S1,[ITEXT (<Incorrect File Sequence Number>)]
SKIPA ;AFTER MESSAGE, LIKE OTHER ERROR
INS 13/48 ;08C33
PUSHJ P,I$BCNT## ;GET BLOCK COUNT SO FAR
MOVEM S1,TCB.BC(B) ;SAVE
REP 44/50 ;08C34
JUMPT .RETT ;RETURN GOOD
MOVEI S1,[ITEXT (<Invalid EOF1 Record>)] ;ASSUME EOF1 LABEL
WIT
JUMPF EFL.0 ;ERROR
MOVX S1,TS.OUT ;GET OUTPUT FLAG
TDNE S1,TCB.ST(B) ;DON'T COPY FILE NAME ON OUTPUT
$RETT ;EXIT ON OUTPUT
MOVE T1,[CPTRI ^D5,0(BUF)] ;POINTER TO THE FILE NAME (CP 5-21)
MOVE T2,[POINT 7,TCB.FN(B)] ;WHERE TO STORE THE FILE NAME
MOVEI T3,^D17 ;SEVENTEEN CHARACTERS
HRL T3,CVTTAB(LT) ;CONVERSION TYPE
PUSHJ P,STGSTR ;COPY THE STRING
JUMPT .RETT ;OK RETURN
EFL.0: MOVEI S1,[ITEXT (<Invalid EOF1 Record>)] ;ASSUME EOF1 LABEL
REP 49/51 ;08C35
EFS.1: MOVEI S1,[ITEXT (<Illegal File Sequence Number>)]
SKIPA
EFS.2: MOVEI S1,[ITEXT (<Incorrect File Sequence Number>)]
PJRST O$LERR## ;TELL THE OPR
;WAIT FOR HIS ANSWER
WIT
EFS.1: MOVEI S1,[ITEXT (<Illegal File Sequence Number>)]
PJRST O$LERR## ;TELL THE OPR AND WAIT FOR HIS ANSWER
EFS.2: SKIPE G$SEQC## ;HAVE WE ASKED THE OPERATOR?
$WTO (<EOF file sequence warning>,<Label says ^D/S2/ when looking for ^D/T2/>,TCB.OB(B),$WTFLG(WT.SJI))
$RETT ;RETURN AND IGNORE THE ERROR
REP 153/61 ;08C36
LOAD T1,TCB.BC(B) ;GET BLOCK COUNT FROM TCB
WIT
MOVE T1,TCB.BC(B) ;GET BLOCK COUNT FROM TCB
REP 46/63 ;08C37
PUSHJ P,I$GDEN## ;MAKE SURE WE HAVE THE DENSITY
WIT
PUSH P,T2 ;SAVE FROM DESTRUCTION
PUSHJ P,I$GDEN## ;MAKE SURE WE HAVE THE DENSITY
POP P,T2 ;RESTORE BYTE POINTER TO LABEL BUFFER
REP 57/63 ;08C38
MOVEI T1,[POINT 7,[ASCIZ /0/]];ASSUME NO REEL SWITCH YET
; MOVX T2,TCB.RS ;GET REEL SWITHC BIT
; TDNE T2,TCB.XX(B) ;DID WE DO ONE?
; MOVEI T1,[POINT 7,[ASCIZ /1/]];YES
WIT
PUSH P,T2 ;SAVE FROM DESTRUCTION
MOVE T1,[POINT 8,TCB.FV(B)] ;POINT TO THE FIRST REELID
MOVE T2,[POINT 8,TCB.VL(B)] ;POINT TO THE CURRENT REELID
MOVEI T4,6 ;6 CHARACTERS
HRL T3,CVTTAB(LT) ;CONVERSION ROUTINE
PUSHJ P,STRCMP ;COMPARE
POP P,T2 ;RESTORE BYTE POINTER TO BUFFER
MOVE T1,[POINT 7,[ASCIZ /0/]];ASSUME FIRST REEL IN VOLUME SET
SKIPT ;IS IT?
MOVE T1,[POINT 7,[ASCIZ /1/]];NO--A CONTINUATION REEL
INS 1/68 ;08C39
SUBTTL Utility Routines -- Volume protection check
; This routine is called whenever a volume protection error occurs.
; The first time, the operator will be asked to abort or proceed
; with the operation. The operator's response will be memorized
; in the TCB so succeding errors can be handled without operator
; intervention.
VPCCHK: LOAD S1,TCB.S2(B),TS.VPC ;GET VOLUME PROTECTION CHECK STATUS
JRST @.+1(S1) ;DISPATCH
EXP VPCCH0 ;ASK
EXP VPCCH1 ;ABORT
EXP VPCCH2 ;PROCEED
VPCCH0: MOVEI S1,[ITEXT (<Volume protection failure>)]
PUSHJ P,O$LERR## ;TELL OPR OF PROTECTION FAILURE
JUMPT VPCCH2 ;RESPONSE AS PROCEED
VPCCH1: MOVEI S1,.TSABO ;GET ABORT CODE
STORE S1,TCB.S2(B),TS.VPC ;STORE
MOVEI S1,LE.VPF ;VOLUME PROTECTION FAILURE
MOVEM S1,G$TERM## ;SET TERMINATION CODE
$RETF ;AND RETURN
VPCCH2: MOVEI S1,.TSPRO ;PROCEED
STORE S1,TCB.S2(B),TS.VPC ;STORE
SETZM G$TERM## ;GIVE USER THE GREEN LIGHT
$RETT ;AND PROCEED
REP 4/72 ;08C40
;The routine does not wait for the request to be answered
WIT
;The routine does not wait for the request to be answered.
;Enter at CANMDA to cancel pending volume switch request.
REP 9/72 ;08C41
REQMDA:
MOVEM S2,RLVOL+.RLVCD ;Save the I/O flag
WIT
CANMDA: MOVEI S1,%RLABO ;ABORT PENDING REEL SWITCH
MOVEI S2,0 ;NO JUNK PLEASE
REQMDA: MOVEM S2,RLVOL+.RLVCD ;Save the I/O flag
REP 17/73 ;08C42
LOAD S1,TCB.RP(B),TP.RQP ;GET THE REQUEST POSITION
LOAD T1,TCB.PS(B),TP.POS ;GET THE ACTUAL POSITION
CAME S1,T1 ;REQUESTING THE LAST FILE +1 (EOT)
CAIN S1,^D99999 ;LOOKING FOR EOT
JRST POST.2 ;YES, WE FOUND IT
CAMG S1,T1 ;CHECK FOR GOING BACKWARD AT EOT
WIT
LOAD T1,TCB.RP(B),TP.RQP ;GET THE REQUEST POSITION
LOAD S2,TCB.PS(B),TP.POS ;GET THE ACTUAL POSITION
CAME T1,S2 ;REQUESTING THE LAST FILE +1 (EOT)
CAIN T1,^D99999 ;LOOKING FOR EOT
JRST POST.2 ;YES, WE FOUND IT
PUSHJ P,POSZER ;TELL OPR ABOUT SEQ NUM MISMATCH
JUMPF .POPJ ;OPR SAID ABORT
CAIN S1,PLR%PR ;PROCEED AND IGNORE SEQUENCE ERRORS?
JRST POST.2 ;PRETEND AT RIGHT POSITION
CAMG T1,S2 ;CHECK FOR GOING BACKWARD AT EOT
INS 37/73 ;08C43
PUSHJ P,POSZER ;TELL OPR ABOUT SEQ NUM MISMATCH
JUMPF .POPJ ;OPR SAID ABORT
CAIN S1,PLR%PR ;PROCEED AND IGNORE SEQUENCE ERRORS?
JRST POST.1 ;PRETEND AT RIGHT POSITION
INS 1/75 ;08C44
; Routine to notify the operator about a sequence number mismatch.
POSZER: MOVE S1,G$SEQC## ;GET CODE TO PROCESS SEQUENCE ERRORS
CAIN S1,PLR%AB ;ABORT USER JOB?
JRST PS.BAD ;YES
CAIE S1,PLR%PR ;PROCEED AND IGNORE SEQUENCE ERRORS?
CAIN S1,PLR%RT ;RETRY SEARCH FOR CORRECT SEQ NUM?
JRST POSZ.2 ;YES
POSZ.1: MOVX S1,TS.FSE ;GET A BIT
IORM S1,TCB.S2(B) ;FLAG FILE SEQUENCE ERROR PROCESSING
MOVEI S1,POSTX1 ;POINT TO INTRODUCTORY TEXT
MOVEI S2,POSTX2 ;POINT TO MAIN TEXT
PUSHJ P,O$LERT## ;ASK THE OPERATOR WHAT TO DO
MOVX S2,TS.FSE ;GET BIT AGAIN
ANDCAM S2,TCB.S2(B) ;CLEAR IT
CAIN S1,PLR%TY ;WANT TO RETYPE THE MESSAGE?
JRST POSZER ;STUPID OPR DOESN'T KNOW HOW TO RESPOND
JUMPF PS.BAD ;OPR SAID ABORT
POSZ.2: LOAD S2,TCB.PS(B),TP.POS ;RELOAD CURRENT POSITION
LOAD T1,TCB.RP(B),TP.RQP ;RELOAD REQUESTED POSITION
CAIE S1,PLR%PR ;OPR TYPE PROCEED?
$RETT ;NO--RETURN WITH PLR%RT IN S1
CAML T1,S2 ;WHICH ONE IS SMALLER
MOVE T1,S2 ;S2 IS
CAIL T1,0 ;OUT OF RANGE?
CAILE T1,^D999 ;MUST BE A LEGAL SEQUENCE NUMBER
MOVEI T1,1 ;MAKE IT REASONABLE
STORE T1,TCB.PS(B),TP.POS ;RESET TO CREATE FILE.001
STORE T1,TCB.RP(B),TP.RQP ;SET REQUESTED POSITION TO MATCH
$RETT ;RETURN WITH PLR%PR IN S1
POSTX1: ITEXT (<File sequence number error; label says ^D/TCB.PS(B),TP.POS/ when looking for ^D/TCB.RP(B),TP.RQP/>)
POSTX2: ITEXT (<Type 'RESPOND ^I/number/ ABORT' to terminate this operation
Type 'RESPOND ^I/number/ PROCEED' to ignore the error and continue
Type 'RESPOND ^I/number/ RETRY' to search again for correct file>)
INS 5/81 ;08C45
L$CVTT::
SUM 246837