User Tools

Site Tools


cdc:nos2.source:opl.opl871:deck:exdrvr.003

Deck EXDRVR Part 003

7 Modifications

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
04749  M01S04523.exdrvr  +++|        MS$MSG$R[0] = TRUE;          # SET AS RESPONSE #
04750  M01S04524.exdrvr  +++|        MS$ASS$DT[0] = 0;            # SEND BACK MESSAGE ONLY #
04751  M01S04525.exdrvr  +++|        MS$CU[0] = FMR$CU[0];        # SAVE CU ORDINAL #
04752  M01S04526.exdrvr  +++|        FMR$ELCNT[0] = FMR$ELCNT[0] + 1;  # COUNT ERROR LOG RESPONSES #
04753  M01S04527.exdrvr  +++|        RETURN;
04754  M01S04528.exdrvr  +++|        END  # BML #
04755  M01S04529.exdrvr  +++|
04756  M01S04530.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CSNERR # CSN/DRD IN USE #
04757  M01S04531.exdrvr  +++|        AND MS$MSG[0] NQ HFC$STCRNF  # RETRY AS NORMAL STORE #
04758  M01S00042.mse1    +++|        AND MS$MSG[0] NQ HFC$STCRNV  # IN CASE RCVY FROM *ACQ* ERROR #
04759  M01S04532.exdrvr  +++|      THEN                           # SOFTWARE ERROR #
04760  M01S04533.exdrvr  +++|        BEGIN  # ABORT #
04761  M01S04534.exdrvr  +++|        FE$RTN[0] = "PROCMRB4.";
04762  M01S04535.exdrvr  +++|        GOTO PROCMRB1;
04763  M01S04536.exdrvr  +++|        END  # ABORT #
04764  M01S04537.exdrvr  +++|
04765  M01S04538.exdrvr  +++|      IF MSGCNT(FMR$CIF[0],FMR$CU[0]) EQ 0
04766  M01S04539.exdrvr  +++|      THEN                           # THIS RESPONSE TIMED OUT #
04767  M01S04540.exdrvr  +++|        BEGIN  # THROW #
04768  M01S04541.exdrvr  +++|        GOTO PROCMRB2;               # ORIGINAL MESSAGE TIMED OUT #
04769  M01S04542.exdrvr  +++|        END  # THROW #
04770  M01S04543.exdrvr  +++|
04771  M01S04544.exdrvr  +++|#
04772  M01S04545.exdrvr  +++|*     LOCATE THE UDT MESSAGE BUFFER ASSOCIATED WITH THE
04773  M01S04546.exdrvr  +++|*     INCOMING RESPONSE.
04774  M01S04547.exdrvr  +++|#
04775  M01S04548.exdrvr  +++|
04776  M01S04549.exdrvr  +++|      P<MBFHDR> = LOC(UD$MSG[MS$MSQN$CN[0]]) - 1;  # ASSUME CU MSG #
04777  M01S04550.exdrvr  +++|      IF MS$MSQN$D0[0]
04778  M01S04551.exdrvr  +++|      THEN                           # DRD 0 MESSAGE #
04779  M01S04552.exdrvr  +++|        BEGIN  # DRD 0 #
04780  M01S04553.exdrvr  +++|        P<MBFHDR> = LOC(D0$MSG[MS$MSQN$CN[0]]) - 1;
04781  M01S04554.exdrvr  +++|        END  # DRD 0 #
04782  M01S04555.exdrvr  +++|
04783  M01S04556.exdrvr  +++|      IF MS$MSQN$D1[0]
04784  M01S04557.exdrvr  +++|      THEN                           # DRD 1 MESSAGE #
04785  M01S04558.exdrvr  +++|        BEGIN  # DRD 1 #
04786  M01S04559.exdrvr  +++|        P<MBFHDR> = LOC(D1$MSG[MS$MSQN$CN[0]]) - 1;
04787  M01S04560.exdrvr  +++|        END  # DRD 1 #
04788  M01S04561.exdrvr  +++|
04789  M01S04562.exdrvr  +++|      IF MS$MSG[0] EQ HRF$CONRES
04790  M01S04563.exdrvr  +++|      THEN                           # *CURESTART* MESSAGE #
04791  M01S04564.exdrvr  +++|        BEGIN  # LOCATE ADDRESS #
04792  M01S04565.exdrvr  +++|        P<MBFHDR> = LOC(UD$MSG[FMR$CU[0]]) - 1;  # USE PASSED CU ORD #
04793  M01S04566.exdrvr  +++|        END  # LOCATE ADDRESS #
04794  M01S04567.exdrvr  +++|
04795  M01S04568.exdrvr  +++|      IF MS$MSG[0] EQ HRF$UNITRW     ##
04796  M01S04569.exdrvr  +++|        OR MS$MSG[0] EQ HRF$FORCRW
04797  M01S04570.exdrvr  +++|      THEN                           # *UNLOAD* MESSAGE #
04798  M01S04571.exdrvr  +++|        BEGIN  # LOCATE ADDRESS #
04799  M01S04572.exdrvr  +++|        P<MBFHDR> = LOC(D1$MSG[MS$DEV$SM[0]+1]) - 1;  # ASSUME LOWER #
04800  M01S04573.exdrvr  +++|        IF NOT MS$DEV$ODD[0]
04801  M01S04574.exdrvr  +++|        THEN                         # UPPER DRD IN USE #
04802  M01S04575.exdrvr  +++|          BEGIN  # RESET #
04803  M01S04576.exdrvr  +++|          P<MBFHDR> = LOC(D0$MSG[MS$DEV$SM[0]+1]) - 1;
04804  M01S04577.exdrvr  +++|          END  # RESET #
04805  M01S04578.exdrvr  +++|
04806  M01S04579.exdrvr  +++|        END  # LOCATE ADDRESS #
04807  M01S04580.exdrvr  +++|
04808  M01S04581.exdrvr  +++|      IF (NOT MBF$ACTIVE[0])         # NO ACTIVE MESSAGE BUFFER #
04809  M01S04582.exdrvr  +++|        OR MBF$SBADDR[0] NQ 0        # STILL PROCESSING LAST RESPONSE #
04810  M01S04583.exdrvr  +++|      THEN                           # MSG BUFFER FIELDS NOT READY #
04811  M01S04584.exdrvr  +++|        BEGIN  # ABORT #
04812  M01S04585.exdrvr  +++|        GOTO PROCMRB2;
04813  M01S04586.exdrvr  +++|        END  # ABORT #
04814  M01S04587.exdrvr  +++|
04815  M01S04588.exdrvr  +++|      MBF$SBADDR[0] = P<UDT$MSG>;    # SET STORAGE BUF ADDR #
Line S04589 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
04816  M02S04589.mse1    ---|      MSGCNT(FMR$CIF[0],FMR$CU[0]) = MSGCNT(FMR$CIF[0],FMR$CU[0]) - 1;
Line S04590 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
04817  M02S04590.mse1    ---|                                     # DECREMENT CHANNEL MSG COUNT #
04818  M01S04591.exdrvr  +++|      IF MS$MSG[0] GQ HFC$RCLBP0     # *READCRTLBL* MESSAGE #
04819  M01S04592.exdrvr  +++|        AND MS$MSG[0] LQ HFC$RCLBP9  ##
04820  M01S04593.exdrvr  +++|        AND MS$ASS$DT[0] NQ 0
04821  M01S04594.exdrvr  +++|      THEN                           # CARTRIDGE LABEL FOLLOWS MSG #
04822  M01S04595.exdrvr  +++|        BEGIN  # GET LABEL #
04823  M01S04596.exdrvr  +++|        ASSOCDATA = ((MS$ASS$DT[0]*2)+14)/15;
04824  M01S04597.exdrvr  +++|        IF ASSOCDATA GR LABLEN
04825  M01S04598.exdrvr  +++|        THEN                         # COULD BE CE LABEL #
04826  M01S04599.exdrvr  +++|          BEGIN  # CLEAR #
04827  M01S04600.exdrvr  +++|          MS$ASS$DT[0] = 0;          # TREAT LIKE NO-LABEL #
04828  M01S04601.exdrvr  +++|          MS$RETCODE[0] = HRC$NOLAB;
04829  M01S04602.exdrvr  +++|          RETURN;
04830  M01S04603.exdrvr  +++|          END  # CLEAR #
04831  M01S04604.exdrvr  +++|
04832  M01S04605.exdrvr  +++|        GDATA(FETMRB,LABEL$CART,ASSOCDATA,STAT);
04833  M01S04606.exdrvr  +++|        IF STAT NQ 0
04834  M01S04607.exdrvr  +++|        THEN                         # ERROR IN READING LABEL #
04835  M01S04608.exdrvr  +++|          BEGIN  # ABORT #
04836  M01S04609.exdrvr  +++|          FE$RTN[0] = "PROCMRB7.";
04837  M01S04610.exdrvr  +++|          GOTO PROCMRB1;
04838  M01S04611.exdrvr  +++|          END  # ABORT #
04839  M01S04612.exdrvr  +++|
04840  M01S04613.exdrvr  +++|        END  # GET LABEL #
04841  M01S04614.exdrvr  +++|
04842  M01S04615.exdrvr  +++|      IF MS$MSG[0] GQ HFC$DBLD0  ##
04843  M01S04616.exdrvr  +++|        AND MS$MSG[0] LQ HFC$DBLD7
04844  M01S04617.exdrvr  +++|      THEN                           # SEND BUFFERED LOG TO BML #
04845  M01S04618.exdrvr  +++|        BEGIN  # BML #
04846  M01S04619.exdrvr  +++|        BMLOG;
04847  M01S04620.exdrvr  +++|        END  # BML #
04848  M01S04621.exdrvr  +++|
04849  M01S04622.exdrvr  +++|      IF MS$MSG[0] EQ HFC$RDRAW
04850  M01S04623.exdrvr  +++|      THEN                           # FINISH RAW DATA BUF PROCESSING #
04851  M01S04624.exdrvr  +++|        BEGIN  # FINISH RAW #
04852  M01S04625.exdrvr  +++|        P<FETFHB> = FMR$RDBA[0] - MSGLT - RFHBL;  # GET DATA BUF ADDR #
04853  M01S04626.exdrvr  +++|        FMR$RDBA[0] = 0;             # NO RAW DATA EXPECTED #
04854  M01S04627.exdrvr  +++|        IF MS$ASS$DT[0] NQ 0
04855  M01S04628.exdrvr  +++|        THEN                         # RAW DATA READ OK #
04856  M01S04629.exdrvr  +++|          BEGIN  # OK #
04857  M01S04630.exdrvr  +++|          FHB$IN[0] = FHB$FRST[0] + MSGLT + RWDATA;
04858  M01S04631.exdrvr  +++|          END  # OK #
04859  M01S04632.exdrvr  +++|
04860  M01S04633.exdrvr  +++|        ELSE                         # STRIPE HAS NO DATA #
04861  M01S04634.exdrvr  +++|          BEGIN  # NONE #
04862  M01S04635.exdrvr  +++|          FHB$IN[0] = FHB$FRST[0] + MSGLT;  # COUNT MSG ONLY #
04863  M01S04636.exdrvr  +++|          END  # NONE #
04864  M01S04637.exdrvr  +++|
04865  M01S04638.exdrvr  +++|        FHB$LOCK[0] = TRUE;          # SET DATA TRANSFER COMPLETE #
04866  M01S04639.exdrvr  +++|        END  # FINISH RAW #
04867  M01S04640.exdrvr  +++|
04868  M01S04641.exdrvr  +++|      RETURN;
04869  M01S04642.exdrvr  +++|
04870  M01S04643.exdrvr  +++|PROCMRB1:
04871  M01S04644.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);          # ABORT PROCESSING #
04872  M01S04645.exdrvr  +++|      ABORT;
04873  M01S04646.exdrvr  +++|
04874  M01S04647.exdrvr  +++|PROCMRB2:
04875  M01S04648.exdrvr  +++|      IF ASSOCDATA NQ 0              ##
04876  M01S04649.exdrvr  +++|        AND MS$MSG[0] NQ HFC$RDRAW   # RAW DATA ALREADY SENT #
04877  M01S04650.exdrvr  +++|      THEN                           # THROW ASSOCIATED DATA #
04878  M01S04651.exdrvr  +++|        BEGIN  # THROW #
04879  M01S04652.exdrvr  +++|        DATASIZE = DBLEN;
04880  M01S04653.exdrvr  +++|        REPEAT WHILE ASSOCDATA GR 0
04881  M01S04654.exdrvr  +++|        DO                           # READ DATA FROM FET BUFFER #
04882  M01S04655.exdrvr  +++|          BEGIN  # READ #
04883  M01S04656.exdrvr  +++|          IF ASSOCDATA LS DBLEN
04884  M01S04657.exdrvr  +++|          THEN                       # LAST DATA PORTION #
04885  M01S04658.exdrvr  +++|            BEGIN  # RESET #
04886  M01S04659.exdrvr  +++|            DATASIZE = ASSOCDATA;    # READ SMALL BLOCK #
04887  M01S04660.exdrvr  +++|            END  # RESET #
04888  M01S04661.exdrvr  +++|
04889  M01S04662.exdrvr  +++|          GDATA(FETMRB,DBUF,DATASIZE,STAT);
04890  M01S04663.exdrvr  +++|          IF STAT NQ 0
04891  M01S04664.exdrvr  +++|          THEN                       # DATA READ ERROR #
04892  M01S04665.exdrvr  +++|            BEGIN  # ABORT #
04893  M01S04666.exdrvr  +++|            FE$RTN[0] = "PROCMRB8.";
04894  M01S04667.exdrvr  +++|            GOTO PROCMRB1;
04895  M01S04668.exdrvr  +++|            END  # ABORT #
04896  M01S04669.exdrvr  +++|
04897  M01S04670.exdrvr  +++|          ASSOCDATA = ASSOCDATA - DATASIZE;  # COUNT DATA REMOVED #
04898  M01S04671.exdrvr  +++|          END  # READ #
04899  M01S04672.exdrvr  +++|
04900  M01S04673.exdrvr  +++|        END  # THROW #
04901  M01S04674.exdrvr  +++|
04902  M01S04675.exdrvr  +++|      ZFILL(UDT$MSG,MSGLT);          # THROW AWAY MESSAGE #
04903  M01S04676.exdrvr  +++|      RETURN;
04904  M01S04677.exdrvr  +++|      END  # PROCMRB #
04905  M01S04678.exdrvr  +++|
04906  M01S04679.exdrvr  +++|    TERM
04907  M01S04680.exdrvr  +++|PROC RESTCU;
04908  M01S04681.exdrvr  +++|# TITLE RESTCU - PERFORM CONTROLLER RESTART PROCESSING.               #
04909  M01S04682.exdrvr  +++|
04910  M01S04683.exdrvr  +++|      BEGIN  # RESTCU #
04911  M01S04684.exdrvr  +++|
04912  M01S04685.exdrvr  +++|#
04913  M01S04686.exdrvr  +++|**    RESTCU - PERFORM CONTROLLER RESTART PROCESSING.
04914  M01S04687.exdrvr  +++|*
Line S04688 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
04915  M02S04688.exdrvr2 ---|*     *RESTCU* PROCESSES M860 CONTROLLER STATUS CHANGES.  IF A
Line S04689 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
04916  M02S04689.exdrvr2 ---|*     CONTROLLER IS BEING TURNED ON, ALL M860 MESSAGES NEEDED TO
Line S04690 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
04917  M02S04690.exdrvr2 ---|*     INITIALIZE IT ARE SENT TO IT.
04918  M01S00131.exdrvr2 +++|*     *RESTCU* PROCESSES M860 CONTROLLER STATUS CHANGES.  ALL M860
04919  M01S00132.exdrvr2 +++|*     MESSAGES NEEDED FOR CONTROLLER INITIALIZATION ARE SENT.
04920  M01S04691.exdrvr  +++|*
04921  M01S04692.exdrvr  +++|*     PROC RESTCU
04922  M01S04693.exdrvr  +++|*
04923  M01S04694.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
04924  M01S04695.exdrvr  +++|*
04925  M01S04696.exdrvr  +++|*     EXIT       THE *DRQUEUE* ENTRY REQUEST STATE FIELD HAS BEEN
04926  M01S04697.exdrvr  +++|*                UPDATED TO INDICATE WHERE SUBSEQUENT PROCESSING OF
04927  M01S04698.exdrvr  +++|*                THIS REQUEST IS TO CONTINUE.
04928  M01S04699.exdrvr  +++|*
04929  M01S04700.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, RESTCU1.* - UDT MESSAGE BUFFER STILL
04930  M01S04701.exdrvr  +++|*                                            IN USE.
04931  M01S04702.exdrvr  +++|*
04932  M01S04703.exdrvr  +++|*                *EXEC ABNORMAL, RESTCU2.* - THE NEXT M860 CONTROLLER
04933  M01S04704.exdrvr  +++|*                                            INITIALIZATION FUNCTION
04934  M01S04705.exdrvr  +++|*                                            WAS NOT FOUND IN THE
04935  M01S04706.exdrvr  +++|*                                            FUNCTION LIST.
04936  M01S04707.exdrvr  +++|*
04937  M01S04708.exdrvr  +++|*     NOTES      THIS IS A PSEUDO-REENTRANT PROCEDURE.
04938  M01S04709.exdrvr  +++|#
04939  M01S04710.exdrvr  +++|
04940  M01S04711.exdrvr  +++|
04941  M01S04712.exdrvr  +++|#
04942  M01S04713.exdrvr  +++|****  PROC RESTCU - XREF LIST BEGIN.
04943  M01S04714.exdrvr  +++|#
04944  M01S04715.exdrvr  +++|
04945  M01S04716.exdrvr  +++|      XREF
04946  M01S04717.exdrvr  +++|        BEGIN
04947  M01S04718.exdrvr  +++|        PROC ABORT;                  # ABORT #
04948  M01S04719.exdrvr  +++|        PROC DOWNCU;                 # DOWN CONTROLLER #
04949  M01S04720.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
04950  M01S04721.exdrvr  +++|        PROC SENDMSG;                # SEND M860 MESSAGE #
04951  M01S04722.exdrvr  +++|        FUNC XCOD C(10);             # CONVERT OCTAL TO DISPLAY-CODE #
04952  M01S04723.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
04953  M01S04724.exdrvr  +++|        END
04954  M01S04725.exdrvr  +++|
04955  M01S04726.exdrvr  +++|#
04956  M01S04727.exdrvr  +++|****  PROC RESTCU - XREF LIST END.
04957  M01S04728.exdrvr  +++|#
04958  M01S04729.exdrvr  +++|
04959  M01S04730.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
04960  M01S04731.exdrvr  +++|*CALL,COMBFAS
04961  M01S04732.exdrvr  +++|*CALL,COMBCPR
04962  M01S04733.exdrvr  +++|*CALL,COMBFET
04963  M01S04734.exdrvr  +++|*CALL,COMBHFC
04964  M01S04735.exdrvr  +++|*CALL,COMBLRQ
04965  M01S04736.exdrvr  +++|*CALL,COMBUDT
04966  M01S04737.exdrvr  +++|*CALL,COMXCTF
04967  M01S04738.exdrvr  +++|*CALL,COMXMSC
04968  M01S04739.exdrvr  +++|
04969  M01S04740.exdrvr  +++|      DEF MSGNUMM1   #7#;            # NUMBER OF CU MSGS TO SEND - 1 #
04970  M01S04741.exdrvr  +++|
04971  M01S04742.exdrvr  +++|      ITEM CORD       U;             # TEMP CU ORDINAL #
04972  M01S04743.exdrvr  +++|      ITEM I          I;             # INDEX #
04973  M01S04744.exdrvr  +++|
04974  M01S04745.exdrvr  +++|#
04975  M01S04746.exdrvr  +++|*     THIS ARRAY DEFINES THE ORDER TO ISSUE CONTROLLER MESSAGES.
04976  M01S04747.exdrvr  +++|#
04977  M01S04748.exdrvr  +++|
04978  M01S04749.exdrvr  +++|      ARRAY NEXTMSG [0:MSGNUMM1] S(1);  # NEXT MESSAGE TO ISSUE #
04979  M01S04750.exdrvr  +++|        BEGIN
04980  M01S04751.exdrvr  +++|        ITEM NEXTFTN    U(00,00,60) = [HFC$RESCON,  ##
04981  M01S04752.exdrvr  +++|                                       HFC$SETMAS,  ##
04982  M01S04753.exdrvr  +++|                                       HFC$STDATM,  ##
04983  M01S04754.exdrvr  +++|                                       HFC$STERLN];
04984  M01S04755.exdrvr  +++|        END
04985  M01S04756.exdrvr  +++|
04986  M01S04757.exdrvr  +++|      SWITCH RESTARTLBL:PROCST       # DRIVER REQUEST STATE #
04987  M01S04758.exdrvr  +++|                RESINIT:INITIAL,     # INITIAL STATE #
04988  M01S04759.exdrvr  +++|                RESMSGE:CONT1;       # CONTINUATION 1 #
04989  M01S04760.exdrvr  +++|                                               CONTROL EJECT;
04990  M01S04761.exdrvr  +++|
04991  M01S04762.exdrvr  +++|      GOTO RESTARTLBL[LLR$RS[0]];
04992  M01S04763.exdrvr  +++|
04993  M01S04764.exdrvr  +++|#
04994  M01S04765.exdrvr  +++|*     INITIAL DRIVER REQUEST STATE.
04995  M01S04766.exdrvr  +++|#
04996  M01S04767.exdrvr  +++|
04997  M01S04768.exdrvr  +++|RESINIT:
Line S04769 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
04998  M02S04769.exdrvr2 ---|      IF NOT UD$CUON[LLR$CU[0]]
Line S04770 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
04999  M02S04770.exdrvr2 ---|      THEN                           # CONTROLLER GOING OFF #
Line S04771 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05000  M02S04771.exdrvr2 ---|        BEGIN  # OFF #
Line S04772 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05001  M02S04772.exdrvr2 ---|        P<FETMWB> = 0;               # DO NOT DISPLAY A CHANNEL #
Line S04773 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05002  M02S04773.exdrvr2 ---|        DOWNCU(LLR$CU[0]);           # DOWN CONTROLLER #
Line S04774 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05003  M02S04774.exdrvr2 ---|        DRVRACTIVE = TRUE;
Line S04775 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05004  M02S04775.exdrvr2 ---|        LLR$RS[0] = PROCST"COMPLETE";
Line S04776 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05005  M02S04776.exdrvr2 ---|        RETURN;
Line S04777 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05006  M02S04777.exdrvr2 ---|        END  # OFF #
Line S04778 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05007  M02S04778.exdrvr2 ---|
05008  M01S04779.exdrvr  +++|      P<MBFHDR> = LOC(UD$MSG[LLR$CU[0]]) - 1;
05009  M01S04780.exdrvr  +++|      IF MBF$WORD[0] NQ 0
05010  M01S04781.exdrvr  +++|      THEN                           # LAST MESSAGE NOT PROCESSED #
05011  M01S04782.exdrvr  +++|        BEGIN  # ABORT #
05012  M01S04783.exdrvr  +++|        FE$RTN[0] = "RESTCU1.";
05013  M01S04784.exdrvr  +++|        GOTO RESTCU1;
05014  M01S04785.exdrvr  +++|        END  # ABORT #
05015  M01S04786.exdrvr  +++|
05016  M01S04787.exdrvr  +++|      IF CURESERVED
05017  M01S04788.exdrvr  +++|      THEN                           # ANOTHER CU INITIALIZING #
05018  M01S04789.exdrvr  +++|        BEGIN  # WAIT #
05019  M01S04790.exdrvr  +++|        RETURN;                      # INITIALIZE CU-S ONE AT A TIME #
05020  M01S04791.exdrvr  +++|        END  # WAIT #
05021  M01S04792.exdrvr  +++|
05022  M01S04793.exdrvr  +++|      CURESERVED = TRUE;             # ONLY THIS CU INITIALIZING #
05023  M01S04794.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
05024  M01S04795.exdrvr  +++|      MS$MSG[0] = HFC$RESCON;        # *RESTART* FUNCTION #
05025  M01S04796.exdrvr  +++|      UD$SAVE[LLR$CU[0]] = SAVEPART;
05026  M01S04797.exdrvr  +++|      LLR$RS[0] = PROCST"CONT1";     # SET NEW REQUEST STATE #
05027  M01S04798.exdrvr  +++|
05028  M01S04799.exdrvr  +++|#
05029  M01S04800.exdrvr  +++|*     ISSUE MESSAGES TO INITIALIZE CONTROLLER.
05030  M01S04801.exdrvr  +++|#
05031  M01S04802.exdrvr  +++|
05032  M01S04803.exdrvr  +++|RESMSGE:
05033  M01S04804.exdrvr  +++|      IF INITIALIZE                  ##
05034  M01S04805.exdrvr  +++|        AND DRYUP
05035  M01S04806.exdrvr  +++|      THEN                           # FORCE QUICK EXIT #
05036  M01S04807.exdrvr  +++|        BEGIN  # EXIT #
05037  M01S04808.exdrvr  +++|        RETURN;
05038  M01S04809.exdrvr  +++|        END  # EXIT #
05039  M01S04810.exdrvr  +++|
05040  M01S04811.exdrvr  +++|      P<MBFHDR> = LOC(UD$MSG[LLR$CU[0]]) - 1;
Line S04812 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05041  M02S04812.exdrvr2 ---|      IF NOT UD$CUON[LLR$CU[0]]
Line S04813 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05042  M02S04813.exdrvr2 ---|      THEN                           # THROW OUT REQUEST #
Line S04814 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05043  M02S04814.exdrvr2 ---|        BEGIN  # THROW #
Line S04815 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05044  M02S04815.exdrvr2 ---|        MBF$TMOUT[0] = 1;            # FORCE RELEASE BY TIMEOUT FAKE #
Line S04816 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05045  M02S04816.exdrvr2 ---|        END  # THROW #
Line S04817 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05046  M02S04817.exdrvr2 ---|
05047  M01S04818.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
05048  M01S04819.exdrvr  +++|      IF (UD$SBADDR[LLR$CU[0]] EQ 0  # RESPONSE NOT YET RECEIVED #
05049  M01S04820.exdrvr  +++|        OR NOT UD$MSGSENT[LLR$CU[0]])# CURESTART RESPONSE NOT SENT #
05050  M01S04821.exdrvr  +++|        AND UD$MBACT[LLR$CU[0]]      # *START ERROR LOG* NOT DONE #
05051  M01S04822.exdrvr  +++|        AND LLR$DR[0] EQ RESPTYP4"OK4"  # GOOD HARDWARE #
05052  M01S04823.exdrvr  +++|      THEN                           # MESSAGE TRANSFER NOT COMPLETE #
05053  M01S04824.exdrvr  +++|        BEGIN  # TRY LATER #
05054  M01S04825.exdrvr  +++|        RETURN;
05055  M01S04826.exdrvr  +++|        END  # TRY LATER #
05056  M01S04827.exdrvr  +++|
05057  M01S04828.exdrvr  +++|      IF MS$MSG[0] EQ HRF$CONRES     # RESPONSE BIT NOT YET SET #
05058  M01S04829.exdrvr  +++|      THEN                           # SEND CURESTART RESPONSE TO CU #
05059  M01S04830.exdrvr  +++|        BEGIN  # PRESET #
05060  M01S04831.exdrvr  +++|        MBF$TMOUT[0] = 0;            # RESET TIMEOUT #
05061  M01S04832.exdrvr  +++|        MS$MSG$R[0] = TRUE;          # SET RESPONSE FLAG #
05062  M01S04833.exdrvr  +++|        MBF$SENT[0] = FALSE;         # FORCE RESPONSE TO BE SENT #
05063  M01S04834.exdrvr  +++|        RETURN;
05064  M01S04835.exdrvr  +++|        END  # PRESET #
05065  M01S04836.exdrvr  +++|
05066  M01S04837.exdrvr  +++|      IF UD$SBADDR[LLR$CU[0]] NQ 0   # RESPONSE RECEIVED #
05067  M01S04838.exdrvr  +++|        OR LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"  # BAD HARDWARE #
05068  M01S04839.exdrvr  +++|      THEN                           # PRESET FOR NEXT MESSAGE #
05069  M01S04840.exdrvr  +++|        BEGIN  # CLEAR #
05070  M01S04841.exdrvr  +++|        IF MBF$SBADDR[0] NQ 0
05071  M01S04842.exdrvr  +++|        THEN                         # CURESTART RESPONSE NOT SENT #
05072  M01S04843.exdrvr  +++|          BEGIN  # THROW #
05073  M01S04844.exdrvr  +++|          P<UDT$MSG> = MBF$SBADDR[0];# CLEAR SBT ENTRY #
05074  M01S04845.exdrvr  +++|          ZFILL(UDT$MSG,MSGLT);
05075  M01S04846.exdrvr  +++|          END  # THROW #
05076  M01S04847.exdrvr  +++|
05077  M01S04848.exdrvr  +++|        MBF$WORD[0] = 0;             # CLEAR MESSAGE STATUS #
05078  M01S04849.exdrvr  +++|        IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
05079  M01S04850.exdrvr  +++|        THEN                         # RETURN LLRQ #
05080  M01S04851.exdrvr  +++|          BEGIN  # EXIT #
05081  M01S04852.exdrvr  +++|          P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);  # LOCATE WRITE FET #
05082  M01S04853.exdrvr  +++|          IF MWB$ADDR[LLR$CIF[0]] NQ 0
05083  M01S04854.exdrvr  +++|          THEN                       # CHANNEL WAS ALLOCATED #
05084  M01S04855.exdrvr  +++|            BEGIN  # EXISTS #
05085  M01S04856.exdrvr  +++|            P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
05086  M01S04857.exdrvr  +++|            P<FETMRA> = P<FETMWB> - 1;  # KEEP FET PAIRS TOGETHER #
05087  M01S04858.exdrvr  +++|            P<FETMRB> = FRA$MRBADR[0];
05088  M01S04859.exdrvr  +++|            IF UD$CUON[LLR$CU[0]] AND FMW$CHON[0]
05089  M01S04860.exdrvr  +++|            THEN                     # NOT DUE TO DEVICE DRIVER ERROR #
05090  M01S04861.exdrvr  +++|              BEGIN  # OFF #
05091  M01S04862.exdrvr  +++|              DOWNCU(LLR$CU[0]);     # DOWN CONTROLLER #
05092  M01S04863.exdrvr  +++|              END  # OFF #
05093  M01S04864.exdrvr  +++|
05094  M01S04865.exdrvr  +++|            END  # EXISTS #
05095  M01S04866.exdrvr  +++|
05096  M01S04867.exdrvr  +++|          LLR$RS[0] = PROCST"COMPLETE";
05097  M01S04868.exdrvr  +++|          RETURN;
05098  M01S04869.exdrvr  +++|          END  # EXIT #
05099  M01S04870.exdrvr  +++|
05100  M01S04871.exdrvr  +++|        P<UDT$MSG> = LOC(UD$MSG[LLR$CU[0]]);
05101  M01S04872.exdrvr  +++|        IF MS$MSG[0] EQ HFC$STERLG   ##
05102  M01S04873.exdrvr  +++|          OR MS$MSG[0] EQ HFC$STERDR
05103  M01S04874.exdrvr  +++|        THEN                         # MULTIPLE MESSAGE NOT COMPLETED #
05104  M01S04875.exdrvr  +++|          BEGIN  # CONTINUE #
05105  M01S04876.exdrvr  +++|          MBF$SAVE[0] = SAVENONE;
05106  M01S04877.exdrvr  +++|          MS$DRDN[0] = MS$DRDN[0] + 1;  # CHECK NEXT CIF/DRD #
05107  M01S04878.exdrvr  +++|          RETURN;
05108  M01S04879.exdrvr  +++|          END  # CONTINUE #
05109  M01S04880.exdrvr  +++|
05110  M01S04881.exdrvr  +++|        END  # CLEAR #
05111  M01S04882.exdrvr  +++|
05112  M01S04883.exdrvr  +++|      P<UDT$MSG> = LOC(UD$MSG[LLR$CU[0]]);  # RESET BASED ARRAY #
05113  M01S04884.exdrvr  +++|      IF MS$MSG[0] EQ HFC$STERLN
05114  M01S04885.exdrvr  +++|      THEN                           # *SET ERROR LOG LENGTH* ISSUED #
05115  M01S04886.exdrvr  +++|        BEGIN  # EXIT #
05116  M01S04887.exdrvr  +++|        LLR$RS[0] = PROCST"COMPLETE";
05117  M01S04888.exdrvr  +++|        CORD = XCOD(UD$ESTO[LLR$CU[0]]);  # SET EST ORDINAL #
05118  M01S04889.exdrvr  +++|        CU$ORD[0] = C<6,4>CORD;
05119  M01S04890.exdrvr  +++|        CU$STAT[0] = CUON;
05120  M01S04891.exdrvr  +++|        MESSAGE(CUMSG,SYSUDF1);      # SEND CU ON MESSAGE #
05121  M01S04892.exdrvr  +++|        RETURN;
05122  M01S04893.exdrvr  +++|        END  # EXIT #
05123  M01S04894.exdrvr  +++|
05124  M01S04895.exdrvr  +++|      MBF$SAVE[0] = SAVEPART;        # SET FOR MOST SINGLE MESSAGES #
05125  M01S04896.exdrvr  +++|      IF MS$MSG[0] EQ HFC$RESCON
05126  M01S04897.exdrvr  +++|      THEN                           # RESET FOR *SETMASCHAN* #
05127  M01S04898.exdrvr  +++|        BEGIN  # RESET #
05128  M01S04899.exdrvr  +++|        MBF$SAVE[0] = SAVENONE;
05129  M01S04900.exdrvr  +++|        END  # RESET #
05130  M01S04901.exdrvr  +++|
05131  M01S04902.exdrvr  +++|      SLOWFOR I = 0 STEP 1 UNTIL MSGNUMM1
05132  M01S04903.exdrvr  +++|      DO                             # SET UP NEXT CU MESSAGE #
05133  M01S04904.exdrvr  +++|        BEGIN  # NEXT #
05134  M01S04905.exdrvr  +++|        IF NEXTFTN[I] EQ MS$MSG[0]
05135  M01S04906.exdrvr  +++|        THEN                         # MESSAGE FOUND #
05136  M01S04907.exdrvr  +++|          BEGIN  # RESET #
05137  M01S04908.exdrvr  +++|          MS$MSG[0] = NEXTFTN[I+1];  # GET NEXT FUNCTION #
05138  M01S04909.exdrvr  +++|          RETURN;
05139  M01S04910.exdrvr  +++|          END  # RESET #
05140  M01S04911.exdrvr  +++|
05141  M01S04912.exdrvr  +++|        END  # NEXT #
05142  M01S04913.exdrvr  +++|
05143  M01S04914.exdrvr  +++|      FE$RTN[0] = "RESTCU2.";        # NEXT MESSAGE NOT FOUND #
05144  M01S04915.exdrvr  +++|
05145  M01S04916.exdrvr  +++|RESTCU1:
05146  M01S04917.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
05147  M01S04918.exdrvr  +++|      ABORT;
05148  M01S04919.exdrvr  +++|      END  # RESTCU #
05149  M01S04920.exdrvr  +++|
05150  M01S04921.exdrvr  +++|    TERM
05151  M01S04922.exdrvr  +++|PROC SENDMSG;
05152  M01S04923.exdrvr  +++|# TITLE SENDMSG - SEND M860 MESSAGE.                                  #
05153  M01S04924.exdrvr  +++|
05154  M01S04925.exdrvr  +++|      BEGIN  # SENDMSG #
05155  M01S04926.exdrvr  +++|
05156  M01S04927.exdrvr  +++|#
05157  M01S04928.exdrvr  +++|**    SENDMSG - SEND M860 MESSAGE.
05158  M01S04929.exdrvr  +++|*
05159  M01S04930.exdrvr  +++|*     *SENDMSG* MONITORS M860 MESSAGE PROCESSING.  IT CONTROLS THE
05160  M01S04931.exdrvr  +++|*     PROGRESS OF AN M860 MESSAGE FROM ITS CREATION TO THE VERIFICATION
05161  M01S04932.exdrvr  +++|*     OF ITS INCOMING M860 RESPONSE.
05162  M01S04933.exdrvr  +++|*
05163  M01S04934.exdrvr  +++|*     PROC SENDMSG
05164  M01S04935.exdrvr  +++|*
05165  M01S04936.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
05166  M01S04937.exdrvr  +++|*
05167  M01S04938.exdrvr  +++|*                P<MBFHDR> = UDT MESSAGE BUFFER HEADER ADDRESS.
05168  M01S04939.exdrvr  +++|*
05169  M01S04940.exdrvr  +++|*     EXIT       THE M860 RESPONSE TO THE ORIGINAL M860 MESSAGE IS
05170  M01S04941.exdrvr  +++|*                STORED IN THE STORAGE BUFFER TABLE, AND HAS BEEN
05171  M01S04942.exdrvr  +++|*                VERIFIED.
05172  M01S04943.exdrvr  +++|*
05173  M01S04944.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, SENDMSG0.* - CHANNEL MESSAGE COUNT WAS
05174  M01S04945.exdrvr  +++|*                                             ZERO WHEN AN M860 MESSAGE
05175  M01S04946.exdrvr  +++|*                                             TIMED OUT.
05176  M01S04947.exdrvr  +++|*
05177  M01S04948.exdrvr  +++|*                *EXEC ABNORMAL, SENDMSG2.* - FATAL RETURN CODE ERROR
05178  M01S04949.exdrvr  +++|*                                             FOUND IN M860 RESPONSE.
05179  M01S04950.exdrvr  +++|*
05180  M01S00043.mse1    +++|*                *EXEC ABNORMAL, SENDMSG3.* - CHANNEL MESSAGE COUNT WAS
05181  M01S00044.mse1    +++|*                                             ZERO WHEN AN M860
05182  M01S00045.mse1    +++|*                                             RESPONSE WAS RECEIVED.
05183  M01S00046.mse1    +++|*
05184  M01S04951.exdrvr  +++|*     NOTES      IF AN M860 RESPONSE TIMES OUT, *HARDWARE PROBLEM*
05185  M01S04952.exdrvr  +++|*                STATUS IS RETURNED IN THE *DRQUEUE* ENTRY, AND THE
05186  M01S04953.exdrvr  +++|*                CHANNEL MESSAGE COUNT IS DECREMENTED.
05187  M01S04954.exdrvr  +++|#
05188  M01S04955.exdrvr  +++|
05189  M01S04956.exdrvr  +++|
05190  M01S04957.exdrvr  +++|#
05191  M01S04958.exdrvr  +++|****  PROC SENDMSG - XREF LIST BEGIN.
05192  M01S04959.exdrvr  +++|#
05193  M01S04960.exdrvr  +++|
05194  M01S04961.exdrvr  +++|      XREF
05195  M01S04962.exdrvr  +++|        BEGIN
05196  M01S04963.exdrvr  +++|        PROC ABORT;                  # ABORT #
05197  M01S04964.exdrvr  +++|        PROC CALLPP;                 # PASS MESSAGES/DATA TO PP #
05198  M01S04965.exdrvr  +++|        PROC CRMSG;                  # CREATE M860 MESSAGE #
05199  M01S04966.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
05200  M01S04967.exdrvr  +++|        PROC RTIME;                  # GET TIME SINCE DEADSTART #
05201  M01S04968.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
05202  M01S04969.exdrvr  +++|        END
05203  M01S04970.exdrvr  +++|
05204  M01S04971.exdrvr  +++|#
05205  M01S04972.exdrvr  +++|****  PROC SENDMSG - XREF LIST END.
05206  M01S04973.exdrvr  +++|#
05207  M01S04974.exdrvr  +++|
05208  M01S04975.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
05209  M01S04976.exdrvr  +++|*CALL,COMBFAS
05210  M01S04977.exdrvr  +++|*CALL,COMBCDD
05211  M01S04978.exdrvr  +++|*CALL,COMBCPR
05212  M01S04979.exdrvr  +++|*CALL,COMBFET
05213  M01S04980.exdrvr  +++|*CALL,COMBHFC
05214  M01S04981.exdrvr  +++|*CALL,COMBKDD
05215  M01S04982.exdrvr  +++|*CALL,COMBLRQ
05216  M01S04983.exdrvr  +++|*CALL,COMBUDT
05217  M01S04984.exdrvr  +++|*CALL,COMXCTF
05218  M01S04985.exdrvr  +++|*CALL,COMXMSC
05219  M01S04986.exdrvr  +++|
05220  M01S04987.exdrvr  +++|      ITEM MBFTN      U;             # SAVE MSG BUFFER M860 FUNCTION #
05221  M01S04988.exdrvr  +++|                                               CONTROL EJECT;
05222  M01S04989.exdrvr  +++|
05223  M01S04990.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;    # ASSUME MESSAGE IN UDT #
05224  M01S04991.exdrvr  +++|      MBFTN = MS$MSG[0];             # SAVE FOR LATER COMPARE #
05225  M01S04992.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0
05226  M01S04993.exdrvr  +++|      THEN                           # PROCESS MESSAGE IN SBT #
05227  M01S04994.exdrvr  +++|        BEGIN  # SBT #
05228  M01S04995.exdrvr  +++|        P<UDT$MSG> = MBF$SBADDR[0];
05229  M01S04996.exdrvr  +++|        END  # SBT #
05230  M01S04997.exdrvr  +++|
05231  M01S04998.exdrvr  +++|      P<KWORD> = LOC(LLR$KWORDS[0]);
05232  M01S04999.exdrvr  +++|      IF MBF$TMOUT[0] NQ 0           # AWAITING M860 RESPONSE #
05233  M01S05000.exdrvr  +++|      THEN                           # CHECK FOR CU OR CHANNEL OFF #
05234  M01S05001.exdrvr  +++|        BEGIN  # PRESET #
05235  M01S05002.exdrvr  +++|        P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);
05236  M01S05003.exdrvr  +++|        P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
05237  M01S05004.exdrvr  +++|        P<FETMRA> = P<FETMWB> - 1;
05238  M01S05005.exdrvr  +++|        P<FETMRB> = FRA$MRBADR[0];
05239  M01S05006.exdrvr  +++|        END  # PRESET #
05240  M01S05007.exdrvr  +++|
05241  M01S05008.exdrvr  +++|      IF MBF$TMOUT[0] NQ 0           # MESSAGE EXISTS #
05242  M01S05009.exdrvr  +++|        AND (RTIMSECS[0] - MBF$TMOUT[0] GQ MAX$MSTO  # MSG TIMED OUT #
05243  M01S05010.exdrvr  +++|        OR (NOT UD$CUON[LLR$CU[0]])  # CU TURNED OFF #
05244  M01S05011.exdrvr  +++|        OR NOT FMW$CHON[0])          # CHANNEL TURNED OFF #
05245  M01S05012.exdrvr  +++|        AND MBF$SBADDR[0] EQ 0       # RESPONSE NOT RECEIVED #
05246  M01S05013.exdrvr  +++|        AND KW$COMP[0]               # SKIP IF GO NOT YET RECEIVED #
05247  M01S05014.exdrvr  +++|      THEN                           # CLEAN UP BEFORE RETURNING LLRQ #
05248  M01S05015.exdrvr  +++|        BEGIN  # CLEAN UP #
05249  M01S05016.exdrvr  +++|        IF MSGCNT(LLR$CIF[0],LLR$CU[0]) EQ 0
05250  M01S05017.exdrvr  +++|        THEN                         # MESSAGE COUNT INCORRECT #
05251  M01S05018.exdrvr  +++|          BEGIN  # ABORT #
05252  M01S05019.exdrvr  +++|          FE$RTN[0] = "SENDMSG0.";
05253  M01S05020.exdrvr  +++|          GOTO SENDMSG1;
05254  M01S05021.exdrvr  +++|          END  # ABORT #
05255  M01S05022.exdrvr  +++|
05256  M01S05023.exdrvr  +++|        MSGCNT(LLR$CIF[0],LLR$CU[0]) = MSGCNT(LLR$CIF[0],LLR$CU[0])-1;
05257  M01S05024.exdrvr  +++|                                     # DECREMENT CHANNEL MSG COUNT #
05258  M01S05025.exdrvr  +++|        IF MS$MSG[0] EQ HFC$RDRAW    # READING RAW DATA #
05259  M01S05026.exdrvr  +++|        THEN                         # RESET READ FET #
05260  M01S05027.exdrvr  +++|          BEGIN  # RESET #
05261  M01S05028.exdrvr  +++|          FMR$RDBA[0] = 0;           # REMOVE RAW DATA BUFFER ADDR #
05262  M01S05029.exdrvr  +++|          END  # RESET #
05263  M01S05030.exdrvr  +++|
05264  M01S05031.exdrvr  +++|        LLR$DR[0] = RESPTYP4"M86$HDW$PR";  # INDICATE HARDWARE PROBLEM #
05265  M01S05032.exdrvr  +++|        IF MS$MSQN$DI[0] NQ 0        # DRD MESSAGE #
05266  M01S05033.exdrvr  +++|        THEN                         # TURN DRD OFF #
05267  M01S05034.exdrvr  +++|          BEGIN  # OFF #
05268  M01S05035.exdrvr  +++|          LLR$DRFUL[0] = TRUE;       # FORCE STORE, IF POSSIBLE #
05269  M01S00047.mse1    +++|          LLR$SCIF[0] = LLR$CIF[0];  # SAVE TO DECIDE IF DRD GOES OFF #
05270  M01S00048.mse1    +++|          LLR$SCU[0] = LLR$CU[0];
05271  M01S05036.exdrvr  +++|          END  # OFF #
05272  M01S05037.exdrvr  +++|
05273  M01S05038.exdrvr  +++|        RETURN;
05274  M01S05039.exdrvr  +++|        END  # CLEAN UP #
05275  M01S05040.exdrvr  +++|
05276  M01S05041.exdrvr  +++|      IF NOT MBF$SENT[0]
05277  M01S05042.exdrvr  +++|      THEN                           # MSG NOT ISSUED TO WRITE BUFFER #
05278  M01S05043.exdrvr  +++|        BEGIN  # SEND #
05279  M01S05044.exdrvr  +++|        IF NOT MBF$ACTIVE[0]
05280  M01S05045.exdrvr  +++|        THEN                         # MESSAGE NOT CREATED #
05281  M01S05046.exdrvr  +++|          BEGIN  # CREATE #
05282  M01S05047.exdrvr  +++|          CRMSG;                     # CREATE M860 MESSAGE #
05283  M01S05048.exdrvr  +++|          LLR$DR[0] = RESPTYP4"OK4"; # ASSUME RESPONSE OK #
05284  M01S05049.exdrvr  +++|          END  # CREATE #
05285  M01S05050.exdrvr  +++|
05286  M01S05051.exdrvr  +++|        IF NOT MBF$ACTIVE[0]       ##
05287  M01S05052.exdrvr  +++|          AND ((MS$MSG[0] GQ HFC$CHSCIF  ##
05288  M01S05053.exdrvr  +++|          AND MS$MSG[0] LQ HFC$CHSAIF)  ##
05289  M01S05054.exdrvr  +++|          OR MS$MSG[0] EQ HFC$SETMAS  ##
05290  M01S05055.exdrvr  +++|          OR MS$MSG[0] EQ HFC$STERLG  ##
05291  M01S05056.exdrvr  +++|          OR MS$MSG[0] EQ HFC$STERDR)
05292  M01S05057.exdrvr  +++|        THEN                         # ALL SPECIAL MSGS COMPLETED #
05293  M01S05058.exdrvr  +++|          BEGIN  # EXIT #
05294  M01S05059.exdrvr  +++|          RETURN;
05295  M01S05060.exdrvr  +++|          END  # EXIT #
05296  M01S05061.exdrvr  +++|
05297  M01S05062.exdrvr  +++|        CALLPP(IRPMSG);              # SEND MSG TO WRITE BUFFER #
05298  M01S05063.exdrvr  +++|        IF NOT MBF$SENT[0]
05299  M01S05064.exdrvr  +++|        THEN                         # MESSAGE NOT YET SENT #
05300  M01S05065.exdrvr  +++|          BEGIN  # TRY LATER #
05301  M01S05066.exdrvr  +++|          RETURN;
05302  M01S05067.exdrvr  +++|          END  # TRY LATER #
05303  M01S05068.exdrvr  +++|
05304  M01S05069.exdrvr  +++|        RTIME(RTIMESTAT);            # PRESET MESSAGE TIMEOUT #
05305  M01S05070.exdrvr  +++|        MBF$TMOUT[0] = RTIMSECS[0];
05306  M01S05071.exdrvr  +++|        END  # SEND #
05307  M01S05072.exdrvr  +++|
Line S05073 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05308  M02S05073.mse1    ---|      IF MBF$SBADDR[0] EQ 0
Line S05074 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05309  M02S05074.mse1    ---|      THEN                           # RESPONSE NOT YET RECEIVED #
Line S05075 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05310  M02S05075.mse1    ---|        BEGIN  # TRY LATER #
05311  M01S00049.mse1    +++|      IF MBF$SBADDR[0] EQ 0          # STILL AWAITING RESPONSE #
05312  M01S00050.mse1    +++|        OR MS$MSG$R[0]               # NO RESPONSE EXPECTED #
05313  M01S00051.mse1    +++|      THEN                           # NO RESPONSE TO BE CHECKED #
05314  M01S00052.mse1    +++|        BEGIN  # EXIT #
05315  M01S05076.exdrvr  +++|        RETURN;
Line S05077 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05316  M02S05077.mse1    ---|        END  # TRY LATER #
05317  M01S00053.mse1    +++|        END  # EXIT #
05318  M01S05078.exdrvr  +++|
05319  M01S05079.exdrvr  +++|      DRVRACTIVE = TRUE;             # NOTE DRIVER HAD ACTIVITY #
05320  M01S05080.exdrvr  +++|      P<UDT$MSG> = MBF$SBADDR[0];
05321  M01S05081.exdrvr  +++|      IF MS$MSG[0] NQ MBFTN          ##
05322  M01S05082.exdrvr  +++|        AND (NOT MS$MSG$R[0])        # M860 RESPONSES ALREADY CHECKED #
05323  M01S05083.exdrvr  +++|        AND (NOT (MBFTN GQ HFC$MVLMVR  # MOUNT VOLUME - UNLOAD PAIR #
05324  M01S05084.exdrvr  +++|        AND MBFTN LQ HFC$MVLMNW      ##
05325  M01S05085.exdrvr  +++|        AND (MS$MSG[0] EQ HRF$UNITRW ##
05326  M01S05086.exdrvr  +++|        OR MS$MSG[0] EQ HRF$FORCRW)))  ##
05327  M01S05087.exdrvr  +++|        AND NOT (MBFTN EQ HFC$RESCON # RESTART - CURESTART PAIR #
05328  M01S05088.exdrvr  +++|        AND MS$MSG[0] EQ HRF$CONRES)
05329  M01S05089.exdrvr  +++|      THEN                           # MESSAGE TYPE MISMATCH #
05330  M01S05090.exdrvr  +++|        BEGIN  # THROW #
05331  M01S05091.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);        # ASSUME THIS RESPONSE TIMED OUT #
05332  M01S05092.exdrvr  +++|        MBF$SBADDR[0] = 0;
05333  M01S05093.exdrvr  +++|        RETURN;
05334  M01S05094.exdrvr  +++|        END  # THROW #
05335  M01S05095.exdrvr  +++|
05336  M01S05096.exdrvr  +++|      IF ((MS$RETCODE[0] EQ HRC$CSNMIS  # CSN MISMATCH #
Line S05097 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
05337  M02S05097.msea023 ---|        AND MS$MSG[0] NQ HFC$ACCR)   # EXPECTED ON LOAD #
05338  M01S00021.msea023 +++|        AND MS$MSG[0] NQ HFC$ACCR)   # POSSIBLE MAP ERROR #
05339  M01S05098.exdrvr  +++|        OR MS$RETCODE[0] EQ HRC$DLERR# DATA LENGTH ERROR #
05340  M01S05099.exdrvr  +++|        OR MS$RETCODE[0] EQ HRC$UNITAS)  # UNIT ALREADY ASSIGNED #
05341  M01S05100.exdrvr  +++|        AND MS$MSG[0] NQ HFC$RDRAW   # HANDLE THESE OUT OF EXEC #
05342  M01S05101.exdrvr  +++|      THEN                           # FATAL ERROR #
05343  M01S05102.exdrvr  +++|        BEGIN  # ABORT #
05344  M01S05103.exdrvr  +++|        FE$RTN[0] = "SENDMSG2.";
05345  M01S05104.exdrvr  +++|        GOTO SENDMSG1;
05346  M01S05105.exdrvr  +++|        END  # ABORT #
05347  M01S05106.exdrvr  +++|
05348  M01S00054.mse1    +++|      IF MSGCNT(LLR$CIF[0],LLR$CU[0]) EQ 0
05349  M01S00055.mse1    +++|      THEN                           # MESSAGE COUNT INCORRECT #
05350  M01S00056.mse1    +++|        BEGIN  # ABORT #
05351  M01S00057.mse1    +++|        FE$RTN[0] = "SENDMSG3.";
05352  M01S00058.mse1    +++|        GOTO SENDMSG1;
05353  M01S00059.mse1    +++|        END  # ABORT #
05354  M01S00060.mse1    +++|
05355  M01S00061.mse1    +++|      MSGCNT(LLR$CIF[0],LLR$CU[0]) = MSGCNT(LLR$CIF[0],LLR$CU[0]) - 1;
05356  M01S00062.mse1    +++|                                     # DECREMENT CHANNEL MSG COUNT #
05357  M01S05107.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$DRVERR # DEVICE DRIVER ERROR #
05358  M01S05108.exdrvr  +++|        OR MS$RETCODE[0] EQ HRC$DRVHO  ##
05359  M01S05109.exdrvr  +++|        OR MS$RETCODE[0] EQ HRC$DRVHW  ##
Line S05110 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
05360  M02S05110.msea023 ---|        OR MS$RETCODE[0] EQ HRC$DRVNA
05361  M01S00022.msea023 +++|        OR MS$RETCODE[0] EQ HRC$DRVNA  ##
05362  M01S00023.msea023 +++|        OR MS$RETCODE[0] EQ HRC$THRERR # CARTRIDGE THREADING ERRFOR #
05363  M01S05111.exdrvr  +++|      THEN                           # DRD MESSAGE ERROR #
05364  M01S05112.exdrvr  +++|        BEGIN  # DRD #
05365  M01S05113.exdrvr  +++|        LLR$DR[0] = RESPTYP4"M86$HDW$PR";
05366  M01S05114.exdrvr  +++|        IF MS$MSG[0] EQ HFC$WVLBUT   # ASSUME WRITE ERROR INSTEAD #
05367  M01S05115.exdrvr  +++|          AND MS$RETCODE[0] EQ HRC$DRVERR
05368  M01S05116.exdrvr  +++|        THEN                         # LET DESTAGING TO SM CONTINUE #
05369  M01S05117.exdrvr  +++|          BEGIN  # RESET #
05370  M01S05118.exdrvr  +++|          LLR$DR[0] = RESPTYP4"UN$WRT$ERR";
05371  M01S05119.exdrvr  +++|          END  # RESET #
05372  M01S05120.exdrvr  +++|
05373  M01S05121.exdrvr  +++|        IF (MS$MSG[0] LS HFC$CHSCIF  # NOT STATUS CHANGES #
05374  M01S05122.exdrvr  +++|          OR MS$MSG[0] GR HFC$CHSAIF)  ##
05375  M01S05123.exdrvr  +++|          AND (MS$MSG[0] NQ HFC$WVLBUT  # ASSUME WRITE ERROR INSTEAD #
05376  M01S05124.exdrvr  +++|          OR MS$RETCODE[0] NQ HRC$DRVERR)
05377  M01S05125.exdrvr  +++|        THEN                         # TRY TO REMOVE CARTRIDGE #
05378  M01S05126.exdrvr  +++|          BEGIN  # REMOVE #
05379  M01S05127.exdrvr  +++|          LLR$DRFUL[0] = TRUE;       # FORCE STORE, IF NOT ACQUIRE #
05380  M01S00063.mse1    +++|          LLR$SCIF[0] = LLR$CIF[0];  # SAVE IN CASE OVERWRITTEN #
05381  M01S00064.mse1    +++|          LLR$SCU[0] = LLR$CU[0];
05382  M01S05128.exdrvr  +++|          END  # REMOVE #
05383  M01S05129.exdrvr  +++|
05384  M01S05130.exdrvr  +++|        END  # DRD #
05385  M01S05131.exdrvr  +++|
05386  M01S05132.exdrvr  +++|      RETURN;
05387  M01S05133.exdrvr  +++|
05388  M01S05134.exdrvr  +++|SENDMSG1:
05389  M01S05135.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);          # ABORT PROCESSING #
05390  M01S05136.exdrvr  +++|      ABORT;
05391  M01S05137.exdrvr  +++|      END  # SENDMSG #
05392  M01S05138.exdrvr  +++|
05393  M01S05139.exdrvr  +++|    TERM
05394  M01S05140.exdrvr  +++|PROC SSDRVR;
05395  M01S05141.exdrvr  +++|# TITLE SSDRVR - MSAS DRIVER MAIN ROUTINE.                            #
05396  M01S05142.exdrvr  +++|
05397  M01S05143.exdrvr  +++|      BEGIN  # SSDRVR #
05398  M01S05144.exdrvr  +++|
05399  M01S05145.exdrvr  +++|#
05400  M01S05146.exdrvr  +++|**    SSDRVR - MSAS DRIVER MAIN ROUTINE.
05401  M01S05147.exdrvr  +++|*
05402  M01S05148.exdrvr  +++|*     *SSDRVR* IS THE INTERFACE BETWEEN *SSEXEC* AND
05403  M01S05149.exdrvr  +++|*     THE PRIMARY FUNCTIONS OF THE MSAS DRIVER.  IT IS
05404  M01S05150.exdrvr  +++|*     CALLED TO BOTH PROCESS NEW REQUESTS FROM *SSEXEC*,
05405  M01S05151.exdrvr  +++|*     AND TO CONTINUE PROCESSING FOR THOSE REQUESTS
05406  M01S05152.exdrvr  +++|*     ALREADY STARTED.
05407  M01S05153.exdrvr  +++|*
05408  M01S05154.exdrvr  +++|*     PROC SSDRVR
05409  M01S05155.exdrvr  +++|*
05410  M01S05156.exdrvr  +++|*     ENTRY      THE *DRQUEUE* CONTAINS A QUEUE OF *LLRQ* ENTRIES
05411  M01S05157.exdrvr  +++|*                WHICH DEFINE THE SET OF NEW REQUESTS BEING PASSED
05412  M01S05158.exdrvr  +++|*                FROM *SSEXEC* TO THE DRIVER.  THIS QUEUE MAY
05413  M01S05159.exdrvr  +++|*                BE EMPTY.
05414  M01S05160.exdrvr  +++|*
05415  M01S05161.exdrvr  +++|*     EXIT       ALL DRIVER REQUESTS HAVE BEEN PROCESSED AS FAR AS
05416  M01S05162.exdrvr  +++|*                POSSIBLE, AND ALL COMPLETED DRIVER REQUESTS HAVE
05417  M01S05163.exdrvr  +++|*                BEEN RETURNED TO THE *LLRQ* READY CHAIN.  AN OPERATOR
05418  M01S05164.exdrvr  +++|*                *N.IDLE* COMMAND DURING FULL INITIALIZATION FORCES
05419  M01S05165.exdrvr  +++|*                AN IMMEDIATE RETURN TO *SSEXEC*.
05420  M01S05166.exdrvr  +++|*
05421  M01S05167.exdrvr  +++|#
05422  M01S05168.exdrvr  +++|
05423  M01S05169.exdrvr  +++|
05424  M01S05170.exdrvr  +++|#
05425  M01S05171.exdrvr  +++|****  PROC SSDRVR - XREF LIST BEGIN.
05426  M01S05172.exdrvr  +++|#
05427  M01S05173.exdrvr  +++|
05428  M01S05174.exdrvr  +++|      XREF
05429  M01S05175.exdrvr  +++|        BEGIN
Line S05176 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05430  M02S05176.exdrvr2 ---|        PROC ABORT;                  # ABORT #
05431  M01S05177.exdrvr  +++|        PROC ADD$LNK;                # ADD ENTRY TO END OF CHAIN #
05432  M01S05178.exdrvr  +++|        PROC DEL$LNK;                # DELETE ENTRY FROM CHAIN #
Line S05179 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05433  M02S05179.exdrvr2 ---|        PROC MESSAGE;                # SEND MESSAGE FROM ARRAY #
Line S05180 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05434  M02S05180.exdrvr2 ---|        PROC MSG;                    # SEND DAYFILE MESSAGE #
05435  M01S00133.exdrvr2 +++|        PROC MESSAGE;                # SEND DAYFILE MESSAGE #
05436  M01S05181.exdrvr  +++|        PROC PPDONE;                 # PROCESS COMPLETED PP CALLS #
05437  M01S05182.exdrvr  +++|        PROC PROCDRQ;                # PROCESS DRIVER REQUESTS #
05438  M01S05183.exdrvr  +++|        PROC PROCMRB;                # PROCESS MESSAGE READ BUFFERS #
05439  M01S05184.exdrvr  +++|        PROC RECALL;                 # SUSPEND PROCESSING #
05440  M01S05185.exdrvr  +++|        END
05441  M01S05186.exdrvr  +++|
05442  M01S05187.exdrvr  +++|#
05443  M01S05188.exdrvr  +++|****  PROC SSDRVR - XREF LIST END.
05444  M01S05189.exdrvr  +++|#
05445  M01S05190.exdrvr  +++|
05446  M01S05191.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
05447  M01S05192.exdrvr  +++|*CALL COMBFAS
05448  M01S05193.exdrvr  +++|*CALL COMBCHN
Line S05194 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05449  M02S05194.exdrvr2 ---|*CALL,COMBCPR
05450  M01S00134.exdrvr2 +++|*CALL,COMBKDA
05451  M01S05195.exdrvr  +++|*CALL,COMBFET
05452  M01S05196.exdrvr  +++|*CALL,COMBKDD
05453  M01S05197.exdrvr  +++|*CALL COMBLRQ
05454  M01S05198.exdrvr  +++|*CALL COMBUDT
05455  M01S05199.exdrvr  +++|*CALL COMXCTF
05456  M01S05200.exdrvr  +++|*CALL,COMXJCA
05457  M01S05201.exdrvr  +++|*CALL COMXMSC
05458  M01S05202.exdrvr  +++|
05459  M01S05203.exdrvr  +++|      ITEM I          I;             # INDEX #
05460  M01S05204.exdrvr  +++|      ITEM J          I;             # INDEX #
05461  M01S05205.exdrvr  +++|      ITEM MRBACTIVE  B;             # MSG READ BUFFER ACTIVITY FLAG #
05462  M01S05206.exdrvr  +++|      ITEM MRBSTAT    B;             # SET IF MSG READ BUF PROCESSED #
05463  M01S05207.exdrvr  +++|      ITEM NEXTREQ    U;             # ADDRESS OF NEXT DRIVER REQUEST #
05464  M01S05208.exdrvr  +++|                                               CONTROL EJECT;
05465  M01S05209.exdrvr  +++|
05466  M01S05210.exdrvr  +++|      DRVRRECALL = FALSE;            # INDICATE NO DRIVER RECALL #
05467  M01S05211.exdrvr  +++|      DRVRACTIVE = TRUE;
05468  M01S05212.exdrvr  +++|      REPEAT WHILE DRVRACTIVE
05469  M01S05213.exdrvr  +++|      DO                             # DRIVER MAIN LOOP #
05470  M01S05214.exdrvr  +++|        BEGIN  # MAIN LOOP #
05471  M01S05215.exdrvr  +++|        DRVRACTIVE = FALSE;          # INDICATE NO ACTIVITY #
05472  M01S05216.exdrvr  +++|
05473  M01S05217.exdrvr  +++|#
05474  M01S05218.exdrvr  +++|*     PROCESS ALL DRIVER QUEUE ENTRIES.
05475  M01S05219.exdrvr  +++|#
05476  M01S05220.exdrvr  +++|
05477  M01S05221.exdrvr  +++|        P<LLRQ> = CHN$BOC[LCHN"DRQUEUE"];  # POINT TO FIRST REQUEST #
05478  M01S05222.exdrvr  +++|        SLOWFOR I = 0 WHILE P<LLRQ> NQ 0
05479  M01S05223.exdrvr  +++|        DO                           # PROCESS DRIVER QUEUE #
05480  M01S05224.exdrvr  +++|          BEGIN  # PROCESS #
05481  M01S05225.exdrvr  +++|          P<KWORD> = LOC(LLR$KWORDS[0]);
05482  M01S05226.exdrvr  +++|          IF NOT (KW$COMP[0]         # K-DISPLAY ACTIVE #
05483  M01S05227.exdrvr  +++|            OR LLR$UCPABT[0])        # UCP ABORTED #
05484  M01S05228.exdrvr  +++|          THEN                       # RECALL DRIVER UNTIL COMPLETE #
05485  M01S05229.exdrvr  +++|            BEGIN  # RECALL #
05486  M01S05230.exdrvr  +++|            DRVRRECALL = TRUE;
05487  M01S05231.exdrvr  +++|            P<LLRQ> = LLR$LINK1[0];  # POINT TO NEXT REQUEST #
05488  M01S05232.exdrvr  +++|            TEST I;
05489  M01S05233.exdrvr  +++|            END  # RECALL #
05490  M01S05234.exdrvr  +++|
Line S05235 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05491  M02S05235.exdrvr2 ---|          IF LLR$PRCNME[0] NQ REQTYP4"LOAD$CART"  ##
Line S05236 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05492  M02S05236.exdrvr2 ---|            AND LLR$PRCNME[0] NQ REQTYP4"INITHW"
Line S05237 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05493  M02S05237.exdrvr2 ---|            AND LLR$MBH[0] EQ 0
Line S05238 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05494  M02S05238.exdrvr2 ---|          THEN                       # EXEC ERROR #
Line S05239 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05495  M02S05239.exdrvr2 ---|            BEGIN
Line S05240 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05496  M02S05240.exdrvr2 ---|            FE$RTN[0] = "SSDRVRA.";
Line S05241 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05497  M02S05241.exdrvr2 ---|            MESSAGE(FEMSG,UDFL1);
Line S05242 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05498  M02S05242.exdrvr2 ---|            ABORT;
Line S05243 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05499  M02S05243.exdrvr2 ---|            END
Line S05244 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05500  M02S05244.exdrvr2 ---|
05501  M01S05245.exdrvr  +++|          IF LLR$RS[0] NQ PROCST"COMPLETE"
05502  M01S05246.exdrvr  +++|          THEN                       # MORE PROCESSING REQUIRED #
05503  M01S05247.exdrvr  +++|            BEGIN  # CONTINUE #
05504  M01S05248.exdrvr  +++|            PROCDRQ;                 # PROCESS DRIVER REQUEST #
05505  M01S05249.exdrvr  +++|            END  # CONTINUE #
05506  M01S05250.exdrvr  +++|
Line S05251 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05507  M02S05251.exdrvr2 ---|          IF LLR$PRCNME[0] NQ REQTYP4"LOAD$CART"
Line S05252 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05508  M02S05252.exdrvr2 ---|            AND LLR$PRCNME[0] NQ REQTYP4"INITHW"
Line S05253 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05509  M02S05253.exdrvr2 ---|            AND LLR$MBH[0] EQ 0
Line S05254 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05510  M02S05254.exdrvr2 ---|          THEN                       # DRIVER ERROR #
Line S05255 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05511  M02S05255.exdrvr2 ---|            BEGIN
Line S05256 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05512  M02S05256.exdrvr2 ---|            FE$RTN[0] = "SSDRVRB.";
Line S05257 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05513  M02S05257.exdrvr2 ---|            MESSAGE(FEMSG,UDFL1);
Line S05258 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05514  M02S05258.exdrvr2 ---|            ABORT;
Line S05259 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05515  M02S05259.exdrvr2 ---|            END
Line S05260 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05516  M02S05260.exdrvr2 ---|
05517  M01S05261.exdrvr  +++|          NEXTREQ = LLR$LINK1[0];    # SAVE NEXT REQUEST ADDRESS #
05518  M01S05262.exdrvr  +++|          IF LLR$RS[0] EQ PROCST"COMPLETE"  ##
05519  M01S05263.exdrvr  +++|            AND KW$COMP[0]           # REQUEST NOT PENDING #
05520  M01S05264.exdrvr  +++|          THEN                       # PUT REQUEST BACK ON READY QUEUE #
05521  M01S05265.exdrvr  +++|            BEGIN  # BACK #
05522  M01S05266.exdrvr  +++|            IF LLR$CU[0] NQ 0
05523  M01S05267.exdrvr  +++|            THEN                     # CHECK FOR CU/CHANNEL OFF #
05524  M01S05268.exdrvr  +++|              BEGIN  # OFF #
05525  M01S05269.exdrvr  +++|              P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);
05526  M01S05270.exdrvr  +++|              P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
05527  M01S05271.exdrvr  +++|              IF P<FETMWB> EQ 0
05528  M01S05272.exdrvr  +++|              THEN                   # NO CHANNEL ALLOCATED #
05529  M01S05273.exdrvr  +++|                BEGIN  # SKIP #
05530  M01S05274.exdrvr  +++|                GOTO SSDRVR1;        # NO HARDWARE TO CHECK #
05531  M01S05275.exdrvr  +++|                END  # SKIP #
05532  M01S05276.exdrvr  +++|
05533  M01S05277.exdrvr  +++|              P<FETMRA> = P<FETMWB> - 1;
05534  M01S05278.exdrvr  +++|              P<FETMRB> = FRA$MRBADR[0];
05535  M01S05279.exdrvr  +++|              IF NOT (FMW$CHON[0]    # CHANNEL TURNED OFF #
05536  M01S05280.exdrvr  +++|                AND UD$CUON[LLR$CU[0]])  # CU TURNED OFF #
05537  M01S05281.exdrvr  +++|              THEN                   # CHECK IF SM STILL ACCESSIBLE #
05538  M01S05282.exdrvr  +++|                BEGIN  # STOP #
05539  M01S05283.exdrvr  +++|                IF LLR$CU[0] EQ SM$CUO0[LLR$SMO[0]]
05540  M01S05284.exdrvr  +++|                THEN                   # 1ST CU/CHAN BAD #
05541  M01S05285.exdrvr  +++|                  BEGIN  # 1ST #
05542  M01S05286.exdrvr  +++|                  SM$HWOFF1[LLR$SMO[0]] = TRUE;
05543  M01S05287.exdrvr  +++|                  END  # 1ST #
05544  M01S05288.exdrvr  +++|
05545  M01S05289.exdrvr  +++|                IF LLR$CU[0] EQ SM$CUO1[LLR$SMO[0]]
05546  M01S05290.exdrvr  +++|                THEN                   # 2ND CU/CHAN BAD #
05547  M01S05291.exdrvr  +++|                  BEGIN  # 2ND #
05548  M01S05292.exdrvr  +++|                  SM$HWOFF2[LLR$SMO[0]] = TRUE;
05549  M01S05293.exdrvr  +++|                  END  # 2ND #
05550  M01S05294.exdrvr  +++|
05551  M01S05295.exdrvr  +++|                IF (SM$HWOFF1[LLR$SMO[0]]  # 1ST HW BAD #
05552  M01S05296.exdrvr  +++|                  OR NOT UD$EXIST[SM$CUO0[LLR$SMO[0]]])  ##
05553  M01S05297.exdrvr  +++|                  AND (SM$HWOFF2[LLR$SMO[0]]  # 2ND HW BAD #
05554  M01S05298.exdrvr  +++|                  OR NOT UD$EXIST[SM$CUO1[LLR$SMO[0]]])
05555  M01S05299.exdrvr  +++|                THEN                   # ALL HW TO THIS SM BAD #
05556  M01S05300.exdrvr  +++|                  BEGIN  # BAD #
05557  M01S05301.exdrvr  +++|                  SM$HWOFF[LLR$SMO[0]] = TRUE;  # STOP ALL SM ACCESS #
05558  M01S05302.exdrvr  +++|                  END  # BAD #
05559  M01S05303.exdrvr  +++|
05560  M01S05304.exdrvr  +++|                END  # STOP #
05561  M01S05305.exdrvr  +++|
05562  M01S05306.exdrvr  +++|              END  # OFF #
05563  M01S05307.exdrvr  +++|
05564  M01S05308.exdrvr  +++|SSDRVR1:
05565  M01S05309.exdrvr  +++|            DEL$LNK(LOC(LLRQ),LCHN"DRQUEUE",0);
05566  M01S05310.exdrvr  +++|            ADD$LNK(LOC(LLRQ),LCHN"LL$READY",0);
05567  M01S05311.exdrvr  +++|            END  # BACK #
05568  M01S05312.exdrvr  +++|
05569  M01S05313.exdrvr  +++|          P<LLRQ> = NEXTREQ;         # POINT TO NEXT REQUEST #
05570  M01S05314.exdrvr  +++|          END  # PROCESS #
05571  M01S05315.exdrvr  +++|
05572  M01S05316.exdrvr  +++|#
05573  M01S05317.exdrvr  +++|*     PROCESS ALL MESSAGE READ BUFFERS.
05574  M01S05318.exdrvr  +++|#
05575  M01S05319.exdrvr  +++|
05576  M01S05320.exdrvr  +++|        MRBACTIVE = TRUE;            # SET MESSAGE PROCESSED #
05577  M01S05321.exdrvr  +++|        REPEAT WHILE MRBACTIVE
05578  M01S05322.exdrvr  +++|        DO                           # SCAN WHILE MESSAGES TO PROCESS #
05579  M01S05323.exdrvr  +++|          BEGIN  # SCAN #
05580  M01S05324.exdrvr  +++|          MRBACTIVE = FALSE;         # PRESET TO INDICATE NO ACTIVITY #
05581  M01S05325.exdrvr  +++|          SLOWFOR I = 1 STEP 1 WHILE UD$EXIST[I] AND (I LQ MAXCTN)
05582  M01S05326.exdrvr  +++|          DO                         # SCAN CONTROLLERS #
05583  M01S05327.exdrvr  +++|            BEGIN  # CHECK #
05584  M01S05328.exdrvr  +++|            P<MWBTMP> = LOC(UD$CAMF[I]);
05585  M01S05329.exdrvr  +++|            SLOWFOR J = 0 STEP 1 UNTIL MAX$CIF
05586  M01S05330.exdrvr  +++|            DO                       # CHECK READ BUFFERS #
05587  M01S05331.exdrvr  +++|              BEGIN  # EXISTS #
05588  M01S05332.exdrvr  +++|              IF MWB$ADDR[J] NQ 0
05589  M01S05333.exdrvr  +++|              THEN                   # READ BUFFER EXISTS #
05590  M01S05334.exdrvr  +++|                BEGIN  # PROCESS INCOMING MESSAGES #
05591  M01S05335.exdrvr  +++|                P<FETMWB> = MWB$ADDR[J];
05592  M01S05336.exdrvr  +++|                P<FETMRA> = P<FETMWB> - 1;
05593  M01S05337.exdrvr  +++|                P<FETMRB> = FRA$MRBADR[0];  # READ BUFFER ADDRESS #
05594  M01S05338.exdrvr  +++|                PROCMRB(MRBSTAT);
05595  M01S05339.exdrvr  +++|                MRBACTIVE = MRBACTIVE OR MRBSTAT;
05596  M01S05340.exdrvr  +++|                END  # PROCESS INCOMING MESSAGES #
05597  M01S05341.exdrvr  +++|
05598  M01S05342.exdrvr  +++|              END  # EXISTS #
05599  M01S05343.exdrvr  +++|
05600  M01S05344.exdrvr  +++|            END  # CHECK #
05601  M01S05345.exdrvr  +++|
05602  M01S05346.exdrvr  +++|          END  # SCAN #
05603  M01S05347.exdrvr  +++|
05604  M01S05348.exdrvr  +++|#
05605  M01S05349.exdrvr  +++|*     PROCESS ALL COMPLETED PP CALL BLOCK ENTRIES.
05606  M01S05350.exdrvr  +++|#
05607  M01S05351.exdrvr  +++|
05608  M01S05352.exdrvr  +++|        SLOWFOR I = 1 STEP 1 UNTIL PPCBTSIZE
05609  M01S05353.exdrvr  +++|        DO                           # PROCESS CALL BLOCK #
05610  M01S05354.exdrvr  +++|          BEGIN  # PROCESS #
05611  M01S05355.exdrvr  +++|          IF PPU$FC[I] EQ 0
05612  M01S05356.exdrvr  +++|          THEN                       # TRY NEXT ENTRY #
05613  M01S05357.exdrvr  +++|            BEGIN  # NEXT #
05614  M01S05358.exdrvr  +++|            TEST I;
05615  M01S05359.exdrvr  +++|            END  # NEXT #
05616  M01S05360.exdrvr  +++|
05617  M01S05361.exdrvr  +++|          IF DRYUP                   ##
05618  M01S05362.exdrvr  +++|            AND INITIALIZE           # ACTIVE LLRQ-S WONT BE FINISHED #
05619  M01S05363.exdrvr  +++|            AND PPU$ACTIVE[I]
05620  M01S05364.exdrvr  +++|          THEN                       # RECALL DRIVER UNTIL PP DROPS #
05621  M01S05365.exdrvr  +++|            BEGIN  # RECALL #
05622  M01S05366.exdrvr  +++|            DRVRRECALL = TRUE;
05623  M01S05367.exdrvr  +++|            TEST I;
05624  M01S05368.exdrvr  +++|            END  # RECALL #
05625  M01S05369.exdrvr  +++|
05626  M01S05370.exdrvr  +++|          IF (NOT (DRYUP AND INITIALIZE))  # LET LLRQ-S END FIRST #
05627  M01S05371.exdrvr  +++|            AND NOT PPU$ACTIVE[I]
05628  M01S05372.exdrvr  +++|          THEN                       # PP COMPLETED #
05629  M01S05373.exdrvr  +++|            BEGIN  # REMOVE #
05630  M01S05374.exdrvr  +++|            PPDONE(I);               # PROCESS COMPLETED ENTRY #
05631  M01S05375.exdrvr  +++|            END  # REMOVE #
05632  M01S05376.exdrvr  +++|
05633  M01S05377.exdrvr  +++|          END  # PROCESS #
05634  M01S05378.exdrvr  +++|
05635  M01S05379.exdrvr  +++|        END  # MAIN LOOP #
05636  M01S05380.exdrvr  +++|
05637  M01S00135.exdrvr2 +++|#
05638  M01S00136.exdrvr2 +++|*     INFORM OPERATOR IF THE 7990 HARDWARE CAN NO LONGER BE ACCESSED.
05639  M01S00137.exdrvr2 +++|#
05640  M01S00138.exdrvr2 +++|
05641  M01S00139.exdrvr2 +++|      IF UDT$HWOFF[0] NQ 0           # EXEC TO BE SHUT DOWN #
05642  M01S00140.exdrvr2 +++|        AND KREQCLEAR                # B-DISPLAY AVAILABLE FOR MSG #
05643  M01S00141.exdrvr2 +++|        AND NOT INITIALIZE           # *HALT* MSG TO BE SHOWN INSTEAD #
05644  M01S00142.exdrvr2 +++|      THEN                           # INFORM OPERATOR OF PROBLEM #
05645  M01S00143.exdrvr2 +++|        BEGIN  # MSG #
05646  M01S00144.exdrvr2 +++|        IF UDT$CUS$O[0]
05647  M01S00145.exdrvr2 +++|        THEN                         # FLASH CONTROLLER MESSAGE #
05648  M01S00146.exdrvr2 +++|          BEGIN  # CU #
05649  M01S00147.exdrvr2 +++|          MESSAGE("$ALL CONTROLLERS OFF.",LINE2);
05650  M01S00148.exdrvr2 +++|          END  # CU #
05651  M01S00149.exdrvr2 +++|
05652  M01S00150.exdrvr2 +++|        ELSE                         # FLASH CHANNEL MESSAGE #
05653  M01S00151.exdrvr2 +++|          BEGIN  # CHAN #
05654  M01S00152.exdrvr2 +++|          MESSAGE("$ALL CHANNELS OFF.",LINE2);
05655  M01S00153.exdrvr2 +++|          END  # CHAN #
05656  M01S00154.exdrvr2 +++|
05657  M01S00155.exdrvr2 +++|        END  # MSG #
05658  M01S00156.exdrvr2 +++|
05659  M01S05381.exdrvr  +++|      RECALL(0);                     # KEEP CPU TIME DOWN #
05660  M01S05382.exdrvr  +++|      RETURN;
05661  M01S05383.exdrvr  +++|      END  # SSDRVR #
05662  M01S05384.exdrvr  +++|
05663  M01S05385.exdrvr  +++|    TERM
05664  M01S05386.exdrvr  +++|PROC STRCART;
05665  M01S05387.exdrvr  +++|# TITLE STRCART - STORE CARTRIDGE.                                    #
05666  M01S05388.exdrvr  +++|
05667  M01S05389.exdrvr  +++|      BEGIN  # STRCART #
05668  M01S05390.exdrvr  +++|
05669  M01S05391.exdrvr  +++|#
05670  M01S05392.exdrvr  +++|**    STRCART - STORE CARTRIDGE.
05671  M01S05393.exdrvr  +++|*
05672  M01S05394.exdrvr  +++|*     *STRCART* PROCESSES *DRQUEUE* REQUESTS TO STORE CARTRIDGES.  IF
05673  M01S05395.exdrvr  +++|*     THE STORE WAS INITIATED BY A *TDAM* REQUEST, THE DRD BUFFERED LOG
05674  M01S05396.exdrvr  +++|*     IS FORMATTED AND SENT TO THE BML, AND PART OF THE LOG IS SENT TO
05675  M01S05397.exdrvr  +++|*     THE ASSOCIATED *HLRQ* ENTRY.
05676  M01S05398.exdrvr  +++|*
05677  M01S05399.exdrvr  +++|*     PROC STRCART
05678  M01S05400.exdrvr  +++|*
05679  M01S05401.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
05680  M01S05402.exdrvr  +++|*
05681  M01S05403.exdrvr  +++|*     EXIT       THE *DRQUEUE* ENTRY REQUEST STATE FIELD HAS BEEN
05682  M01S05404.exdrvr  +++|*                UPDATED TO INDICATE WHERE SUBSEQUENT PROCESSING OF
05683  M01S05405.exdrvr  +++|*                THIS REQUEST IS TO CONTINUE.
05684  M01S05406.exdrvr  +++|*
05685  M01S05407.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, STRCART1.* - UDT MESSAGE BUFFER STILL
05686  M01S05408.exdrvr  +++|*                                             IN USE.
05687  M01S05409.exdrvr  +++|*
05688  M01S00065.mse1    +++|*                *EXEC ABNORMAL, STRCART2.* - CSN OR DRD IN USE.
05689  M01S00066.mse1    +++|*
05690  M01S05410.exdrvr  +++|*                A K-DISPLAY MESSAGE IS ISSUED IF THE CARTRIDGE WAS
05691  M01S05411.exdrvr  +++|*                EJECTED, THE OUTPUT TRAY OR MATRIX CELL WAS FULL, OR
05692  M01S05412.exdrvr  +++|*                THE ASSOCIATED DRD WAS TURNED OFF DUE TO AN ERROR
05693  M01S05413.exdrvr  +++|*                FOUND BY THE M860 HARDWARE.
05694  M01S05414.exdrvr  +++|*
05695  M01S05415.exdrvr  +++|*     NOTES      THIS IS A PSEUDO-REENTRANT PROCEDURE.
05696  M01S05416.exdrvr  +++|#
05697  M01S05417.exdrvr  +++|
05698  M01S05418.exdrvr  +++|
05699  M01S05419.exdrvr  +++|#
05700  M01S05420.exdrvr  +++|****  PROC STRCART - XREF LIST BEGIN.
05701  M01S05421.exdrvr  +++|#
05702  M01S05422.exdrvr  +++|
05703  M01S05423.exdrvr  +++|      XREF
05704  M01S05424.exdrvr  +++|        BEGIN
05705  M01S05425.exdrvr  +++|        PROC ABORT;                  # ABORT #
05706  M01S05426.exdrvr  +++|        PROC KREQ;                   # SEND K-DISPLAY REQUEST #
05707  M01S05427.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
05708  M01S00067.mse1    +++|        PROC RTIME;                  # GET TIME SINCE DEADSTART #
05709  M01S05428.exdrvr  +++|        PROC SENDMSG;                # SEND M860 MESSAGE #
05710  M01S05429.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
05711  M01S05430.exdrvr  +++|        END
05712  M01S05431.exdrvr  +++|
05713  M01S05432.exdrvr  +++|#
05714  M01S05433.exdrvr  +++|****  PROC STRCART - XREF LIST END.
05715  M01S05434.exdrvr  +++|#
05716  M01S05435.exdrvr  +++|
05717  M01S05436.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
05718  M01S05437.exdrvr  +++|*CALL,COMBFAS
05719  M01S05438.exdrvr  +++|*CALL,COMBCPR
05720  M01S05439.exdrvr  +++|*CALL,COMBFET
05721  M01S05440.exdrvr  +++|*CALL,COMBHFC
05722  M01S05441.exdrvr  +++|*CALL,COMBKDD
05723  M01S05442.exdrvr  +++|*CALL,COMBLRQ
05724  M01S05443.exdrvr  +++|*CALL,COMBUCR
05725  M01S05444.exdrvr  +++|*CALL,COMBUDT
05726  M01S05445.exdrvr  +++|*CALL,COMXCTF
05727  M01S05446.exdrvr  +++|*CALL,COMXMSC
05728  M01S05447.exdrvr  +++|
Line S05448 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05729  M02S05448.exdrvr2 ---|      ITEM STSP       U;             # SM STATUS FROM 1ST CU #
Line S05449 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05730  M02S05449.exdrvr2 ---|      ITEM STSS       U;             # SM STATUS FROM 2ND CU #
Line S05450 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05731  M02S05450.exdrvr2 ---|
05732  M01S05451.exdrvr  +++|      SWITCH STRLBL:PROCST           # DRIVER REQUEST STATE #
05733  M01S05452.exdrvr  +++|            STRINIT:INITIAL,         # INITIAL STATE #
05734  M01S05453.exdrvr  +++|            STRCUBE:CONT1,           # CONTINUATION 1 #
05735  M01S05454.exdrvr  +++|            STRBUFL:CONT2,           # CONTINUATION 2 #
05736  M01S05455.exdrvr  +++|            STRDRDO:CONT3;           # CONTINUATION 3 #
05737  M01S05456.exdrvr  +++|                                               CONTROL EJECT;
05738  M01S05457.exdrvr  +++|                                               CONTROL INERT;
05739  M01S05458.exdrvr  +++|
05740  M01S05459.exdrvr  +++|      GOTO STRLBL[LLR$RS[0]];
05741  M01S05460.exdrvr  +++|
05742  M01S05461.exdrvr  +++|#
05743  M01S05462.exdrvr  +++|*     INITIAL DRIVER REQUEST STATE.
05744  M01S05463.exdrvr  +++|#
05745  M01S05464.exdrvr  +++|
05746  M01S05465.exdrvr  +++|STRINIT:
05747  M01S05466.exdrvr  +++|      IF LLR$MBH[0] EQ 0
05748  M01S05467.exdrvr  +++|      THEN                           # ** PATCH #
05749  M01S05468.exdrvr  +++|        BEGIN
05750  M01S05469.exdrvr  +++|        FE$RTN[0] = "STRCART0.";
05751  M01S05470.exdrvr  +++|        GOTO STRCART2;
05752  M01S05471.exdrvr  +++|        END
05753  M01S05472.exdrvr  +++|
05754  M01S05473.exdrvr  +++|      P<KWORD> = LOC(LLR$KWORDS[0]);
05755  M01S05474.exdrvr  +++|      IF LLR$UCPABT[0]               ##
05756  M01S05475.exdrvr  +++|        AND NOT KW$COMP[0]           # K-DISPLAY MSG PENDING #
05757  M01S05476.exdrvr  +++|      THEN                           # IGNORE UCP ABORT #
05758  M01S05477.exdrvr  +++|        BEGIN  # EXIT #
05759  M01S05478.exdrvr  +++|        RETURN;                      # AVOID ISSUING INFINITE STORES #
05760  M01S05479.exdrvr  +++|        END  # EXIT #
05761  M01S05480.exdrvr  +++|
05762  M01S00068.mse1    +++|      IF LLR$SCU[0] EQ 0             # NO CHANNEL/CU SAVED #
05763  M01S00069.mse1    +++|        AND LLR$DRFUL[0]             # ERROR OCCURRED #
05764  M01S00070.mse1    +++|      THEN                           # DATA ERROR AFTER GOOD REW/UNL #
05765  M01S00071.mse1    +++|        BEGIN  # SAVE #
05766  M01S00072.mse1    +++|        LLR$SCIF[0] = LLR$CIF[0];    # SAVE TO DECIDE ON RETRY #
05767  M01S00073.mse1    +++|        LLR$SCU[0] = LLR$CU[0];
05768  M01S00074.mse1    +++|        END  # SAVE #
05769  M01S00075.mse1    +++|
05770  M01S05481.exdrvr  +++|      LLR$SDR[0] = LLR$DR[0];        # IN CASE EJECTING CARTRIDGE #
05771  M01S05482.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
05772  M01S05483.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
05773  M01S05484.exdrvr  +++|      IF MBF$WORD[0] NQ 0
05774  M01S05485.exdrvr  +++|      THEN                           # LAST MESSAGE NOT PROCESSED #
05775  M01S05486.exdrvr  +++|        BEGIN  # CHECK #
05776  M01S05487.exdrvr  +++|        IF MS$MSG[0] GQ HFC$MVLMVR   # MOUNT-VOLUME #
05777  M01S05488.exdrvr  +++|          AND MS$MSG[0] LQ HFC$MVLMNW
05778  M01S05489.exdrvr  +++|        THEN                         # FORCED STORE ON DATA TRANSFER #
05779  M01S05490.exdrvr  +++|          BEGIN  # OK #
05780  M01S05491.exdrvr  +++|          MBF$WORD[0] = 0;           # PRESET HEADER #
05781  M01S05492.exdrvr  +++|          MS$MSG[0] = HFC$STCRNF;    # FORCE REWIND/UNLOAD #
05782  M01S05493.exdrvr  +++|          END  # OK #
05783  M01S05494.exdrvr  +++|
05784  M01S05495.exdrvr  +++|        ELSE                         # SOFTWARE ERROR #
05785  M01S05496.exdrvr  +++|          BEGIN  # ABORT #
05786  M01S05497.exdrvr  +++|          FE$RTN[0] = "STRCART1.";
05787  M01S05498.exdrvr  +++|          GOTO STRCART2;
05788  M01S05499.exdrvr  +++|          END  # ABORT #
05789  M01S05500.exdrvr  +++|
05790  M01S05501.exdrvr  +++|        END  # CHECK #
05791  M01S05502.exdrvr  +++|
05792  M01S05503.exdrvr  +++|      ELSE                           # ISSUE NORMAL STORE #
05793  M01S05504.exdrvr  +++|        BEGIN  # OK #
Line S05505 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05794  M02S05505.mse1    ---|        IF LLR$LDERR[0]              # DDE ON LOAD #
Line S05506 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05795  M02S05506.mse1    ---|        THEN                         # TURN OFF DRD ONLY #
Line S05507 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05796  M02S05507.mse1    ---|          BEGIN  # OFF #
Line S05508 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05797  M02S05508.mse1    ---|          GOTO STRCART5;
Line S05509 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05798  M02S05509.mse1    ---|          END  # OFF #
Line S05510 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05799  M02S05510.mse1    ---|
05800  M01S05511.exdrvr  +++|        MS$MSG[0] = HFC$STCRNV;
05801  M01S05512.exdrvr  +++|        END  # OK #
05802  M01S05513.exdrvr  +++|
05803  M01S05514.exdrvr  +++|      MBF$SAVE[0] = SAVEMOST;
05804  M01S05515.exdrvr  +++|      LLR$RS[0] = PROCST"CONT1";
05805  M01S05516.exdrvr  +++|
05806  M01S05517.exdrvr  +++|#
05807  M01S05518.exdrvr  +++|*     ISSUE M860 MESSAGE TO STORE CARTRIDGE.
05808  M01S05519.exdrvr  +++|#
05809  M01S05520.exdrvr  +++|
05810  M01S05521.exdrvr  +++|STRCUBE:
05811  M01S05522.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
05812  M01S05523.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
05813  M01S05524.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0          ##
05814  M01S05525.exdrvr  +++|        AND LLR$DR[0] EQ RESPTYP4"OK4"  # GOOD HARDWARE #
05815  M01S05526.exdrvr  +++|      THEN                           # RESPONSE NOT YET RECEIVED #
05816  M01S05527.exdrvr  +++|        BEGIN  # RETRY #
05817  M01S05528.exdrvr  +++|        RETURN;
05818  M01S05529.exdrvr  +++|        END  # RETRY #
05819  M01S05530.exdrvr  +++|
05820  M01S00076.mse1    +++|      IF MS$RETCODE[0] EQ HRC$CSNERR # CSN/DRD IN USE #
05821  M01S00077.mse1    +++|        AND MS$MSG[0] EQ HFC$STCRNV  # NORMAL STORE #
05822  M01S00078.mse1    +++|      THEN                           # MAY BE *ACQUIRE* ERROR RCVY #
05823  M01S00079.mse1    +++|        BEGIN  # CHECK #
05824  M01S00080.mse1    +++|        IF NOT LLR$LDERR[0]
05825  M01S00081.mse1    +++|        THEN                         # DRIVER ERROR #
05826  M01S00082.mse1    +++|          BEGIN  # ABORT #
05827  M01S00083.mse1    +++|          FE$RTN[0] = "STRCART2.";
05828  M01S00084.mse1    +++|          GOTO STRCART2;
05829  M01S00085.mse1    +++|          END  # ABORT #
05830  M01S00086.mse1    +++|
05831  M01S00087.mse1    +++|        ELSE                         # CARTRIDGE HAD LOADED OK #
05832  M01S00088.mse1    +++|          BEGIN  # IGNORE #
05833  M01S00089.mse1    +++|          MS$RETCODE[0] = 0;         # DRD IN USE BY THIS LLRQ #
05834  M01S00090.mse1    +++|          END  # IGNORE #
05835  M01S00091.mse1    +++|
05836  M01S00092.mse1    +++|        END  # CHECK #
05837  M01S00093.mse1    +++|
05838  M01S05531.exdrvr  +++|      SM$ACCBUSY[LLR$SMO[0]] = FALSE;# SM ARM NOT IN USE #
05839  M01S05532.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
05840  M01S05533.exdrvr  +++|      THEN                           # HARDWARE PROBLEM #
05841  M01S05534.exdrvr  +++|        BEGIN  # EXIT #
05842  M01S05535.exdrvr  +++|        IF LLR$SDR[0] EQ 0
05843  M01S05536.exdrvr  +++|        THEN                         # SAVE THIS ERROR FOR EXEC #
05844  M01S05537.exdrvr  +++|          BEGIN  # SAVE #
05845  M01S05538.exdrvr  +++|          LLR$SDR[0] = LLR$DR[0];
05846  M01S05539.exdrvr  +++|          END  # SAVE #
05847  M01S05540.exdrvr  +++|
05848  M01S05541.exdrvr  +++|        GOTO STRCART3;               # ASSUME CARTRIDGE NOT STORED #
05849  M01S05542.exdrvr  +++|        END  # EXIT #
05850  M01S05543.exdrvr  +++|
05851  M01S05544.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CSNERR  # FORCED STORE VOLUME UNLOADED #
05852  M01S05545.exdrvr  +++|        OR (MS$RETCODE[0] EQ 0       # NO M860 ERROR #
Line S05546 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
05853  M02S05546.exdrvr3 ---|        AND (LLR$RQI[0] EQ REQNAME"RQILABL"  # SSLABEL HANDLES EJECTS #
05854  M01S00018.exdrvr3 +++|        AND ((LLR$RQI[0] EQ REQNAME"RQILABL"  # SSLABEL HANDLES EJECTS #
05855  M01S00019.exdrvr3 +++|        AND NOT LLR$UCPABT[0])       # SSLABEL MUST BE UP #
05856  M01S05547.exdrvr  +++|        OR LLR$Y[0] NQ SM$EXIT$TY    # CARTRIDGE NOT EJECTED #
05857  M01S05548.exdrvr  +++|        OR LLR$Z[0] NQ SM$TY$Z))
05858  M01S05549.exdrvr  +++|      THEN                           # DO NOT ISSUE K-DISPLAY MSG #
05859  M01S05550.exdrvr  +++|        BEGIN  # MATRIX #
05860  M01S05551.exdrvr  +++|        GOTO STRCART3;
05861  M01S05552.exdrvr  +++|        END  # MATRIX #
05862  M01S05553.exdrvr  +++|
05863  M01S05554.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CELEMP  # CELL FULL #
05864  M01S05555.exdrvr  +++|        AND NOT (LLR$Y[0] EQ SM$EXIT$TY  # NOT OUTPUT TRAY FULL #
05865  M01S05556.exdrvr  +++|        AND LLR$Z[0] EQ SM$TY$Z)
05866  M01S05557.exdrvr  +++|      THEN                           # TURN SM OFF IN UDT #
05867  M01S05558.exdrvr  +++|        BEGIN  # OFF #
05868  M01S05559.exdrvr  +++|        P<PTHSTAT> = LOC(SM$STS[LLR$SMO[0]]);
05869  M01S05560.exdrvr  +++|        SMST = SMST1;                # ASSUME 2ND CU #
05870  M01S05561.exdrvr  +++|        IF LLR$CU[0] EQ SM$CUO0[LLR$SMO[0]]
05871  M01S05562.exdrvr  +++|        THEN                         # RESET INDEX TO 1ST CU #
05872  M01S05563.exdrvr  +++|          BEGIN  # RESET #
05873  M01S05564.exdrvr  +++|          SMST = SMST0;
05874  M01S05565.exdrvr  +++|          END  # RESET #
05875  M01S05566.exdrvr  +++|
05876  M01S05567.exdrvr  +++|        PATHBIT(SMST,PATH$DF"U$ON") = OFF;
Line S05568 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05877  M02S05568.exdrvr2 ---|        GOTO STRCARTA;               # FIXES COMPILER BUG #
Line S05569 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05878  M02S05569.exdrvr2 ---|
Line S05570 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05879  M02S05570.exdrvr2 ---|STRCARTA:
Line S05571 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05880  M02S05571.exdrvr2 ---|        STSP = SM$STS0[LLR$SMO[0]];  # RESET GLOBAL FLAGS #
Line S05572 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05881  M02S05572.exdrvr2 ---|        STSS = SM$STS1[LLR$SMO[0]];
Line S05573 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
05882  M02S05573.exdrvr2 ---|        SM$FLAG[LLR$SMO[0]] = STSP LOR STSS;
05883  M01S00157.exdrvr2 +++|
05884  M01S00158.exdrvr2 +++|                                               CONTROL REACTIVE;
05885  M01S00159.exdrvr2 +++|
05886  M01S00160.exdrvr2 +++|        SM$FLAG[LLR$SMO[0]] = SM$STS0[LLR$SMO[0]] LOR  # RESET GLOBALS #
05887  M01S00161.exdrvr2 +++|                              SM$STS1[LLR$SMO[0]];
05888  M01S00162.exdrvr2 +++|
05889  M01S00163.exdrvr2 +++|                                               CONTROL INERT;
05890  M01S00164.exdrvr2 +++|
05891  M01S05574.exdrvr  +++|        END  # OFF #
05892  M01S05575.exdrvr  +++|
05893  M01S05576.exdrvr  +++|#
05894  M01S05577.exdrvr  +++|*     ISSUE A K-DISPLAY MESSAGE INFORMING THE OPERATOR THAT
05895  M01S05578.exdrvr  +++|*     EITHER A CARTRIDGE WAS EJECTED, THE OUTPUT TRAY WAS
05896  M01S05579.exdrvr  +++|*     FULL, OR A MATRIX CELL WAS FULL.
05897  M01S05580.exdrvr  +++|#
05898  M01S05581.exdrvr  +++|
05899  M01S05582.exdrvr  +++|      P<KWORD> = LOC(LLR$KWORDS[0]);
05900  M01S05583.exdrvr  +++|      KW$WORD[0] = 0;
05901  M01S05584.exdrvr  +++|      KW$LINE1[0] = KM"KM2";         # PRESET MESSAGE ORDINALS #
05902  M01S05585.exdrvr  +++|      KW$LINE2[0] = KM"KM9";         # ASSUME CARTRIDGE EJECTED #
05903  M01S05586.exdrvr  +++|      KW$IC[0] = TRUE;               # SET IMMEDIATE COMPLETION #
05904  M01S05587.exdrvr  +++|      KW$DF[0] = TRUE;               # ISSUE TO JOB DAYFILE #
05905  M01S05588.exdrvr  +++|      IF LLR$CSNT[0] NQ 0            # *TDAM* REQUEST #
05906  M01S05589.exdrvr  +++|        AND (LLR$SDR[0] EQ RESPTYP4"UNK$CART"  # UNEXPECTED LABEL #
05907  M01S05590.exdrvr  +++|        OR LLR$SDR[0] EQ RESPTYP4"CART$LB$ERR")
05908  M01S05591.exdrvr  +++|      THEN                           # INDICATE LABEL ERROR IN MESSAGE #
05909  M01S05592.exdrvr  +++|        BEGIN  # RESET #
05910  M01S05593.exdrvr  +++|        KW$LINE2[0] = KM"KM8";
05911  M01S05594.exdrvr  +++|        KW$LINE3[0] = KM"KM9";       # CARTRIDGE EJECTED #
05912  M01S05595.exdrvr  +++|        END  # RESET #
05913  M01S05596.exdrvr  +++|
05914  M01S05597.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CELEMP
05915  M01S05598.exdrvr  +++|      THEN                           # CELL WAS FULL #
05916  M01S05599.exdrvr  +++|        BEGIN  # FULL #
05917  M01S05600.exdrvr  +++|        KW$LINE2[0] = KM"KM11";      # ASSUME MATRIX CELL FULL #
05918  M01S05601.exdrvr  +++|        KW$LINE3[0] = KM"KM16";      # SM TURNED OFF #
05919  M01S05602.exdrvr  +++|        IF LLR$Y[0] EQ SM$EXIT$TY    ##
05920  M01S05603.exdrvr  +++|          AND LLR$Z[0] EQ SM$TY$Z
05921  M01S05604.exdrvr  +++|        THEN                         # OUTPUT TRAY IS FULL #
05922  M01S05605.exdrvr  +++|          BEGIN  # TRAY #
05923  M01S05606.exdrvr  +++|          KW$LINE2[0] = KM"KM19";
05924  M01S05607.exdrvr  +++|          KW$LINE3[0] = 0;           # SM LEFT ON #
05925  M01S05608.exdrvr  +++|          KW$IC[0] = FALSE;          # WAIT FOR OPERATOR RESPONSE #
05926  M01S05609.exdrvr  +++|          KW$DF[0] = FALSE;
05927  M01S05610.exdrvr  +++|          END  # TRAY #
05928  M01S05611.exdrvr  +++|
05929  M01S05612.exdrvr  +++|        END  # FULL #
05930  M01S05613.exdrvr  +++|
05931  M01S05614.exdrvr  +++|      KW$RPGO[0] = TRUE;             # ALLOW GO RESPONSE #
05932  M01S05615.exdrvr  +++|      KP$EQ = UD$ESTO[LLR$CU[0]];    # PRESET MESSAGE PARAMETERS #
05933  M01S05616.exdrvr  +++|      P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);  # LOCATE READ FET #
05934  M01S05617.exdrvr  +++|      P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
05935  M01S05618.exdrvr  +++|      P<FETMRA> = P<FETMWB> - 1;
05936  M01S05619.exdrvr  +++|      P<FETMRB> = FRA$MRBADR[0];
05937  M01S05620.exdrvr  +++|      KP$CN = FMR$CHAN[0];
05938  M01S05621.exdrvr  +++|      KP$DT = SM$ID[LLR$SMO[0]];
05939  M01S05622.exdrvr  +++|      KP$YA = LLR$Y[0];              # SET FULL CELL #
05940  M01S05623.exdrvr  +++|      KP$ZA = LLR$Z[0];
05941  M01S05624.exdrvr  +++|      KREQ(LOC(KWORD),KLINK);        # SEND K-DISPLAY REQUEST #
05942  M01S05625.exdrvr  +++|
05943  M01S05626.exdrvr  +++|STRCART3:
Line S05627 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05944  M02S05627.mse1    ---|      IF MS$RETCODE[0] EQ HRC$CSNERR
Line S05628 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05945  M02S05628.mse1    ---|      THEN                           # RETRY FORCED AS NORMAL STORE #
05946  M01S00094.mse1    +++|      IF MS$RETCODE[0] EQ HRC$CSNERR # RETRY FORCED AS NORMAL STORE #
05947  M01S00095.mse1    +++|        OR LLR$LDERR[0]              # RCVY FROM *ACQ* ERROR #
05948  M01S00096.mse1    +++|        OR LLR$CSNT[0] EQ 0          # ERROR RELATED TO UTILITY #
05949  M01S00097.mse1    +++|      THEN                           # BUFFERED LOG NOT NEEDED #
05950  M01S05629.exdrvr  +++|        BEGIN  # SKIP #
05951  M01S05630.exdrvr  +++|        GOTO STRCART5;
05952  M01S05631.exdrvr  +++|        END  # SKIP #
05953  M01S05632.exdrvr  +++|
Line S05633 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05954  M02S05633.mse1    ---|      IF LLR$CSNT[0] EQ 0            # BUFFERED LOG NOT NEEDED #
Line S05634 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05955  M02S05634.mse1    ---|      THEN                           # PROCESSING COMPLETE #
Line S05635 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05956  M02S05635.mse1    ---|        BEGIN  # SKIP #
Line S05636 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05957  M02S05636.mse1    ---|        GOTO STRCART5;
Line S05637 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05958  M02S05637.mse1    ---|        END  # SKIP #
Line S05638 Modification History
M01 (Added by) exdrvr
M02 (Updated by) mse1
Seq #  *Modification Id* Act 
----------------------------+
05959  M02S05638.mse1    ---|
05960  M01S05639.exdrvr  +++|      IF KW$LINE2[0] EQ KM"KM19"     # OUTPUT TRAY FULL #
05961  M01S05640.exdrvr  +++|        AND NOT KW$COMP[0]
05962  M01S05641.exdrvr  +++|      THEN                           # RETRY STORE REQUEST #
05963  M01S05642.exdrvr  +++|        BEGIN  # EXIT #
05964  M01S05643.exdrvr  +++|        GOTO STRCART4;
05965  M01S05644.exdrvr  +++|        END  # EXIT #
05966  M01S05645.exdrvr  +++|
05967  M01S05646.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
05968  M01S05647.exdrvr  +++|      THEN                           # BUFFERED LOG NOT NEEDED #
05969  M01S05648.exdrvr  +++|        BEGIN  # SKIP #
05970  M01S05649.exdrvr  +++|        GOTO STRCART5;               # TREAT DRD AS FULL #
05971  M01S05650.exdrvr  +++|        END  # SKIP #
05972  M01S05651.exdrvr  +++|
05973  M01S05652.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0
05974  M01S05653.exdrvr  +++|      THEN                           # CLEAR SBT ENTRY #
05975  M01S05654.exdrvr  +++|        BEGIN  # CLEAR #
05976  M01S05655.exdrvr  +++|        P<UDT$MSG> = MBF$SBADDR[0];
05977  M01S05656.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);
05978  M01S05657.exdrvr  +++|        END  # CLEAR #
05979  M01S05658.exdrvr  +++|
05980  M01S05659.exdrvr  +++|      MBF$WORD[0] = 0;               # CLEAR MESSAGE STATUS #
05981  M01S05660.exdrvr  +++|      MBF$SAVE[0] = SAVEPART;
05982  M01S05661.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
05983  M01S05662.exdrvr  +++|      MS$MSG[0] = HFC$DBLD0;         # SET *DUMP BUF LOG* FUNCTION #
05984  M01S05663.exdrvr  +++|      LLR$RS[0] = PROCST"CONT2";
05985  M01S05664.exdrvr  +++|
05986  M01S05665.exdrvr  +++|#
05987  M01S05666.exdrvr  +++|*     ISSUE M860 MESSAGE TO DUMP BUFFERED LOG.
05988  M01S05667.exdrvr  +++|#
05989  M01S05668.exdrvr  +++|
05990  M01S05669.exdrvr  +++|STRBUFL:
05991  M01S05670.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
05992  M01S05671.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
05993  M01S05672.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0          ##
05994  M01S05673.exdrvr  +++|        AND LLR$DR[0] EQ RESPTYP4"OK4"
05995  M01S05674.exdrvr  +++|      THEN                           # RESPONSE NOT YET RECEIVED #
05996  M01S05675.exdrvr  +++|        BEGIN  # RETRY #
05997  M01S05676.exdrvr  +++|        RETURN;
05998  M01S05677.exdrvr  +++|        END  # RETRY #
05999  M01S05678.exdrvr  +++|
06000  M01S05679.exdrvr  +++|      LLR$DR[0] = RESPTYP4"OK4";     # DO NOT RETURN ERRORS #
06001  M01S05680.exdrvr  +++|
06002  M01S05681.exdrvr  +++|#
06003  M01S05682.exdrvr  +++|*     TURN OFF THE DRD IF AN M860 RESPONSE TO
06004  M01S05683.exdrvr  +++|*     A DRD MESSAGE WAS A DEVICE DRIVER ERROR, OR THE RESPONSE
06005  M01S05684.exdrvr  +++|*     TIMED OUT.
06006  M01S05685.exdrvr  +++|#
06007  M01S05686.exdrvr  +++|
06008  M01S05687.exdrvr  +++|STRCART5:
06009  M01S05688.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CSNERR  # RETRY AS NORMAL STORE FIRST #
06010  M01S05689.exdrvr  +++|        OR NOT LLR$DRFUL[0]
06011  M01S05690.exdrvr  +++|      THEN                           # DO NOT TURN OFF DRD #
06012  M01S05691.exdrvr  +++|        BEGIN  # OK #
06013  M01S05692.exdrvr  +++|        GOTO STRCART4;
06014  M01S05693.exdrvr  +++|        END  # OK #
06015  M01S05694.exdrvr  +++|
06016  M01S00098.mse1    +++|#
06017  M01S00099.mse1    +++|*     DECIDE IF RETRY COUNT AND RETRY TIME JUSTIFY TURNING DRD OFF.
06018  M01S00100.mse1    +++|#
06019  M01S00101.mse1    +++|
06020  M01S00102.mse1    +++|      P<MWBTMP> = LOC(UD$CAMF[LLR$SCU[0]]);  # LOCATE BAD CHAN FETS #
06021  M01S00103.mse1    +++|      P<FETMWB> = MWB$ADDR[LLR$SCIF[0]];
06022  M01S00104.mse1    +++|      P<FETMRA> = P<FETMWB> - 1;
06023  M01S00105.mse1    +++|      P<FETMRB> = FRA$MRBADR[0];
06024  M01S00106.mse1    +++|      IF FMW$ERROR[0]                # ORIGINALLY A CHANNEL ERROR #
06025  M01S00107.mse1    +++|      THEN                           # RETRY CNT ALREADY INCREMENTED #
06026  M01S00108.mse1    +++|        BEGIN  # CLEAR #
06027  M01S00109.mse1    +++|        FMW$ERROR[0] = FALSE;        # IN CASE OF ANOTHER CHAN ERR #
06028  M01S00110.mse1    +++|        END  # CLEAR #
06029  M01S00111.mse1    +++|
06030  M01S00112.mse1    +++|      ELSE                           # ONLY A DRD ERROR #
06031  M01S00113.mse1    +++|        BEGIN  # BUMP #
06032  M01S00114.mse1    +++|        FMW$RCNT[0] = FMW$RCNT[0] + 1;  # RECORD ERROR #
06033  M01S00115.mse1    +++|        END  # BUMP #
06034  M01S00116.mse1    +++|
06035  M01S00117.mse1    +++|      RTIME(RTIMESTAT);
06036  M01S00118.mse1    +++|      IF (FMW$RCNT[0] EQ 1           # START OF ERROR SEQUENCE #
06037  M01S00119.mse1    +++|        AND FMW$RCNT[0] LS MAXCHERR)  ##
06038  M01S00120.mse1    +++|        OR (FMW$RCNT[0] GR 1         # RETRY TIME EXPIRED #
06039  M01S00121.mse1    +++|        AND RTIMSECS[0] GQ FMW$RTIME[0])
06040  M01S00122.mse1    +++|      THEN                           # RESET CHAN FOR NEW INTERVAL #
06041  M01S00123.mse1    +++|        BEGIN  # RESET #
06042  M01S00124.mse1    +++|        FMW$RCNT[0] = 1;             # IN CASE INTERVAL EXPIRED #
06043  M01S00125.mse1    +++|        FMW$RTIME[0] = RTIMSECS[0] + MAXCHERRTM;  # RESET RETRY TIME #
06044  M01S00126.mse1    +++|        END  # RESET #
06045  M01S00127.mse1    +++|
06046  M01S00165.exdrvr2 +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
06047  M01S00166.exdrvr2 +++|      THEN                           # DRD CANNOT BE REUSED #
06048  M01S00167.exdrvr2 +++|        BEGIN  # OFF #
06049  M01S00168.exdrvr2 +++|        FMW$RCNT[0] = MAXCHERR;      # 7990 WOULD ABORT A RE-ACQUIRE #
06050  M01S00169.exdrvr2 +++|        END  # OFF #
06051  M01S00170.exdrvr2 +++|
06052  M01S00128.mse1    +++|      IF (FMW$RCNT[0] GR 1           ##
06053  M01S00129.mse1    +++|        AND FMW$RCNT[0] GQ MAXCHERR  ##
06054  M01S00130.mse1    +++|        AND RTIMSECS[0] GQ FMW$RTIME[0])  # ERROR SEQUENCE EXPIRED #
06055  M01S00131.mse1    +++|        OR FMW$RCNT[0] LS MAXCHERR   # SEQUENCE NOT COMPLETE #
06056  M01S00132.mse1    +++|      THEN                           # DRD NOT READY TO BE TURNED OFF #
06057  M01S00133.mse1    +++|        BEGIN  # ON #
06058  M01S00134.mse1    +++|        GOTO STRCART4;               # SKIP TURNING OFF DRD #
06059  M01S00135.mse1    +++|        END  # ON #
06060  M01S00136.mse1    +++|
06061  M01S00137.mse1    +++|      FMW$RCNT[0] = 0;               # PRESET IN CASE OF MORE ERRORS #
06062  M01S00138.mse1    +++|
06063  M01S00139.mse1    +++|#
06064  M01S00140.mse1    +++|*     PRESET UDT TO TURN OFF DRD.
06065  M01S00141.mse1    +++|#
06066  M01S00142.mse1    +++|
06067  M01S05695.exdrvr  +++|      DRVRACTIVE = TRUE;             # IN CASE DRD MSG TIMED OUT #
06068  M01S05696.exdrvr  +++|      P<PTHSTAT> = LOC(D1$ST[LLR$SMO[0]]);  # ASSUME LOWER DRD #
06069  M01S05697.exdrvr  +++|      IF LLR$DRD[0] EQ 0
06070  M01S05698.exdrvr  +++|      THEN                           # UPPER DRD GOING OFF #
06071  M01S05699.exdrvr  +++|        BEGIN  # RESET #
06072  M01S05700.exdrvr  +++|        P<PTHSTAT> = LOC(D0$ST[LLR$SMO[0]]);
06073  M01S05701.exdrvr  +++|        END  # RESET #
06074  M01S05702.exdrvr  +++|
06075  M01S05703.exdrvr  +++|      DRST = DRST1;                  # ASSUME 2ND CU #
06076  M01S05704.exdrvr  +++|      IF LLR$CU[0] EQ SM$CUO0[LLR$SMO[0]]
06077  M01S05705.exdrvr  +++|      THEN                           # RESET DRD INDEX TO 1ST CU #
06078  M01S05706.exdrvr  +++|        BEGIN  # RESET #
06079  M01S05707.exdrvr  +++|        DRST = DRST0;
06080  M01S05708.exdrvr  +++|        END  # RESET #
06081  M01S05709.exdrvr  +++|
06082  M01S05710.exdrvr  +++|      PATHBIT(DRST,PATH$DF"U$ON") = OFF;
06083  M01S05711.exdrvr  +++|      PATHBIT(DRST,PATH$DF"U$CU$ACK") = ON;
06084  M01S05712.exdrvr  +++|      PATHBIT(DRST,PATH$DF"U$DONE") = OFF;
06085  M01S05713.exdrvr  +++|
06086  M01S05714.exdrvr  +++|                                               CONTROL REACTIVE;
06087  M01S05715.exdrvr  +++|
06088  M01S05716.exdrvr  +++|      IF LLR$DRD[0] EQ 0
06089  M01S05717.exdrvr  +++|      THEN                           # STOP LOADS TO UPPER DRD #
06090  M01S05718.exdrvr  +++|        BEGIN  # DRD 0 #
06091  M01S05719.exdrvr  +++|        D0$FLAG[LLR$SMO[0]] = D0$STSP[LLR$SMO[0]] LOR
06092  M01S05720.exdrvr  +++|                                D0$STSS[LLR$SMO[0]];
06093  M01S05721.exdrvr  +++|        END  # DRD 0 #
06094  M01S05722.exdrvr  +++|
06095  M01S05723.exdrvr  +++|      ELSE                           # STOP LOADS TO LOWER DRD #
06096  M01S05724.exdrvr  +++|        BEGIN  # DRD 1 #
06097  M01S05725.exdrvr  +++|        D1$FLAG[LLR$SMO[0]] = D1$STSP[LLR$SMO[0]] LOR
06098  M01S05726.exdrvr  +++|                                D1$STSS[LLR$SMO[0]];
06099  M01S05727.exdrvr  +++|        END  # DRD 1 #
06100  M01S05728.exdrvr  +++|
06101  M01S05729.exdrvr  +++|                                               CONTROL INERT;
06102  M01S05730.exdrvr  +++|
06103  M01S05731.exdrvr  +++|      LLR$SSD[0] = LLR$D$SMO[0];     # SAVE SM/DRD ORDINALS #
06104  M01S05732.exdrvr  +++|      LLR$RS[0] = PROCST"CONT3";
06105  M01S05733.exdrvr  +++|      RETURN;
06106  M01S05734.exdrvr  +++|
06107  M01S05735.exdrvr  +++|#
06108  M01S05736.exdrvr  +++|*     ISSUE A K-DISPLAY MESSAGE STATING THAT THE DRD WAS
06109  M01S05737.exdrvr  +++|*     TURNED OFF.
06110  M01S05738.exdrvr  +++|#
06111  M01S05739.exdrvr  +++|
06112  M01S05740.exdrvr  +++|STRDRDO:
06113  M01S05741.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06114  M01S05742.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
06115  M01S05743.exdrvr  +++|      LLR$D$SMO[0] = LLR$SSD[0];     # RESTORE SM/DRD ORDINALS #
06116  M01S05744.exdrvr  +++|      P<KWORD> = LOC(LLR$KWORDS[0]);
06117  M01S05745.exdrvr  +++|      KW$WORD[0] = 0;
06118  M01S05746.exdrvr  +++|      KW$LINE1[0] = KM"KM3";         # PRESET MESSAGE ORDINALS #
06119  M01S05747.exdrvr  +++|      KW$LINE2[0] = KM"KM16";
06120  M01S05748.exdrvr  +++|      KW$IC[0] = TRUE;               # SET IMMEDIATE COMPLETION #
06121  M01S05749.exdrvr  +++|      KW$DF[0] = TRUE;               # SEND TO JOB DAYFILE #
06122  M01S05750.exdrvr  +++|      KW$RPGO[0] = TRUE;             # ALLOW GO RESPONSE #
06123  M01S05751.exdrvr  +++|      KP$EQ = UD$ESTO[LLR$CU[0]];    # PRESET MESSAGE PARAMETERS #
06124  M01S05752.exdrvr  +++|      P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);  # LOCATE READ FET #
06125  M01S05753.exdrvr  +++|      P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
06126  M01S05754.exdrvr  +++|      P<FETMRA> = P<FETMWB> - 1;
06127  M01S05755.exdrvr  +++|      P<FETMRB> = FRA$MRBADR[0];
06128  M01S05756.exdrvr  +++|      KP$CN = FMR$CHAN[0];
06129  M01S05757.exdrvr  +++|      KP$DT = SM$ID[LLR$SMO[0]];
06130  M01S05758.exdrvr  +++|      KP$ID = D1$SUN[LLR$SMO[0]];    # ASSUME LOWER DRD #
06131  M01S05759.exdrvr  +++|      IF LLR$DRD[0] EQ 0
06132  M01S05760.exdrvr  +++|      THEN                           # LOWER DRD HAD ERROR #
06133  M01S05761.exdrvr  +++|        BEGIN  # RESET #
06134  M01S05762.exdrvr  +++|        KP$ID = D0$SUN[LLR$SMO[0]];
06135  M01S05763.exdrvr  +++|        END  # RESET #
06136  M01S05764.exdrvr  +++|
06137  M01S05765.exdrvr  +++|      KREQ(LOC(KWORD),KLINK);        # SEND K-DISPLAY REQUEST #
06138  M01S05766.exdrvr  +++|
06139  M01S05767.exdrvr  +++|STRCART4:
06140  M01S05768.exdrvr  +++|      IF LLR$DRD[0] EQ 0
06141  M01S05769.exdrvr  +++|      THEN                           # UPPER DRD EMPTY #
06142  M01S05770.exdrvr  +++|        BEGIN  # CLEAR #
06143  M01S05771.exdrvr  +++|        D0$FULL[LLR$SMO[0]] = FALSE;
06144  M01S05772.exdrvr  +++|        END  # CLEAR #
06145  M01S05773.exdrvr  +++|
06146  M01S05774.exdrvr  +++|      ELSE                           # LOWER DRD EMPTY #
06147  M01S05775.exdrvr  +++|        BEGIN  # CLEAR #
06148  M01S05776.exdrvr  +++|        D1$FULL[LLR$SMO[0]] = FALSE;
06149  M01S05777.exdrvr  +++|        END  # CLEAR #
06150  M01S05778.exdrvr  +++|
06151  M01S05779.exdrvr  +++|      IF LLR$SDR[0] NQ 0
06152  M01S05780.exdrvr  +++|      THEN                           # RESTORE ORIGINAL ERROR FOR EXEC #
06153  M01S05781.exdrvr  +++|        BEGIN  # RESET #
06154  M01S05782.exdrvr  +++|        LLR$DR[0] = LLR$SDR[0];
06155  M01S05783.exdrvr  +++|        END  # RESET #
06156  M01S05784.exdrvr  +++|
06157  M01S05785.exdrvr  +++|      IF LLR$PRCNME[0] EQ REQTYP4"INITHW"
06158  M01S05786.exdrvr  +++|      THEN                           # CLEAR SO UDT SCAN CAN FINISH #
06159  M01S05787.exdrvr  +++|        BEGIN  # CLEAR #
06160  M01S05788.exdrvr  +++|        IF MS$RETCODE[0] NQ HRC$CSNERR  # DRD NOT YET OFF #
06161  M01S05789.exdrvr  +++|        THEN                         # NOT RETRYING AS NORMAL STORE #
06162  M01S05790.exdrvr  +++|          BEGIN  # OFF #
06163  M01S05791.exdrvr  +++|          LLR$DRFUL[0] = FALSE;
06164  M01S05792.exdrvr  +++|          END  # OFF #
06165  M01S05793.exdrvr  +++|
06166  M01S05794.exdrvr  +++|        LLR$DRDOFF[0] = FALSE;
06167  M01S05795.exdrvr  +++|        LLR$LDERR[0] = FALSE;        # IN CASE LOAD ERROR OCCURRED #
06168  M01S05796.exdrvr  +++|        END  # CLEAR #
06169  M01S05797.exdrvr  +++|
06170  M01S05798.exdrvr  +++|      LLR$RS[0] = PROCST"COMPLETE";
06171  M01S05799.exdrvr  +++|      IF MS$RETCODE[0] EQ HRC$CSNERR  # RETRY AS NORMAL STORE #
06172  M01S05800.exdrvr  +++|        OR (KW$LINE2[0] EQ KM"KM19"  # RETRY STORE TO OUTPUT TRAY #
06173  M01S05801.exdrvr  +++|        AND NOT KW$COMP[0])
06174  M01S05802.exdrvr  +++|      THEN                           # RETRY STORING CARTRIDGE #
06175  M01S05803.exdrvr  +++|        BEGIN  # RETRY #
06176  M01S05804.exdrvr  +++|        LLR$RS[0] = PROCST"INITIAL";
06177  M01S05805.exdrvr  +++|        END  # RETRY #
06178  M01S05806.exdrvr  +++|
06179  M01S05807.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0
06180  M01S05808.exdrvr  +++|      THEN                           # CLEAR SBT ENTRY #
06181  M01S05809.exdrvr  +++|        BEGIN  # CLEAR #
06182  M01S05810.exdrvr  +++|        P<UDT$MSG> = MBF$SBADDR[0];
06183  M01S05811.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);
06184  M01S05812.exdrvr  +++|        END  # CLEAR #
06185  M01S05813.exdrvr  +++|
06186  M01S05814.exdrvr  +++|      MBF$WORD[0] = 0;               # CLEAR MESSAGE STATUS #
06187  M01S05815.exdrvr  +++|      RETURN;
06188  M01S05816.exdrvr  +++|
06189  M01S05817.exdrvr  +++|STRCART2:
06190  M01S05818.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
06191  M01S05819.exdrvr  +++|      ABORT;
06192  M01S05820.exdrvr  +++|      END  # STRCART #
06193  M01S05821.exdrvr  +++|
06194  M01S05822.exdrvr  +++|    TERM
06195  M01S05823.exdrvr  +++|PROC XFRDATA;
06196  M01S05824.exdrvr  +++|# TITLE XFRDATA - TRANSFER DATA TO/FROM M860.                         #
06197  M01S05825.exdrvr  +++|
06198  M01S05826.exdrvr  +++|      BEGIN  # XFRDATA #
06199  M01S05827.exdrvr  +++|
06200  M01S05828.exdrvr  +++|#
06201  M01S05829.exdrvr  +++|**    XFRDATA - TRANSFER DATA TO/FROM M860.
06202  M01S05830.exdrvr  +++|*
06203  M01S05831.exdrvr  +++|*     *XFRDATA* PROCESSES *DRQUEUE* REQUESTS TO MOUNT AND UNLOAD
06204  M01S05832.exdrvr  +++|*     VOLUMES, AND INITIATES DATA TRANSFERS BETWEEN *SSEXEC* AND THE
06205  M01S05833.exdrvr  +++|*     M860 HARDWARE.
06206  M01S05834.exdrvr  +++|*
06207  M01S05835.exdrvr  +++|*     PROC XFRDATA
06208  M01S05836.exdrvr  +++|*
06209  M01S05837.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
06210  M01S05838.exdrvr  +++|*
06211  M01S05839.exdrvr  +++|*     EXIT       THE *DRQUEUE* ENTRY REQUEST STATE FIELD HAS BEEN
06212  M01S05840.exdrvr  +++|*                UPDATED TO INDICATE WHERE SUBSEQUENT PROCESSING OF
06213  M01S05841.exdrvr  +++|*                THIS REQUEST IS TO CONTINUE.
06214  M01S05842.exdrvr  +++|*
06215  M01S05843.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, XFRDATA1.* - UDT MESSAGE BUFFER STILL
06216  M01S05844.exdrvr  +++|*                                             IN USE.
06217  M01S05845.exdrvr  +++|*
06218  M01S05846.exdrvr  +++|*                *EXEC ABNORMAL, XFRDATA2.* - FATAL ERROR RECEIVED IN
06219  M01S05847.exdrvr  +++|*                                             M860 *MOUNT VOLUME*
06220  M01S05848.exdrvr  +++|*                                             RESPONSE.
06221  M01S05849.exdrvr  +++|*
06222  M01S05850.exdrvr  +++|*     NOTES      THIS IS A PSEUDO-REENTRANT PROCEDURE.
06223  M01S05851.exdrvr  +++|#
06224  M01S05852.exdrvr  +++|
06225  M01S05853.exdrvr  +++|
06226  M01S05854.exdrvr  +++|#
06227  M01S05855.exdrvr  +++|****  PROC XFRDATA - XREF LIST BEGIN.
06228  M01S05856.exdrvr  +++|#
06229  M01S05857.exdrvr  +++|
06230  M01S05858.exdrvr  +++|      XREF
06231  M01S05859.exdrvr  +++|        BEGIN
06232  M01S05860.exdrvr  +++|        PROC ABORT;                  # ABORT #
06233  M01S05861.exdrvr  +++|        PROC CALLPP;                 # PASS MESSAGES/DATA TO PP #
06234  M01S05862.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
06235  M01S05863.exdrvr  +++|        PROC RTIME;                  # GET TIME SINCE DEADSTART #
06236  M01S05864.exdrvr  +++|        PROC SENDMSG;                # SEND M860 MESSAGE #
06237  M01S05865.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
06238  M01S05866.exdrvr  +++|        END
06239  M01S05867.exdrvr  +++|
06240  M01S05868.exdrvr  +++|#
06241  M01S05869.exdrvr  +++|****  PROC XFRDATA - XREF LIST END.
06242  M01S05870.exdrvr  +++|#
06243  M01S05871.exdrvr  +++|
06244  M01S05872.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
06245  M01S05873.exdrvr  +++|*CALL,COMBFAS
06246  M01S05874.exdrvr  +++|*CALL,COMBCDD
06247  M01S05875.exdrvr  +++|*CALL COMBCPR
06248  M01S05876.exdrvr  +++|*CALL,COMBFET
06249  M01S05877.exdrvr  +++|*CALL,COMBHFC
06250  M01S05878.exdrvr  +++|*CALL,COMBLRQ
06251  M01S05879.exdrvr  +++|*CALL,COMBUDT
06252  M01S05880.exdrvr  +++|*CALL,COMXMSC
06253  M01S05881.exdrvr  +++|
06254  M01S05882.exdrvr  +++|      ITEM I          I;             # INDEX #
06255  M01S05883.exdrvr  +++|
06256  M01S05884.exdrvr  +++|      SWITCH XFRLBL:PROCST           # DRIVER REQUEST STATE #
06257  M01S05885.exdrvr  +++|            XFRINIT:INITIAL,         # INITIAL STATE #
06258  M01S05886.exdrvr  +++|            XFRMNVL:CONT1,           # CONTINUATION 1 #
06259  M01S05887.exdrvr  +++|            XFRPDAT:CONT2,           # CONTINUATION 2 #
06260  M01S05888.exdrvr  +++|            XFRINCR:CONT3,           # CONTINUATION 3 #
06261  M01S05889.exdrvr  +++|            XFRUNLD:CONT4,           # CONTINUATION 4 #
06262  M01S05890.exdrvr  +++|            XFRRESP:CONT5;           # CONTINUATION 5 #
06263  M01S05891.exdrvr  +++|                                               CONTROL EJECT;
06264  M01S05892.exdrvr  +++|
06265  M01S05893.exdrvr  +++|      GOTO XFRLBL[LLR$RS[0]];
06266  M01S05894.exdrvr  +++|
06267  M01S05895.exdrvr  +++|#
06268  M01S05896.exdrvr  +++|*     INITIAL DRIVER REQUEST STATE.
06269  M01S05897.exdrvr  +++|#
06270  M01S05898.exdrvr  +++|
06271  M01S05899.exdrvr  +++|XFRINIT:
06272  M01S05900.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06273  M01S05901.exdrvr  +++|      IF MBF$WORD[0] NQ 0
06274  M01S05902.exdrvr  +++|      THEN                           # DRD STILL IN USE #
06275  M01S05903.exdrvr  +++|        BEGIN  # ABORT #
06276  M01S05904.exdrvr  +++|        FE$RTN[0] = "XFRDATA1.";
06277  M01S05905.exdrvr  +++|        GOTO XFRDATA1;
06278  M01S05906.exdrvr  +++|        END  # ABORT #
06279  M01S05907.exdrvr  +++|
06280  M01S05908.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
06281  M01S05909.exdrvr  +++|      MBF$SAVE[0] = SAVEMOST;
06282  M01S05910.exdrvr  +++|      MS$MSG[0] = HFC$MVLMVR;        # ASSUME READING DATA #
06283  M01S05911.exdrvr  +++|      LLR$RS[0] = PROCST"CONT1";
06284  M01S05912.exdrvr  +++|
06285  M01S05913.exdrvr  +++|#
06286  M01S05914.exdrvr  +++|*     ISSUE M860 MESSAGE TO MOUNT VOLUME.
06287  M01S05915.exdrvr  +++|#
06288  M01S05916.exdrvr  +++|
06289  M01S05917.exdrvr  +++|XFRMNVL:
06290  M01S05918.exdrvr  +++|      P<FETFHB> = LLR$MSFET[0];
06291  M01S05919.exdrvr  +++|      FHB$UNIT[0] = D1$SUN[LLR$SMO[0]];
06292  M01S05920.exdrvr  +++|      IF LLR$DRD[0] EQ 0
06293  M01S05921.exdrvr  +++|      THEN                           # UPPER DRD BEING USED #
06294  M01S05922.exdrvr  +++|        BEGIN  # RESET #
06295  M01S05923.exdrvr  +++|        FHB$UNIT[0] = D0$SUN[LLR$SMO[0]];
06296  M01S05924.exdrvr  +++|        END  # RESET #
06297  M01S05925.exdrvr  +++|
06298  M01S05926.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06299  M01S05927.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
06300  M01S05928.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
06301  M01S05929.exdrvr  +++|      THEN                           # HARDWARE PROBLEM #
06302  M01S05930.exdrvr  +++|        BEGIN  # EXIT #
06303  M01S05931.exdrvr  +++|        IF MS$INTER[0] NQ 0          # CIF SELECTED #
06304  M01S05932.exdrvr  +++|        THEN                         # DATA TRANSFER STOPPED #
06305  M01S05933.exdrvr  +++|          BEGIN  # NO DATA #
06306  M01S05934.exdrvr  +++|          B<LLR$CIF[0],1>UD$DBACT[LLR$CU[0]] = OFF;
06307  M01S05935.exdrvr  +++|          END  # NO DATA #
06308  M01S05936.exdrvr  +++|
06309  M01S05937.exdrvr  +++|        IF MBF$SENT[0]
06310  M01S05938.exdrvr  +++|        THEN                         # IGNORE RESPONSES #
06311  M01S05939.exdrvr  +++|          BEGIN  # IGNORE #
06312  M01S05940.exdrvr  +++|          MSGCNT(LLR$CIF[0],LLR$CU[0]) = MSGCNT(LLR$CIF[0],LLR$CU[0])-1;
06313  M01S05941.exdrvr  +++|                                     # COUNT INCLUDED REWIND/UNLOAD #
06314  M01S05942.exdrvr  +++|          END  # IGNORE #
06315  M01S05943.exdrvr  +++|
06316  M01S05944.exdrvr  +++|        GOTO XFRDATA2;
06317  M01S05945.exdrvr  +++|        END  # EXIT #
06318  M01S05946.exdrvr  +++|
06319  M01S05947.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0
06320  M01S05948.exdrvr  +++|      THEN                           # RESPONSE NOT YET RECEIVED #
06321  M01S05949.exdrvr  +++|        BEGIN  # RETRY #
06322  M01S05950.exdrvr  +++|        RETURN;
06323  M01S05951.exdrvr  +++|        END  # RETRY #
06324  M01S05952.exdrvr  +++|
06325  M01S05953.exdrvr  +++|      IF MS$RETCODE[0] NQ 0
06326  M01S05954.exdrvr  +++|      THEN                           # SOFTWARE ERROR #
06327  M01S05955.exdrvr  +++|        BEGIN  # ABORT #
06328  M01S05956.exdrvr  +++|        FE$RTN[0] = "XFRDATA2.";
06329  M01S05957.exdrvr  +++|        GOTO XFRDATA1;
06330  M01S05958.exdrvr  +++|        END  # ABORT #
06331  M01S05959.exdrvr  +++|
06332  M01S05960.exdrvr  +++|      ZFILL(UDT$MSG,MSGLT);          # CLEAR STORAGE BUFFER #
06333  M01S05961.exdrvr  +++|      MBF$SBADDR[0] = 0;             # CLEAR SBT ENTRY ADDRESS #
06334  M01S05962.exdrvr  +++|      MBF$TMOUT[0] = 0;              # CLEAR MESSAGE TIMEOUT #
06335  M01S05963.exdrvr  +++|      LLR$RS[0] = PROCST"CONT2";
06336  M01S05964.exdrvr  +++|
06337  M01S05965.exdrvr  +++|#
06338  M01S05966.exdrvr  +++|*     PASS DATA BUFFER ADDRESS TO PP TO START DATA TRANSFER.
06339  M01S05967.exdrvr  +++|#
06340  M01S05968.exdrvr  +++|
06341  M01S05969.exdrvr  +++|XFRPDAT:
06342  M01S05970.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06343  M01S05971.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
06344  M01S05972.exdrvr  +++|      CALLPP(IRMDAT);
06345  M01S05973.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
06346  M01S05974.exdrvr  +++|      THEN                           # HARDWARE PROBLEM #
06347  M01S05975.exdrvr  +++|        BEGIN  # EXIT #
06348  M01S05976.exdrvr  +++|        GOTO XFRDATA2;
06349  M01S05977.exdrvr  +++|        END  # EXIT #
06350  M01S05978.exdrvr  +++|
06351  M01S05979.exdrvr  +++|      IF B<FMR$CIF[0],1>UD$DBACT[LLR$CU[0]] EQ ON  ##
06352  M01S05980.exdrvr  +++|        AND P<FETMWB> NQ 0           # CHANNEL WAS ALLOCATED #
06353  M01S05981.exdrvr  +++|      THEN                           # DATA TRANSFER STARTED #
06354  M01S05982.exdrvr  +++|        BEGIN  # RETRY #
06355  M01S05983.exdrvr  +++|        LLR$RS[0] = PROCST"COMPLETE";# RETURN WHEN COPY COMPLETE #
06356  M01S05984.exdrvr  +++|        END  # RETRY #
06357  M01S05985.exdrvr  +++|
06358  M01S05986.exdrvr  +++|      RETURN;
06359  M01S05987.exdrvr  +++|
06360  M01S05988.exdrvr  +++|#
06361  M01S05989.exdrvr  +++|*     AWAIT M860-INITIATED UNLOAD MESSAGE.
06362  M01S05990.exdrvr  +++|#
06363  M01S05991.exdrvr  +++|
06364  M01S05992.exdrvr  +++|XFRINCR:
06365  M01S05993.exdrvr  +++|      SLOWFOR I = 1 STEP 1 UNTIL PPCBTSIZE
06366  M01S05994.exdrvr  +++|      DO                             # NOTE DATA TRANSFER COMPLETE #
06367  M01S05995.exdrvr  +++|        BEGIN  # SCAN #
06368  M01S05996.exdrvr  +++|        IF LLR$MSFET[0] EQ PPU$DBADDR[I]
06369  M01S05997.exdrvr  +++|        THEN                         # REMOVE ADDRESS #
06370  M01S05998.exdrvr  +++|          BEGIN  # CLEAR #
06371  M01S05999.exdrvr  +++|          PPU$DBADDR[I] = 0;
06372  M01S06000.exdrvr  +++|          B<LLR$CIF[0],1>UD$DBACT[LLR$CU[0]] = OFF;
06373  M01S06001.exdrvr  +++|                                     # FREE PP FOR NEXT DATA XFER #
06374  M01S06002.exdrvr  +++|          END  # CLEAR #
06375  M01S06003.exdrvr  +++|
06376  M01S06004.exdrvr  +++|        END  # SCAN #
06377  M01S06005.exdrvr  +++|
06378  M01S06006.exdrvr  +++|      IF LLR$DRFUL[0]
06379  M01S06007.exdrvr  +++|      THEN                           # DATA TRANSFER ERROR #
06380  M01S06008.exdrvr  +++|        BEGIN  # EXIT #
06381  M01S00143.mse1    +++|        LLR$SCIF[0] = LLR$CIF[0];    # SAVE TO DECIDE IF DRD GOES OFF #
06382  M01S00144.mse1    +++|        LLR$SCU[0] = LLR$CU[0];
06383  M01S06009.exdrvr  +++|        MSGCNT(LLR$CIF[0],LLR$CU[0]) = MSGCNT(LLR$CIF[0],LLR$CU[0])-1;
06384  M01S06010.exdrvr  +++|        GOTO XFRDATA2;               # DO NOT EXPECT REWIND/UNLOAD #
06385  M01S06011.exdrvr  +++|        END  # EXIT #
06386  M01S06012.exdrvr  +++|
06387  M01S06013.exdrvr  +++|      RTIME(RTIMESTAT);              # RESET MESSAGE TIMEOUT #
06388  M01S06014.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06389  M01S06015.exdrvr  +++|      MBF$TMOUT[0] = RTIMSECS[0];
06390  M01S06016.exdrvr  +++|      LLR$RS[0] = PROCST"CONT4";
06391  M01S06017.exdrvr  +++|
06392  M01S06018.exdrvr  +++|XFRUNLD:
06393  M01S06019.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06394  M01S06020.exdrvr  +++|      SENDMSG;                       # AWAIT UNLOAD MESSAGE #
06395  M01S06021.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
06396  M01S06022.exdrvr  +++|      THEN                           # RESPONSE TIMED OUT #
06397  M01S06023.exdrvr  +++|        BEGIN  # EXIT #
06398  M01S06024.exdrvr  +++|        GOTO XFRDATA2;
06399  M01S06025.exdrvr  +++|        END  # EXIT #
06400  M01S06026.exdrvr  +++|
06401  M01S06027.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0
06402  M01S06028.exdrvr  +++|      THEN                           # MESSAGE NOT YET RECEIVED #
06403  M01S06029.exdrvr  +++|        BEGIN  # RETRY #
06404  M01S06030.exdrvr  +++|        RETURN;
06405  M01S06031.exdrvr  +++|        END  # RETRY #
06406  M01S06032.exdrvr  +++|
06407  M01S06033.exdrvr  +++|      IF LLR$PRCNME[0] EQ REQTYP4"CPY$DA"   # VOLUME DESTAGE #
06408  M01S06034.exdrvr  +++|      THEN                           # RETURN STATISTICS #
06409  M01S06035.exdrvr  +++|        BEGIN  # STATS #
06410  M01S06036.exdrvr  +++|        LLR$LT$ST[0] = MS$PARM1A[0]; # LAST STRIPE WRITTEN #
06411  M01S06037.exdrvr  +++|        LLR$LOG$ST[0] = MS$PARM2[0]; # LOGICAL STRIPE POSITION #
06412  M01S06038.exdrvr  +++|        END  # STATS #
06413  M01S06039.exdrvr  +++|
06414  M01S06040.exdrvr  +++|      MBF$SENT[0] = FALSE;
06415  M01S06041.exdrvr  +++|      MS$MSG$R[0] = TRUE;            # SET AS UNLOAD RESPONSE #
06416  M01S06042.exdrvr  +++|      LLR$RS[0] = PROCST"CONT5";
06417  M01S06043.exdrvr  +++|
06418  M01S06044.exdrvr  +++|#
06419  M01S06045.exdrvr  +++|*     ISSUE RESPONSE TO M860-INITIATED UNLOAD MESSAGE.
06420  M01S06046.exdrvr  +++|#
06421  M01S06047.exdrvr  +++|
06422  M01S06048.exdrvr  +++|XFRRESP:
06423  M01S06049.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
06424  M01S06050.exdrvr  +++|      SENDMSG;                       # SEND UNLOAD RESPONSE #
06425  M01S06051.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"OK4"  # HARDWARE GOOD #
06426  M01S06052.exdrvr  +++|        AND NOT MBF$SENT[0]
06427  M01S06053.exdrvr  +++|      THEN                           # RESPONSE NOT YET SENT #
06428  M01S06054.exdrvr  +++|        BEGIN  # RETRY #
06429  M01S06055.exdrvr  +++|        RETURN;
06430  M01S06056.exdrvr  +++|        END  # RETRY #
06431  M01S06057.exdrvr  +++|
06432  M01S06058.exdrvr  +++|XFRDATA2:
06433  M01S06059.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0
06434  M01S06060.exdrvr  +++|      THEN                           # CLEAR SBT ENTRY #
06435  M01S06061.exdrvr  +++|        BEGIN  # CLEAR #
06436  M01S06062.exdrvr  +++|        P<UDT$MSG> = MBF$SBADDR[0];
06437  M01S06063.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);
06438  M01S06064.exdrvr  +++|        END  # CLEAR #
06439  M01S06065.exdrvr  +++|
06440  M01S06066.exdrvr  +++|      IF NOT LLR$DRFUL[0]
06441  M01S06067.exdrvr  +++|      THEN                           # DO NOT ISSUE FORCED-STORE #
06442  M01S06068.exdrvr  +++|        BEGIN  # NORMAL #
06443  M01S06069.exdrvr  +++|        MBF$WORD[0] = 0;             # STOP *STRCART* FROM FORCING #
06444  M01S06070.exdrvr  +++|        END  # NORMAL #
06445  M01S06071.exdrvr  +++|
06446  M01S06072.exdrvr  +++|      LLR$RS[0] = PROCST"COMPLETE";
06447  M01S06073.exdrvr  +++|      RETURN;
06448  M01S06074.exdrvr  +++|
06449  M01S06075.exdrvr  +++|XFRDATA1:
06450  M01S06076.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
06451  M01S06077.exdrvr  +++|      ABORT;
06452  M01S06078.exdrvr  +++|      END  # XFRDATA #
06453  M01S06079.exdrvr  +++|
06454  M01S06080.exdrvr  +++|    TERM
cdc/nos2.source/opl.opl871/deck/exdrvr.003.txt ยท Last modified: by 127.0.0.1