User Tools

Site Tools


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

Deck EXDRVR

7 Modifications

Listing Sections

Source

Seq #  *Modification Id* Act 
----------------------------+
00001  M01S00001.exdrvr  +++|PROC ACQCART;
00002  M01S00002.exdrvr  +++|# TITLE ACQCART - ACQUIRE CARTRIDGE.                                  #
00003  M01S00003.exdrvr  +++|
00004  M01S00004.exdrvr  +++|      BEGIN  # ACQCART #
00005  M01S00005.exdrvr  +++|
00006  M01S00006.exdrvr  +++|#
00007  M01S00007.exdrvr  +++|**    ACQCART - ACQUIRE CARTRIDGE.
00008  M01S00008.exdrvr  +++|*
00009  M01S00009.exdrvr  +++|*     *ACQCART* PROCESSES *DRQUEUE* REQUESTS TO LOAD CARTRIDGES
00010  M01S00010.exdrvr  +++|*     AND READ CARTRIDGE LABELS.
00011  M01S00011.exdrvr  +++|*
00012  M01S00012.exdrvr  +++|*     PROC ACQCART
00013  M01S00013.exdrvr  +++|*
00014  M01S00014.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
00015  M01S00015.exdrvr  +++|*
00016  M01S00016.exdrvr  +++|*     EXIT       THE *DRQUEUE* ENTRY REQUEST STATE FIELD HAS BEEN
00017  M01S00017.exdrvr  +++|*                UPDATED TO INDICATE WHERE SUBSEQUENT PROCESSING OF
00018  M01S00018.exdrvr  +++|*                THIS REQUEST IS TO CONTINUE.
00019  M01S00019.exdrvr  +++|*
00020  M01S00020.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, ACQCART2.* - UDT MESSAGE BUFFER
00021  M01S00021.exdrvr  +++|*                                             STILL IN USE.
00022  M01S00022.exdrvr  +++|*
00023  M01S00023.exdrvr  +++|*                A K-DISPLAY MESSAGE IS ISSUED IF THE INPUT TRAY OR
00024  M01S00024.exdrvr  +++|*                MATRIX CELL IS EMPTY.
00025  M01S00025.exdrvr  +++|*
00026  M01S00026.exdrvr  +++|*     NOTES      THIS IS A PSEUDO-REENTRANT PROCEDURE.
00027  M01S00027.exdrvr  +++|#
00028  M01S00028.exdrvr  +++|
00029  M01S00029.exdrvr  +++|
00030  M01S00030.exdrvr  +++|#
00031  M01S00031.exdrvr  +++|****  PROC ACQCART - XREF LIST BEGIN.
00032  M01S00032.exdrvr  +++|#
00033  M01S00033.exdrvr  +++|
00034  M01S00034.exdrvr  +++|      XREF
00035  M01S00035.exdrvr  +++|        BEGIN
00036  M01S00036.exdrvr  +++|        PROC ABORT;                  # ABORT #
00037  M01S00037.exdrvr  +++|        PROC KREQ;                   # SEND K-DISPLAY REQUEST #
00038  M01S00038.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
00039  M01S00039.exdrvr  +++|        PROC SENDMSG;                # SEND M860 MESSAGE #
00040  M01S00040.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
00041  M01S00041.exdrvr  +++|        END
00042  M01S00042.exdrvr  +++|
00043  M01S00043.exdrvr  +++|#
00044  M01S00044.exdrvr  +++|****  PROC ACQCART - XREF LIST END.
00045  M01S00045.exdrvr  +++|#
00046  M01S00046.exdrvr  +++|
00047  M01S00047.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
00048  M01S00048.exdrvr  +++|*CALL,COMBFAS
00049  M01S00049.exdrvr  +++|*CALL,COMBCPR
00050  M01S00050.exdrvr  +++|*CALL,COMBFET
00051  M01S00051.exdrvr  +++|*CALL,COMBHFC
00052  M01S00052.exdrvr  +++|*CALL,COMBKDD
00053  M01S00053.exdrvr  +++|*CALL,COMBLBL
00054  M01S00054.exdrvr  +++|*CALL,COMBLRQ
00055  M01S00055.exdrvr  +++|*CALL,COMBTDM
00056  M01S00056.exdrvr  +++|*CALL,COMBUCR
00057  M01S00057.exdrvr  +++|*CALL,COMBUDT
00058  M01S00058.exdrvr  +++|*CALL,COMXCTF
00059  M01S00059.exdrvr  +++|*CALL,COMXHLR
00060  M01S00060.exdrvr  +++|*CALL,COMXMSC
00061  M01S00061.exdrvr  +++|
00062  M01S00062.exdrvr  +++|      ITEM DRDFULL    B;             # NEXT-DRD FULL FLAG #
00063  M01S00063.exdrvr  +++|      ITEM DRDON      B;             # NEXT-DRD ON FLAG #
00064  M01S00064.exdrvr  +++|      ITEM I          I;             # INDEX #
00065  M01S00065.exdrvr  +++|      ITEM OTHERFULL  B;             # OTHER-DRD FULL FLAG #
00066  M01S00066.exdrvr  +++|      ITEM OTHERON    B;             # OTHER-DRD ON FLAG #
00067  M01S00067.exdrvr  +++|      ITEM TEMPALL    B;             # TEMP ALLOCATION FLAG #
00068  M01S00068.exdrvr  +++|      ITEM TEMPCSN0   U;             # FIRST 4 BYTES OF CSN #
00069  M01S00069.exdrvr  +++|      ITEM TEMPCSN1   U;             # NEXT 6 BYTES OF CSN #
00070  M01S00070.exdrvr  +++|      ITEM TEMPCSN2   U;             # LAST 2 BYTES OF CSN #
00071  M01S00071.exdrvr  +++|
00072  M01S00072.exdrvr  +++|      SWITCH ACQLBL:PROCST           # DRIVER REQUEST STATE #
00073  M01S00073.exdrvr  +++|            ACQINIT:INITIAL,         # INITIAL STATE #
00074  M01S00074.exdrvr  +++|            ACQLOAD:CONT1,           # CONTINUATION 1 #
00075  M01S00075.exdrvr  +++|            ACQREAD:CONT2;           # CONTINUATION 2 #
00076  M01S00076.exdrvr  +++|                                               CONTROL EJECT;
00077  M01S00077.exdrvr  +++|
00078  M01S00078.exdrvr  +++|      GOTO ACQLBL[LLR$RS[0]];
00079  M01S00079.exdrvr  +++|
00080  M01S00080.exdrvr  +++|#
00081  M01S00081.exdrvr  +++|*     INITIAL DRIVER REQUEST STATE.
00082  M01S00082.exdrvr  +++|#
00083  M01S00083.exdrvr  +++|
00084  M01S00084.exdrvr  +++|ACQINIT:
00085  M01S00085.exdrvr  +++|      SLOWFOR I = 1 STEP 1 WHILE (LLR$SMO[0] EQ 0)AND(I LQ MAXSMUNIT)
00086  M01S00086.exdrvr  +++|      DO                             # LOCATE SM ORDINAL FROM SM ID #
00087  M01S00087.exdrvr  +++|        BEGIN  # LOCATE #
00088  M01S00088.exdrvr  +++|        IF LLR$SMA[0] EQ SM$ID[I]    ##
00089  M01S00089.exdrvr  +++|          AND SM$EXIST[I]
00090  M01S00090.exdrvr  +++|        THEN                         # SM ORDINAL FOUND #
00091  M01S00091.exdrvr  +++|          BEGIN  # SET ORD #
00092  M01S00092.exdrvr  +++|          LLR$SMO[0] = I;
00093  M01S00093.exdrvr  +++|          END  # SET ORD #
00094  M01S00094.exdrvr  +++|
00095  M01S00095.exdrvr  +++|        END  # LOCATE #
00096  M01S00096.exdrvr  +++|
00097  M01S00097.exdrvr  +++|#
00098  M01S00098.exdrvr  +++|*     ALLOCATE DRD IN PREPARATION FOR LOAD.
00099  M01S00099.exdrvr  +++|#
00100  M01S00100.exdrvr  +++|
00101  M01S00101.exdrvr  +++|      IF LLR$SMO[0] EQ 0             # SM ORDINAL NOT FOUND #
00102  M01S00102.exdrvr  +++|        OR NOT SM$ON[LLR$SMO[0]]     # SM OFF #
00103  M01S00103.exdrvr  +++|      THEN                           # LOAD NOT POSSIBLE #
00104  M01S00104.exdrvr  +++|        BEGIN  # EXIT #
00105  M01S00105.exdrvr  +++|        DRVRACTIVE = TRUE;
00106  M01S00106.exdrvr  +++|        LLR$DR[0] = RESPTYP4"SMA$OFF";
00107  M01S00107.exdrvr  +++|        LLR$RS[0] = PROCST"COMPLETE";
00108  M01S00108.exdrvr  +++|        RETURN;
00109  M01S00109.exdrvr  +++|        END  # EXIT #
00110  M01S00110.exdrvr  +++|
00111  M01S00111.exdrvr  +++|      IF SM$SCCU[LLR$SMO[0]]         # PROCESSING SERVICE CELLS ONLY #
00112  M01S00112.exdrvr  +++|        AND LLR$PRCNME[0] NQ REQTYP4"INITHW"  # NOT SRV CELL LOAD #
00113  M01S00113.exdrvr  +++|      THEN                           # LOAD AFTER SRV CELLS PROCESSED #
00114  M01S00114.exdrvr  +++|        BEGIN  # WAIT #
00115  M01S00115.exdrvr  +++|        RETURN;
00116  M01S00116.exdrvr  +++|        END  # WAIT #
00117  M01S00117.exdrvr  +++|
00118  M01S00118.exdrvr  +++|      DRDON = D1$ON[LLR$SMO[0]]      ##
00119  M01S00119.exdrvr  +++|                AND (NOT D1$ON$ACK[LLR$SMO[0]])  ##
00120  M01S00120.exdrvr  +++|                AND (D1$DONE[LLR$SMO[0]]  ##
00121  M01S00121.exdrvr  +++|                OR SM$DONE[LLR$SMO[0]]  ##
00122  M01S00122.exdrvr  +++|                OR LLR$PRCNME[0] NQ REQTYP4"INITHW");
00123  M01S00123.exdrvr  +++|
00124  M01S00124.exdrvr  +++|      OTHERON = D0$ON[LLR$SMO[0]]    ##
00125  M01S00125.exdrvr  +++|                  AND (NOT D0$ON$ACK[LLR$SMO[0]])  ##
00126  M01S00126.exdrvr  +++|                  AND (D0$DONE[LLR$SMO[0]]  ##
00127  M01S00127.exdrvr  +++|                  OR SM$DONE[LLR$SMO[0]]  ##
00128  M01S00128.exdrvr  +++|                  OR LLR$PRCNME[0] NQ REQTYP4"INITHW");
00129  M01S00129.exdrvr  +++|
00130  M01S00130.exdrvr  +++|      DRDFULL = D1$FULL[LLR$SMO[0]];
00131  M01S00131.exdrvr  +++|      OTHERFULL = D0$FULL[LLR$SMO[0]];
00132  M01S00132.exdrvr  +++|      IF SM$TOPDRD[LLR$SMO[0]]
00133  M01S00133.exdrvr  +++|      THEN                           # UPPER DRD CHOSEN #
00134  M01S00134.exdrvr  +++|        BEGIN  # RESET #
00135  M01S00135.exdrvr  +++|        TEMPALL = DRDON;
00136  M01S00136.exdrvr  +++|        DRDON = OTHERON;
00137  M01S00137.exdrvr  +++|        OTHERON = TEMPALL;
00138  M01S00138.exdrvr  +++|        DRDFULL = D0$FULL[LLR$SMO[0]];
00139  M01S00139.exdrvr  +++|        OTHERFULL = D1$FULL[LLR$SMO[0]];
00140  M01S00140.exdrvr  +++|        END  # RESET #
00141  M01S00141.exdrvr  +++|
00142  M01S00142.exdrvr  +++|      IF DRDFULL OR NOT DRDON
00143  M01S00143.exdrvr  +++|      THEN                           # CHOSEN DRD NOT AVAILABLE #
00144  M01S00144.exdrvr  +++|        BEGIN  # CHECK OTHER DRD #
00145  M01S00145.exdrvr  +++|        IF NOT OTHERON
00146  M01S00146.exdrvr  +++|        THEN                         # OTHER DRD OFF #
00147  M01S00147.exdrvr  +++|          BEGIN  # RECHECK #
00148  M01S00148.exdrvr  +++|          IF NOT DRDON
00149  M01S00149.exdrvr  +++|          THEN                       # BOTH DRD-S OFF #
00150  M01S00150.exdrvr  +++|            BEGIN  # OFF #
00151  M01S00151.exdrvr  +++|            DRVRACTIVE = TRUE;
00152  M01S00152.exdrvr  +++|            LLR$DR[0] = RESPTYP4"SMA$OFF";  # NO ACCESS #
00153  M01S00153.exdrvr  +++|            LLR$RS[0] = PROCST"COMPLETE";
00154  M01S00154.exdrvr  +++|            END  # OFF #
00155  M01S00155.exdrvr  +++|
00156  M01S00156.exdrvr  +++|          RETURN;                    # CHOSEN DRD IS FULL #
00157  M01S00157.exdrvr  +++|          END  # RECHECK #
00158  M01S00158.exdrvr  +++|
00159  M01S00159.exdrvr  +++|        IF OTHERFULL
00160  M01S00160.exdrvr  +++|        THEN                         # OTHER DRD IS FULL #
00161  M01S00161.exdrvr  +++|          BEGIN  # WAIT #
00162  M01S00162.exdrvr  +++|          RETURN;                    # AT LEAST ONE DRD IS FULL #
00163  M01S00163.exdrvr  +++|          END  # WAIT #
00164  M01S00164.exdrvr  +++|
00165  M01S00165.exdrvr  +++|        SM$TOPDRD[LLR$SMO[0]] = NOT SM$TOPDRD[LLR$SMO[0]];
00166  M01S00166.exdrvr  +++|                                     # USE OTHER DRD #
00167  M01S00167.exdrvr  +++|        END  # CHECK OTHER DRD #
00168  M01S00168.exdrvr  +++|
00169  M01S00169.exdrvr  +++|      IF SM$TOPDRD[LLR$SMO[0]]
00170  M01S00170.exdrvr  +++|      THEN                           # UPPER DRD CHOSEN #
00171  M01S00171.exdrvr  +++|        BEGIN  # UPPER #
00172  M01S00172.exdrvr  +++|        LLR$DRD[0] = 0;
00173  M01S00173.exdrvr  +++|        D0$FULL[LLR$SMO[0]] = TRUE;
00174  M01S00174.exdrvr  +++|        D0$LLADR[LLR$SMO[0]] = P<LLRQ>;
00175  M01S00175.exdrvr  +++|        LLR$MBH[0] = LOC(D0$MSG[LLR$SMO[0]]) - 1;
00176  M01S00176.exdrvr  +++|        END  # UPPER #
00177  M01S00177.exdrvr  +++|
00178  M01S00178.exdrvr  +++|      ELSE                           # LOWER DRD CHOSEN #
00179  M01S00179.exdrvr  +++|        BEGIN  # LOWER #
00180  M01S00180.exdrvr  +++|        LLR$DRD[0] = 1;
00181  M01S00181.exdrvr  +++|        D1$FULL[LLR$SMO[0]] = TRUE;
00182  M01S00182.exdrvr  +++|        D1$LLADR[LLR$SMO[0]] = P<LLRQ>;
00183  M01S00183.exdrvr  +++|        LLR$MBH[0] = LOC(D1$MSG[LLR$SMO[0]]) - 1;
00184  M01S00184.exdrvr  +++|        END  # LOWER #
00185  M01S00185.exdrvr  +++|
00186  M01S00186.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
00187  M01S00187.exdrvr  +++|      IF MBF$WORD[0] NQ 0
00188  M01S00188.exdrvr  +++|      THEN                           # LAST MESSAGE NOT PROCESSED #
00189  M01S00189.exdrvr  +++|        BEGIN  # ABORT #
00190  M01S00190.exdrvr  +++|        FE$RTN[0] = "ACQCART2.";
00191  M01S00191.exdrvr  +++|        GOTO ACQCART2;
00192  M01S00192.exdrvr  +++|        END  # ABORT #
00193  M01S00193.exdrvr  +++|
00194  M01S00194.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
00195  M01S00195.exdrvr  +++|      MS$MSG[0] = HFC$ACCR;          # SET *ACQUIRE* FUNCTION #
00196  M01S00196.exdrvr  +++|      IF LLR$Y[0] EQ SM$ENT$TY       # LOAD FROM ENTRY TRAY #
00197  M01S00197.exdrvr  +++|        AND LLR$Z[0] EQ SM$TY$Z
00198  M01S00198.exdrvr  +++|      THEN                           # RESET TO *ENTER* FUNCTION #
00199  M01S00199.exdrvr  +++|        BEGIN  # RESET #
00200  M01S00200.exdrvr  +++|        MS$MSG[0] = HFC$ENCRDR;
00201  M01S00201.exdrvr  +++|        END  # RESET #
00202  M01S00202.exdrvr  +++|
00203  M01S00203.exdrvr  +++|      MBF$SAVE[0] = SAVEPART;
00204  M01S00204.exdrvr  +++|      LLR$RS[0] = PROCST"CONT1";     # SET NEXT REQUEST STATE #
00205  M01S00205.exdrvr  +++|
00206  M01S00206.exdrvr  +++|#
00207  M01S00207.exdrvr  +++|*     ISSUE M860 MESSAGE TO LOAD CARTRIDGE.
00208  M01S00208.exdrvr  +++|#
00209  M01S00209.exdrvr  +++|
00210  M01S00210.exdrvr  +++|ACQLOAD:
00211  M01S00211.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
00212  M01S00212.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
00213  M01S00213.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0          ##
00214  M01S00214.exdrvr  +++|        AND LLR$DR[0] EQ RESPTYP4"OK4"  # HARDWARE GOOD #
00215  M01S00215.exdrvr  +++|      THEN                           # RESPONSE NOT YET RECEIVED #
00216  M01S00216.exdrvr  +++|        BEGIN  # RETRY #
00217  M01S00217.exdrvr  +++|        RETURN;
00218  M01S00218.exdrvr  +++|        END  # RETRY #
00219  M01S00219.exdrvr  +++|
00220  M01S00220.exdrvr  +++|      SM$ACCBUSY[LLR$SMO[0]] = FALSE;# SM ARM NOT IN USE #
00221  M01S00221.exdrvr  +++|      IF (MS$MSG[0] EQ HFC$ACCR      # *ACQUIRE* ERROR #
Line S00222 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
00222  M02S00222.msea023 ---|        AND MS$RETCODE[0] NQ HRC$CSNMIS)  ##
00223  M01S00001.msea023 +++|        AND MS$RETCODE[0] NQ 0       ##
00224  M01S00002.msea023 +++|        AND MS$RETCODE[0] NQ HRC$CSNMIS)  # HANDLE WHEN READING LABEL #
00225  M01S00223.exdrvr  +++|        OR (MS$MSG[0] EQ HFC$ENCRDR  # *ENTER* ERROR #
00226  M01S00224.exdrvr  +++|        AND MS$RETCODE[0] NQ 0)      ##
00227  M01S00225.exdrvr  +++|        OR LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"
00228  M01S00226.exdrvr  +++|      THEN                           # UNEXPECTED RESPONSE #
00229  M01S00227.exdrvr  +++|        BEGIN  # NO LOAD #
00230  M01S00228.exdrvr  +++|        IF LLR$DRFUL[0]              # DEVICE DRIVER ERROR #
00231  M01S00229.exdrvr  +++|        THEN                         # TURN OFF DRD #
00232  M01S00230.exdrvr  +++|          BEGIN  # OFF #
00233  M01S00231.exdrvr  +++|          LLR$LDERR[0] = TRUE;
00234  M01S00232.exdrvr  +++|          GOTO ACQCART1;
00235  M01S00233.exdrvr  +++|          END  # OFF #
00236  M01S00234.exdrvr  +++|
00237  M01S00235.exdrvr  +++|        IF MS$RETCODE[0] EQ 0        ##
00238  M01S00236.exdrvr  +++|          AND MS$MSG[0] EQ HFC$ACCR
00239  M01S00237.exdrvr  +++|        THEN                         # HARDWARE ERROR #
00240  M01S00238.exdrvr  +++|          BEGIN  # M860 #
00241  M01S00239.exdrvr  +++|          LLR$DR[0] = RESPTYP4"M86$HDW$PR";
00242  M01S00240.exdrvr  +++|          END  # M860 #
00243  M01S00241.exdrvr  +++|
00244  M01S00242.exdrvr  +++|        IF MS$RETCODE[0] EQ HRC$CELEMP         ##
00245  M01S00243.exdrvr  +++|          OR MS$RETCODE[0] EQ HRC$TRAYPR
00246  M01S00244.exdrvr  +++|        THEN                         # CELL EMPTY #
00247  M01S00245.exdrvr  +++|          BEGIN  # EXIT #
00248  M01S00246.exdrvr  +++|          LLR$DR[0] = RESPTYP4"CELL$EMP";
00249  M01S00247.exdrvr  +++|
00250  M01S00248.exdrvr  +++|#
00251  M01S00249.exdrvr  +++|*     SEND K-DISPLAY MESSAGE TO OPERATOR INDICATING EMPTY CELL.
00252  M01S00250.exdrvr  +++|#
00253  M01S00251.exdrvr  +++|
00254  M01S00252.exdrvr  +++|          IF LLR$PRCNME[0] NQ REQTYP4"INITHW"  # NOT SRV CELL LOAD #
00255  M01S00253.exdrvr  +++|            AND NOT (MS$MSG[0] EQ HFC$ACCR  # NOT UCP LOAD TO MATRIX #
00256  M01S00254.exdrvr  +++|            AND LLR$RQI[0] NQ REQNAME"RQIINT")
00257  M01S00255.exdrvr  +++|          THEN                       # SEND K-DISPLAY MESSAGE #
00258  M01S00256.exdrvr  +++|            BEGIN  # K #
00259  M01S00257.exdrvr  +++|            P<KWORD> = LOC(LLR$KWORDS[0]);
00260  M01S00258.exdrvr  +++|            KW$WORD[0] = 0;
00261  M01S00259.exdrvr  +++|            KW$LINE1[0] = KM"KM2";
00262  M01S00260.exdrvr  +++|            KW$LINE2[0] = KM"KM20";  # ASSUME INPUT TRAY EMPTY #
00263  M01S00261.exdrvr  +++|            IF MS$MSG[0] EQ HFC$ACCR
00264  M01S00262.exdrvr  +++|            THEN                     # MATRIX CELL WAS EMPTY #
00265  M01S00263.exdrvr  +++|              BEGIN  # RESET #
00266  M01S00264.exdrvr  +++|              KW$LINE2[0] = KM"KM7";
00267  M01S00265.exdrvr  +++|              KW$DF[0] = TRUE;       # SEND TO JOB DAYFILE #
00268  M01S00266.exdrvr  +++|              KW$IC[0] = TRUE;       # SET IMMEDIATE COMPLETION #
00269  M01S00267.exdrvr  +++|              END  # RESET #
00270  M01S00268.exdrvr  +++|
00271  M01S00269.exdrvr  +++|            KW$RPGO[0] = TRUE;       # ALLOW GO RESPONSE #
00272  M01S00270.exdrvr  +++|            KP$EQ = UD$ESTO[LLR$CU[0]];  # PRESET MESSAGE PARAMETERS #
00273  M01S00271.exdrvr  +++|            P<MWBTMP> = LOC(UD$CAMF[LLR$CU[0]]);
00274  M01S00272.exdrvr  +++|            P<FETMWB> = MWB$ADDR[LLR$CIF[0]];
00275  M01S00273.exdrvr  +++|            P<FETMRA> = P<FETMWB> - 1;
00276  M01S00274.exdrvr  +++|            P<FETMRB> = FRA$MRBADR[0];
00277  M01S00275.exdrvr  +++|            KP$CN = FMR$CHAN[0];
00278  M01S00276.exdrvr  +++|            KP$DT = SM$ID[LLR$SMO[0]];
00279  M01S00277.exdrvr  +++|            KP$YA = LLR$Y[0];        # SET EMPTY CELL #
00280  M01S00278.exdrvr  +++|            KP$ZA = LLR$Z[0];
00281  M01S00279.exdrvr  +++|            KREQ(LOC(KWORD),KLINK);  # SEND K-DISPLAY REQUEST #
00282  M01S00280.exdrvr  +++|            END  # K #
00283  M01S00281.exdrvr  +++|
00284  M01S00282.exdrvr  +++|          END  # EXIT #
00285  M01S00283.exdrvr  +++|
00286  M01S00284.exdrvr  +++|        IF LLR$DRD[0] EQ 0
00287  M01S00285.exdrvr  +++|        THEN                         # UPPER DRD EMPTY #
00288  M01S00286.exdrvr  +++|          BEGIN  # UPPER #
00289  M01S00287.exdrvr  +++|          D0$FULL[LLR$SMO[0]] = FALSE;
00290  M01S00288.exdrvr  +++|          END  # UPPER #
00291  M01S00289.exdrvr  +++|
00292  M01S00290.exdrvr  +++|        ELSE                         # LOWER DRD EMPTY #
00293  M01S00291.exdrvr  +++|          BEGIN  # LOWER #
00294  M01S00292.exdrvr  +++|          D1$FULL[LLR$SMO[0]] = FALSE;
00295  M01S00293.exdrvr  +++|          END  # LOWER #
00296  M01S00294.exdrvr  +++|
00297  M01S00295.exdrvr  +++|        GOTO ACQCART1;
00298  M01S00296.exdrvr  +++|        END  # NO LOAD #
00299  M01S00297.exdrvr  +++|
00300  M01S00298.exdrvr  +++|      IF MS$MSG[0] EQ HFC$ACCR
00301  M01S00299.exdrvr  +++|      THEN                           # SET DRIVER RETURN CODE IN LLRQ #
00302  M01S00300.exdrvr  +++|        BEGIN  # SET #
00303  M01S00301.exdrvr  +++|        LLR$DR[0] = RESPTYP4"UNK$CART";
00304  M01S00302.exdrvr  +++|        END  # SET #
00305  M01S00303.exdrvr  +++|
00306  M01S00304.exdrvr  +++|      TEMPCSN0 = MS$CART0[0];        # MOVE CSN TO MSG BUFFER #
00307  M01S00305.exdrvr  +++|      TEMPCSN1 = MS$CART1[0];
00308  M01S00306.exdrvr  +++|      TEMPCSN2 = MS$CART2[0];
00309  M01S00307.exdrvr  +++|      ZFILL(UDT$MSG,MSGLT);          # CLEAR STORAGE BUFFER #
00310  M01S00308.exdrvr  +++|      SM$TOPDRD[LLR$SMO[0]] = NOT SM$TOPDRD[LLR$SMO[0]];
00311  M01S00309.exdrvr  +++|      P<UDT$MSG> = P<MBFHDR> + 1;
00312  M01S00310.exdrvr  +++|      MS$CART0[0] = TEMPCSN0;
00313  M01S00311.exdrvr  +++|      MS$CART1[0] = TEMPCSN1;
00314  M01S00312.exdrvr  +++|      MS$CART2[0] = TEMPCSN2;
00315  M01S00313.exdrvr  +++|      MS$MSG[0] = HFC$RCLBP0;        # SET *READ LABEL* FUNCTION #
00316  M01S00314.exdrvr  +++|      MBF$WORD[0] = 0;               # CLEAR MESSAGE STATUS #
00317  M01S00315.exdrvr  +++|      MBF$SAVE[0] = SAVEMOST;
00318  M01S00316.exdrvr  +++|      LLR$RS[0] = PROCST"CONT2";
00319  M01S00317.exdrvr  +++|
00320  M01S00318.exdrvr  +++|#
00321  M01S00319.exdrvr  +++|*     ISSUE M860 MESSAGE TO READ CARTRIDGE LABEL.
00322  M01S00320.exdrvr  +++|#
00323  M01S00321.exdrvr  +++|
00324  M01S00322.exdrvr  +++|ACQREAD:
00325  M01S00323.exdrvr  +++|      P<MBFHDR> = LLR$MBH[0];
00326  M01S00324.exdrvr  +++|      IF LABELBUSY AND NOT MBF$ACTIVE[0]
00327  M01S00325.exdrvr  +++|      THEN                           # ANOTHER REQUEST HAS LABEL BUF #
00328  M01S00326.exdrvr  +++|        BEGIN  # WAIT #
00329  M01S00327.exdrvr  +++|        RETURN;                      # WAIT FOR FREE LABEL BUFFER #
00330  M01S00328.exdrvr  +++|        END  # WAIT #
00331  M01S00329.exdrvr  +++|
00332  M01S00330.exdrvr  +++|      LABELBUSY = TRUE;              # RESERVE LABEL BUFFER #
00333  M01S00331.exdrvr  +++|      SENDMSG;                       # SEND M860 MESSAGE #
00334  M01S00332.exdrvr  +++|      IF MBF$SBADDR[0] EQ 0          ##
00335  M01S00333.exdrvr  +++|        AND LLR$DR[0] EQ RESPTYP4"OK4"  # GOOD HARDWARE #
00336  M01S00334.exdrvr  +++|      THEN                           # RESPONSE NOT YET RECEIVED #
00337  M01S00335.exdrvr  +++|        BEGIN  # RETRY #
00338  M01S00336.exdrvr  +++|        RETURN;
00339  M01S00337.exdrvr  +++|        END  # RETRY #
00340  M01S00338.exdrvr  +++|
00341  M01S00339.exdrvr  +++|      IF LLR$DR[0] EQ RESPTYP4"M86$HDW$PR"  # HARDWARE ERROR #
00342  M01S00340.exdrvr  +++|      THEN                           # LABEL NOT NEEDED #
00343  M01S00341.exdrvr  +++|        BEGIN  # M860 #
00344  M01S00342.exdrvr  +++|        LABELBUSY = FALSE;
00345  M01S00343.exdrvr  +++|        GOTO ACQCART1;
00346  M01S00344.exdrvr  +++|        END  # M860 #
00347  M01S00345.exdrvr  +++|
00348  M01S00346.exdrvr  +++|      P<UDT$MSG> = MBF$SBADDR[0];
00349  M01S00347.exdrvr  +++|      IF LLR$PRCNME[0] EQ REQTYP4"INITHW"
00350  M01S00348.exdrvr  +++|      THEN                           # LABEL NOT NEEDED #
00351  M01S00349.exdrvr  +++|        BEGIN  # CLEAR #
00352  M01S00350.exdrvr  +++|        LABELBUSY = FALSE;
00353  M01S00351.exdrvr  +++|        END  # CLEAR #
00354  M01S00352.exdrvr  +++|
00355  M01S00353.exdrvr  +++|      IF MS$ASS$DT[0] EQ 0           # NO LABEL RETURNED #
00356  M01S00354.exdrvr  +++|        OR LAB$ALL[0] EQ 0           # LABEL HAS ALL ZEROES #
00357  M01S00355.exdrvr  +++|      THEN                           # NO LABEL ON CARTRIDGE #
00358  M01S00356.exdrvr  +++|        BEGIN  # NO LABEL #
00359  M01S00357.exdrvr  +++|        LLR$DR[0] = RESPTYP4"UNK$CART";
00360  M01S00358.exdrvr  +++|        ZFILL(LABEL$CART,LABLEN);    # CLEAR LABEL BUFFER #
00361  M01S00359.exdrvr  +++|        LAB$CSNA[0] = MS$CART0[0];   # MOVE CSN TO LABEL #
00362  M01S00360.exdrvr  +++|        LAB$CSNB[0] = MS$CART1A[0];
00363  M01S00361.exdrvr  +++|        LAB$CSN1A[0] = MS$CART1B[0];
00364  M01S00362.exdrvr  +++|        LAB$CSN1B[0] = MS$CART2[0];
00365  M01S00363.exdrvr  +++|        GOTO ACQCART1;
00366  M01S00364.exdrvr  +++|        END  # NO LABEL #
00367  M01S00365.exdrvr  +++|
00368  M01S00366.exdrvr  +++|      LLR$DR[0] = RESPTYP4"CART$LB$ERR";  # ASSUME SOME OF LABEL GOOD #
00369  M01S00367.exdrvr  +++|      P<HLRQ> = LLR$UCPRA[0];        # LOCATE FAMILY/SUBFAMILY #
00370  M01S00368.exdrvr  +++|      P<TDAM> = LOC(HLR$TDAM[0]);
00371  M01S00369.exdrvr  +++|      IF LAB$CSNA[0] EQ MS$CART0[0]  # HEX CSN #
00372  M01S00370.exdrvr  +++|        AND LAB$CSNB[0] EQ MS$CART1A[0]  ##
00373  M01S00371.exdrvr  +++|        AND LAB$CSN1A[0] EQ MS$CART1B[0]  ##
00374  M01S00372.exdrvr  +++|        AND LAB$CSN1B[0] EQ MS$CART2[0]  ##
00375  M01S00373.exdrvr  +++|        AND ((LAB$CSNT[0] EQ LLR$CSNT[0]  # CYBER CSN #
00376  M01S00374.exdrvr  +++|        AND LAB$FMLY[0] EQ TDAMFAM   # FAMILY #
00377  M01S00375.exdrvr  +++|        AND LAB$SF[0] EQ TDAMSBF     # SUBFAMILY #
00378  M01S00376.exdrvr  +++|        AND LAB$SMID[0] EQ LLR$SMA[0]  # SM ID #
00379  M01S00377.exdrvr  +++|        AND LAB$Y[0] EQ LLR$Y[0]     # LOCATION #
00380  M01S00378.exdrvr  +++|        AND LAB$Z[0] EQ LLR$Z[0])  ##
00381  M01S00379.exdrvr  +++|        OR LLR$PRCNME[0] EQ REQTYP4"INITHW"
00382  M01S00380.exdrvr  +++|        OR LLR$RQI[0] LS REQNAME"RQITEST")  # UCP #
00383  M01S00381.exdrvr  +++|      THEN                           # NORMAL READ-LABEL #
00384  M01S00382.exdrvr  +++|        BEGIN  # OK #
00385  M01S00383.exdrvr  +++|        LLR$DR[0] = RESPTYP4"OK4";
00386  M01S00384.exdrvr  +++|        END  # OK #
00387  M01S00385.exdrvr  +++|
00388  M01S00386.exdrvr  +++|      IF (LAB$CSNA[0] NQ MS$CART0[0] # HEX CSN #
00389  M01S00387.exdrvr  +++|        OR LAB$CSNB[0] NQ MS$CART1A[0]  ##
00390  M01S00388.exdrvr  +++|        OR LAB$CSN1A[0] NQ MS$CART1B[0]  ##
00391  M01S00389.exdrvr  +++|        OR LAB$CSN1B[0] NQ MS$CART2[0])  ##
00392  M01S00390.exdrvr  +++|        AND ((LAB$CSNT[0] NQ LLR$CSNT[0]  # CYBER CSN #
00393  M01S00391.exdrvr  +++|        AND LAB$FMLY[0] NQ TDAMFAM   # FAMILY #
00394  M01S00392.exdrvr  +++|        AND LAB$SF[0] NQ TDAMSBF     # SUBFAMILY #
00395  M01S00393.exdrvr  +++|        AND LAB$SMID[0] NQ LLR$SMA[0]  # SM ID #
00396  M01S00394.exdrvr  +++|        AND (LAB$Y[0] NQ LLR$Y[0]    # LOCATION #
00397  M01S00395.exdrvr  +++|        OR LAB$Z[0] NQ LLR$Z[0]))  ##
00398  M01S00396.exdrvr  +++|        OR LLR$PRCNME[0] EQ REQTYP4"INITHW"
00399  M01S00397.exdrvr  +++|        OR LLR$RQI[0] LS REQNAME"RQITEST")  # UCP #
00400  M01S00398.exdrvr  +++|      THEN                           # TOTAL LABEL MISMATCH #
00401  M01S00399.exdrvr  +++|        BEGIN  # UNKNOWN #
00402  M01S00400.exdrvr  +++|        LLR$DR[0] = RESPTYP4"UNK$CART";
00403  M01S00401.exdrvr  +++|        END  # UNKNOWN #
00404  M01S00402.exdrvr  +++|
00405  M01S00403.exdrvr  +++|ACQCART1:
00406  M01S00404.exdrvr  +++|      IF LLR$CSNT[0] NQ 0            # *TDAM* REQUEST #
00407  M01S00405.exdrvr  +++|        AND (LLR$DR[0] EQ RESPTYP4"UNK$CART"  # UNEXPECTED LABEL #
00408  M01S00406.exdrvr  +++|        OR LLR$DR[0] EQ RESPTYP4"CART$LB$ERR")
00409  M01S00407.exdrvr  +++|      THEN                           # EJECT CARTRIDGE #
00410  M01S00408.exdrvr  +++|        BEGIN  # EJECT #
00411  M01S00409.exdrvr  +++|        LLR$Y[0] = SM$EXIT$TY;
00412  M01S00410.exdrvr  +++|        LLR$Z[0] = SM$TY$Z;
00413  M01S00411.exdrvr  +++|        END  # EJECT #
00414  M01S00412.exdrvr  +++|
00415  M01S00413.exdrvr  +++|      LLR$RS[0] = PROCST"COMPLETE";  # ASSUME REQUEST COMPLETE #
00416  M01S00414.exdrvr  +++|        IF MS$RETCODE[0] EQ HRC$TRAYPR    # INPUT TRAY EMPTY #
00417  M01S00415.exdrvr  +++|        AND NOT LLR$UCPABT[0]        # EXIT IF *SSLABEL* ABORTED #
00418  M01S00416.exdrvr  +++|      THEN                           # RETRY LOAD FROM INPUT TRAY #
00419  M01S00417.exdrvr  +++|        BEGIN  # RETRY #
00420  M01S00418.exdrvr  +++|        LLR$RS[0] = PROCST"INITIAL";
00421  M01S00419.exdrvr  +++|        END  # RETRY #
00422  M01S00420.exdrvr  +++|
00423  M01S00421.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0
00424  M01S00422.exdrvr  +++|      THEN                           # CLEAR SBT ENTRY #
00425  M01S00423.exdrvr  +++|        BEGIN  # CLEAR #
00426  M01S00424.exdrvr  +++|        P<UDT$MSG> = MBF$SBADDR[0];
00427  M01S00425.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);
00428  M01S00426.exdrvr  +++|        END  # CLEAR #
00429  M01S00427.exdrvr  +++|
00430  M01S00428.exdrvr  +++|      MBF$WORD[0] = 0;               # CLEAR MESSAGE STATUS #
00431  M01S00429.exdrvr  +++|      RETURN;
00432  M01S00430.exdrvr  +++|
00433  M01S00431.exdrvr  +++|ACQCART2:
00434  M01S00432.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
00435  M01S00433.exdrvr  +++|      ABORT;
00436  M01S00434.exdrvr  +++|      END  # ACQCART #
00437  M01S00435.exdrvr  +++|
00438  M01S00436.exdrvr  +++|    TERM
00439  M01S00437.exdrvr  +++|PROC BMLOG;
00440  M01S00438.exdrvr  +++|# TITLE BMLOG - SEND MESSAGE TO BML.                                  #
00441  M01S00439.exdrvr  +++|
00442  M01S00440.exdrvr  +++|      BEGIN  # BMLOG #
00443  M01S00441.exdrvr  +++|
00444  M01S00442.exdrvr  +++|#
00445  M01S00443.exdrvr  +++|**    BMLOG - SEND MESSAGE TO BML.
00446  M01S00444.exdrvr  +++|*
00447  M01S00445.exdrvr  +++|*     *BMLOG* SENDS ERROR LOG AND BUFFERED LOG MESSAGES TO THE
00448  M01S00446.exdrvr  +++|*     BINARY MAINTENANCE LOG.
00449  M01S00447.exdrvr  +++|*
00450  M01S00448.exdrvr  +++|*     PROC BMLOG
00451  M01S00449.exdrvr  +++|*
00452  M01S00450.exdrvr  +++|*     ENTRY      THE MESSAGE FET BASED ARRAYS POINT TO THE ASSOCIATED
00453  M01S00451.exdrvr  +++|*                CHANNEL THROUGH WHICH THE M860 RESPONSE WAS SENT.
00454  M01S00452.exdrvr  +++|*
00455  M01S00453.exdrvr  +++|*     EXIT       THE M860 RESPONSE HAS BEEN REFORMATTED AND SENT TO
00456  M01S00454.exdrvr  +++|*                THE BML.  THE ASSOCIATED *HLRQ* HAS BEEN UPDATED, IF
00457  M01S00455.exdrvr  +++|*                PROCESSING BUFFERED LOG DATA.
00458  M01S00456.exdrvr  +++|*
00459  M01S00457.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, BMLOG2.* - AN ERROR OCCURRED
00460  M01S00458.exdrvr  +++|*                                           WHEN READING THE
00461  M01S00459.exdrvr  +++|*                                           LOG DATA FROM THE
00462  M01S00460.exdrvr  +++|*                                           MESSAGE FET.
00463  M01S00461.exdrvr  +++|*
Line S00462 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
00464  M02S00462.exdrvr2 ---|*                *MASSTOR BUFFERED LOG ERROR.* - AN ERROR OCCURRED WHEN
Line S00463 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
00465  M02S00463.exdrvr2 ---|*                                                READING THE DRD
Line S00464 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
00466  M02S00464.exdrvr2 ---|*                                                BUFFERED LOG.
00467  M01S00001.exdrvr2 +++|*                *BUFFERED LOG ERROR.* - AN ERROR OCCURRED
00468  M01S00002.exdrvr2 +++|*                                        WHEN READING THE
00469  M01S00003.exdrvr2 +++|*                                        DRD BUFFERED LOG.
00470  M01S00465.exdrvr  +++|#
00471  M01S00466.exdrvr  +++|
00472  M01S00467.exdrvr  +++|
00473  M01S00468.exdrvr  +++|#
00474  M01S00469.exdrvr  +++|****  PROC BMLOG - XREF LIST BEGIN.
00475  M01S00470.exdrvr  +++|#
00476  M01S00471.exdrvr  +++|
00477  M01S00472.exdrvr  +++|      XREF
00478  M01S00473.exdrvr  +++|        BEGIN
00479  M01S00474.exdrvr  +++|        PROC ABORT;                  # ABORT #
00480  M01S00475.exdrvr  +++|        PROC GDATA;                  # GET DATA FROM READ BUFFER #
00481  M01S00476.exdrvr  +++|        PROC MESSAGE;                # ISSUE PREPARED MESSAGE #
00482  M01S00477.exdrvr  +++|        PROC MSG;                    # ISSUE MESSAGE #
00483  M01S00478.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
00484  M01S00479.exdrvr  +++|        END
00485  M01S00480.exdrvr  +++|
00486  M01S00481.exdrvr  +++|#
00487  M01S00482.exdrvr  +++|****  PROC BMLOG - XREF LIST END.
00488  M01S00483.exdrvr  +++|#
00489  M01S00484.exdrvr  +++|
Line S00485 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00490  M02S00485.drvrr0f ---|      DEF BFLLEN     #82#;           # M860 BUF LOG LENGTH #
Line S00486 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00491  M02S00486.drvrr0f ---|      DEF BFLLENM1   #81#;           # M860 BUF LOG LENGTH - 1 #
00492  M01S00001.drvrr0f +++|      DEF BFLLEN     #163#;   # M860 BUF LOG LENGTH #
00493  M01S00002.drvrr0f +++|      DEF BFLLENM1   #162#;   # M860 BUF LOG LENGTH - 1 #
00494  M01S00487.exdrvr  +++|      DEF CUCODE     #O"106"#;       # CU COMPONENT CODE #
00495  M01S00488.exdrvr  +++|      DEF ERLMLEN    #20#;           # ERROR LOG BML MSG LENGTH #
00496  M01S00489.exdrvr  +++|      DEF FORLEN     #23#;           # FORMATTING BUFFER LENGTH #
00497  M01S00490.exdrvr  +++|      DEF MAXBLC     #19#;           # NUMBER OF BUF LOG COUNTERS #
00498  M01S00491.exdrvr  +++|      DEF MAXBLCM1   #18#;           # NUMBER OF BUF LOG COUNTERS - 1 #
00499  M01S00492.exdrvr  +++|      DEF M860WLEN   #32#;           # M860 WORD LENGTH #
Line S00493 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00500  M02S00493.drvrr0f ---|      DEF PBUFBITS   #8#;            # EXTRA BITS PER BUF LOG ENTRY #
Line S00494 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00501  M02S00494.drvrr0f ---|      DEF PBUFLEN    #10#;           # FULL WORDS PER BUF LOG ENTRY #
00502  M01S00495.exdrvr  +++|      DEF SMCODE     #O"107"#;       # SM COMPONENT CODE #
00503  M01S00496.exdrvr  +++|      DEF USFORNUM   #O"1200"#;      # USAGE FORMAT NUMBER #
00504  M01S00497.exdrvr  +++|
00505  M01S00498.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
00506  M01S00499.exdrvr  +++|*CALL,COMBFAS
00507  M01S00500.exdrvr  +++|*CALL,COMBFET
00508  M01S00501.exdrvr  +++|*CALL,COMBHFC
00509  M01S00502.exdrvr  +++|*CALL,COMBLRQ
00510  M01S00503.exdrvr  +++|*CALL,COMBUDT
00511  M01S00504.exdrvr  +++|*CALL,COMXHLR
00512  M01S00505.exdrvr  +++|*CALL,COMXMSC
00513  M01S00506.exdrvr  +++|
00514  M01S00507.exdrvr  +++|      ITEM ASSOCDATA  U;             # ASSOCIATED DATA LENGTH #
00515  M01S00508.exdrvr  +++|      ITEM BUFBIT     U;             # BUF LOG BIT INDEX #
00516  M01S00509.exdrvr  +++|      ITEM BUFWORD    U;             # BUF LOG WORD INDEX #
00517  M01S00003.drvrr0f +++|      ITEM FIRSTBIT    U;        # FIRST BIT OF BUF LOG DRD ENTRY #
00518  M01S00510.exdrvr  +++|      ITEM FIRSTPART  U;             # LENGTH OF 1ST PART M860 WORD #
00519  M01S00511.exdrvr  +++|      ITEM I          I;             # INDEX #
00520  M01S00512.exdrvr  +++|      ITEM J          I;             # INDEX #
00521  M01S00513.exdrvr  +++|      ITEM STAT       U;             # LOG TRANSFER STATUS #
00522  M01S00514.exdrvr  +++|
00523  M01S00515.exdrvr  +++|#
00524  M01S00516.exdrvr  +++|*     ARRAYS TO SEND BML MESSAGE FROM.
00525  M01S00517.exdrvr  +++|#
00526  M01S00518.exdrvr  +++|
00527  M01S00519.exdrvr  +++|      ARRAY LOGHDR [0:0] S(1);       # LOG HEADER WORD #
00528  M01S00520.exdrvr  +++|        BEGIN
00529  M01S00521.exdrvr  +++|        ITEM LH$WORD    U(00,00,60);
00530  M01S00522.exdrvr  +++|        ITEM LH$CNT     U(00,00,12); # LOG COUNT #
00531  M01S00523.exdrvr  +++|        END
00532  M01S00524.exdrvr  +++|
00533  M01S00525.exdrvr  +++|      ARRAY FORBUF [0:0] S(FORLEN);  # FORMATTING BUFFER #
00534  M01S00526.exdrvr  +++|        BEGIN
00535  M01S00527.exdrvr  +++|        ITEM FB$WORD0   U(00,00,60);  # FORMAT BUFFER WORD 0 #
00536  M01S00528.exdrvr  +++|        ITEM FB$DC      U(00,00,12);  # COMPONENT CODE #
00537  M01S00529.exdrvr  +++|        ITEM FB$FNUM    U(00,12,12);  # FORMAT NUMBER #
00538  M01S00530.exdrvr  +++|        ITEM FB$CHAN    U(00,30,06);  # CHANNEL #
00539  M01S00531.exdrvr  +++|        ITEM FB$SMUN    U(00,48,06);  # SM UNIT NUMBER #
00540  M01S00532.exdrvr  +++|        ITEM FB$DRD     U(00,54,06);  # DRD #
00541  M01S00533.exdrvr  +++|
00542  M01S00534.exdrvr  +++|        ITEM FB$WORD1   U(01,00,60);  # FORMAT BUFFER WORD 1 #
00543  M01S00535.exdrvr  +++|        ITEM FB$ESTO    U(01,00,12);  # EST ORDINAL #
00544  M01S00536.exdrvr  +++|
00545  M01S00537.exdrvr  +++|        ITEM FB$WORD2   U(02,00,60);  # FORMAT BUFFER WORD 2 #
00546  M01S00538.exdrvr  +++|        ITEM FB$ERLOG   U(02,00,60);  # ERROR LOG DATA FWA #
00547  M01S00539.exdrvr  +++|        ITEM FB$ERLFNUM U(02,00,08);  # ERROR LOG FORMAT NUMBER #
00548  M01S00540.exdrvr  +++|        ITEM FB$Y       U(02,21,05);  # ROW NUMBER #
00549  M01S00541.exdrvr  +++|        ITEM FB$Z       U(02,26,04);  # COLUMN NUMBER #
00550  M01S00542.exdrvr  +++|
00551  M01S00543.exdrvr  +++|        ITEM FB$WORD3   U(03,00,60);  # FORMAT BUFFER WORD 3 #
00552  M01S00544.exdrvr  +++|        ITEM FB$CSN     C(03,00,10);  # DISPLAY-CODE CSN #
00553  M01S00545.exdrvr  +++|
00554  M01S00546.exdrvr  +++|        ITEM FB$WORD4   U(04,00,60);  # FORMAT BUFFER WORD 4 #
00555  M01S00547.exdrvr  +++|        ITEM FB$BFLOG   U(04,00,60);  # BUF LOG DATA FWA #
00556  M01S00548.exdrvr  +++|
00557  M01S00549.exdrvr  +++|        ITEM FB$WORD19  U(19,00,60);  # FORMAT BUFFER WORD 19 #
00558  M01S00550.exdrvr  +++|        ITEM FB$EXCESS  U(19,04,56);  # EXCESS BITS #
00559  M01S00551.exdrvr  +++|        END
00560  M01S00552.exdrvr  +++|
00561  M01S00553.exdrvr  +++|#
00562  M01S00554.exdrvr  +++|*     ARRAYS TO UNPACK BUFFERED LOG DATA.
00563  M01S00555.exdrvr  +++|#
00564  M01S00556.exdrvr  +++|
00565  M01S00557.exdrvr  +++|      ARRAY TMPBUF [0:BFLLENM1] S(1);  # FULL BUF LOG #
00566  M01S00558.exdrvr  +++|        BEGIN
00567  M01S00559.exdrvr  +++|        ITEM TBFWORD    U(00,00,60);  # TEMP BUF WORD #
00568  M01S00560.exdrvr  +++|        END
00569  M01S00561.exdrvr  +++|
00570  M01S00562.exdrvr  +++|      ARRAY TMPBYTE [0:MAXBLCM1] S(1);  # BYTE-REVERSED COUNTERS #
00571  M01S00563.exdrvr  +++|        BEGIN
00572  M01S00564.exdrvr  +++|        ITEM TBYWORD    U(00,00,60);  # TEMP BYTE BUF WORD #
00573  M01S00565.exdrvr  +++|        END
00574  M01S00566.exdrvr  +++|
00575  M01S00567.exdrvr  +++|      BASED
00576  M01S00568.exdrvr  +++|      ARRAY TMPLOG [0:MAXBLCM1] S(1);  # UNPACKED COUNTERS #
00577  M01S00569.exdrvr  +++|        BEGIN
00578  M01S00570.exdrvr  +++|        ITEM TLGWORD    U(00,00,60);  # BUF LOG WORD #
00579  M01S00571.exdrvr  +++|        END
00580  M01S00572.exdrvr  +++|
00581  M01S00573.exdrvr  +++|#
00582  M01S00574.exdrvr  +++|*     BASED ARRAYS TO REFERENCE LOG DATA.
00583  M01S00575.exdrvr  +++|#
00584  M01S00576.exdrvr  +++|
00585  M01S00577.exdrvr  +++|      BASED
00586  M01S00578.exdrvr  +++|      ARRAY BFBYTE [0:0] S(MAXBLC);  # UNPACKED BUF LOG DATA #
00587  M01S00579.exdrvr  +++|        BEGIN
00588  M01S00580.exdrvr  +++|        ITEM BFL$STWR   U(04,00,60);  # STRIPES WRITTEN #
00589  M01S00581.exdrvr  +++|        ITEM BFL$SWRE   U(05,00,60);  # SOFT WRITE ERRORS #
00590  M01S00582.exdrvr  +++|        ITEM BFL$STDM   U(08,00,60);  # STRIPES DEMARKED #
00591  M01S00583.exdrvr  +++|        ITEM BFL$STRD   U(10,00,60);  # STRIPES READ #
00592  M01S00584.exdrvr  +++|        ITEM BFL$SRDE   U(11,00,60);  # SOFT READ ERRORS #
00593  M01S00585.exdrvr  +++|        ITEM BFL$CRLD   U(15,00,60);  # LOAD COUNT #
00594  M01S00586.exdrvr  +++|        ITEM BFL$LDER   U(16,00,60);  # LOAD ERRORS #
00595  M01S00587.exdrvr  +++|        END
00596  M01S00588.exdrvr  +++|
00597  M01S00589.exdrvr  +++|      BASED
00598  M01S00590.exdrvr  +++|      ARRAY LOGADDR [0:0] S(MAXBLC); ;    # LOG FWA #
00599  M01S00591.exdrvr  +++|                                               CONTROL EJECT;
00600  M01S00592.exdrvr  +++|
00601  M01S00593.exdrvr  +++|#
00602  M01S00594.exdrvr  +++|*     READ LOG INTO FORMAT BUFFER.
00603  M01S00595.exdrvr  +++|#
00604  M01S00596.exdrvr  +++|
00605  M01S00597.exdrvr  +++|      ZFILL(FORBUF,FORLEN);          # CLEAR BUFFER #
00606  M01S00598.exdrvr  +++|      LH$WORD[0] = 0;
00607  M01S00599.exdrvr  +++|      ASSOCDATA = ((MS$ASS$DT[0]*2)+14)/15;
00608  M01S00600.exdrvr  +++|      P<LOGADDR> = LOC(FB$ERLOG[0]);  # ASSUME ERROR LOG #
00609  M01S00601.exdrvr  +++|      IF MS$MSG[0] GQ HFC$DBLD0      ##
00610  M01S00602.exdrvr  +++|        AND MS$MSG[0] LQ HFC$DBLD7
00611  M01S00603.exdrvr  +++|      THEN                           # PROCESSING BUFFERED LOG #
00612  M01S00604.exdrvr  +++|        BEGIN  # RESET #
00613  M01S00605.exdrvr  +++|        ZFILL(TMPBUF,BFLLEN);        # CLEAR BUFFERS #
00614  M01S00606.exdrvr  +++|        ZFILL(TMPBYTE,MAXBLC);
00615  M01S00607.exdrvr  +++|        P<LOGADDR> = LOC(TMPBUF);
00616  M01S00608.exdrvr  +++|        END  # RESET #
00617  M01S00609.exdrvr  +++|
00618  M01S00610.exdrvr  +++|      IF MS$ASS$DT[0] NQ 0
00619  M01S00611.exdrvr  +++|      THEN                           # LOG EXISTS #
00620  M01S00612.exdrvr  +++|        BEGIN  # READ #
00621  M01S00613.exdrvr  +++|        GDATA(FETMRB,LOGADDR,ASSOCDATA,STAT);
00622  M01S00614.exdrvr  +++|        IF STAT NQ 0
00623  M01S00615.exdrvr  +++|        THEN                         # ERROR IN READING LOG #
00624  M01S00616.exdrvr  +++|          BEGIN  # ABORT #
00625  M01S00617.exdrvr  +++|          FE$RTN[0] = "BMLOG2.";
00626  M01S00618.exdrvr  +++|          GOTO BMLOG1;
00627  M01S00619.exdrvr  +++|          END  # ABORT #
00628  M01S00620.exdrvr  +++|
00629  M01S00621.exdrvr  +++|        END  # READ #
00630  M01S00622.exdrvr  +++|
00631  M01S00623.exdrvr  +++|#
00632  M01S00624.exdrvr  +++|*     SET HEADER FIELDS COMMON TO BOTH LOGS.
00633  M01S00625.exdrvr  +++|#
00634  M01S00626.exdrvr  +++|
00635  M01S00627.exdrvr  +++|      FB$CHAN[0] = FMR$CHAN[0];      # CHANNEL #
00636  M01S00628.exdrvr  +++|      FB$ESTO[0] = UD$ESTO[FMR$CU[0]];  # EST ORDINAL #
00637  M01S00629.exdrvr  +++|
00638  M01S00630.exdrvr  +++|#
00639  M01S00631.exdrvr  +++|*     COMPLETE ERROR LOG MESSAGE HEADER AND SEND TO BML.
00640  M01S00632.exdrvr  +++|#
00641  M01S00633.exdrvr  +++|
00642  M01S00634.exdrvr  +++|      IF P<LOGADDR> EQ LOC(FB$ERLOG[0])
00643  M01S00635.exdrvr  +++|      THEN                           # PROCESSING ERROR LOG #
00644  M01S00636.exdrvr  +++|        BEGIN  # ERROR LOG #
00645  M01S00637.exdrvr  +++|        FB$DC[0] = CUCODE;           # COMPONENT CODE #
00646  M01S00638.exdrvr  +++|        FB$FNUM[0] = FB$ERLFNUM[0];  # FORMAT NUMBER #
00647  M01S00639.exdrvr  +++|        FB$EXCESS[0] = 0;            # CLEAR EXCESS LOG INFO #
00648  M01S00640.exdrvr  +++|        LH$CNT[0] = ERLMLEN;
00649  M01S00641.exdrvr  +++|        MESSAGE(LOGHDR,BML);         # SEND ERROR LOG TO BML #
00650  M01S00642.exdrvr  +++|        RETURN;
00651  M01S00643.exdrvr  +++|        END  # ERROR LOG #
00652  M01S00644.exdrvr  +++|
00653  M01S00645.exdrvr  +++|#
00654  M01S00646.exdrvr  +++|*     COMPLETE HEADER FOR BUFFERED LOG BML MESSAGE.
00655  M01S00647.exdrvr  +++|#
00656  M01S00648.exdrvr  +++|
00657  M01S00649.exdrvr  +++|      IF MS$RETCODE[0] NQ 0
00658  M01S00650.exdrvr  +++|      THEN                           # BUFFERED LOG ERROR #
00659  M01S00651.exdrvr  +++|        BEGIN  # ERROR #
Line S00652 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
00660  M02S00652.exdrvr2 ---|        MSG(" MASSTOR BUFFERED LOG ERROR.",SYSUDF1);
00661  M01S00004.exdrvr2 +++|        MSG(" BUFFERED LOG ERROR.",SYSUDF1);
00662  M01S00653.exdrvr  +++|        IF MS$ASS$DT[0] EQ 0
00663  M01S00654.exdrvr  +++|        THEN                         # NO DATA TO PROCESS #
00664  M01S00655.exdrvr  +++|          BEGIN  # EXIT #
00665  M01S00656.exdrvr  +++|          RETURN;
00666  M01S00657.exdrvr  +++|          END  # EXIT #
00667  M01S00658.exdrvr  +++|
00668  M01S00659.exdrvr  +++|        END  # ERROR #
00669  M01S00660.exdrvr  +++|
00670  M01S00661.exdrvr  +++|      FB$DC[0] = SMCODE;             # COMPONENT CODE #
00671  M01S00662.exdrvr  +++|      FB$FNUM[0] = USFORNUM;         # FORMAT NUMBER #
00672  M01S00663.exdrvr  +++|      FB$SMUN[0] = SM$SUN[MS$MSQN$CN[0]];  # SM UNIT NUMBER #
00673  M01S00664.exdrvr  +++|      P<LLRQ> = D1$LLADR[MS$MSQN$CN[0]];  # ASSUME LOWER DRD #
00674  M01S00665.exdrvr  +++|      FB$DRD[0] = D1$SUN[MS$MSQN$CN[0]];  # DRD UNIT NUMBER #
00675  M01S00666.exdrvr  +++|      IF MS$MSQN$D0[0]
00676  M01S00667.exdrvr  +++|      THEN                           # UPPER DRD BEING PROCESSED #
00677  M01S00668.exdrvr  +++|        BEGIN  # RESET #
00678  M01S00669.exdrvr  +++|        P<LLRQ> = D0$LLADR[MS$MSQN$CN[0]];
00679  M01S00670.exdrvr  +++|        FB$DRD[0] = D0$SUN[MS$MSQN$CN[0]];  # DRD UNIT NUMBER #
00680  M01S00671.exdrvr  +++|        END  # RESET #
00681  M01S00672.exdrvr  +++|
00682  M01S00673.exdrvr  +++|      FB$Y[0] = LLR$Y[0];            # LOCATION #
00683  M01S00674.exdrvr  +++|      FB$Z[0] = LLR$Z[0];
00684  M01S00675.exdrvr  +++|      FB$CSN[0] = LLR$CSNT[0];       # DISPLAY-CODE CSN #
00685  M01S00676.exdrvr  +++|
00686  M01S00677.exdrvr  +++|#
00687  M01S00678.exdrvr  +++|*     UNPACK BUFFERED LOG AND SEND TO BML.
00688  M01S00679.exdrvr  +++|#
00689  M01S00680.exdrvr  +++|
Line S00681 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00690  M02S00681.drvrr0f ---|      BUFWORD = MS$MSG$D[0] * PBUFLEN;  # PRESET BUF LOG LOCATION #
Line S00682 Modification History
M01 (Added by) exdrvr
M02 (Updated by) drvrr0f
Seq #  *Modification Id* Act 
----------------------------+
00691  M02S00682.drvrr0f ---|      BUFBIT = MS$MSG$D[0] * PBUFBITS;
00692  M01S00004.drvrr0f +++|      FIRSTBIT = M860WLEN * MAXBLC * MS$MSG$D[0];  # SET START #
00693  M01S00005.drvrr0f +++|      BUFWORD = FIRSTBIT/60;
00694  M01S00006.drvrr0f +++|      BUFBIT = FIRSTBIT - (BUFWORD * 60);
00695  M01S00683.exdrvr  +++|      SLOWFOR I = 0 STEP 1 UNTIL MAXBLCM1
00696  M01S00684.exdrvr  +++|      DO                             # UNPACK 32-BIT WORDS #
00697  M01S00685.exdrvr  +++|        BEGIN  # UNPACK #
00698  M01S00686.exdrvr  +++|        FIRSTPART = 60 - BUFBIT;     # PRESET 1ST PART OF SPLIT WORD #
00699  M01S00687.exdrvr  +++|        IF FIRSTPART GR M860WLEN
00700  M01S00688.exdrvr  +++|        THEN                         # 32-BIT WORD NOT DIVIDED #
00701  M01S00689.exdrvr  +++|          BEGIN  # RESET #
00702  M01S00690.exdrvr  +++|          FIRSTPART = M860WLEN;
00703  M01S00691.exdrvr  +++|          END  # RESET #
00704  M01S00692.exdrvr  +++|
00705  M01S00693.exdrvr  +++|        B<0,FIRSTPART>TBYWORD[I] = B<BUFBIT,FIRSTPART>TBFWORD[BUFWORD];
00706  M01S00694.exdrvr  +++|                                     # MOVE FIRST PART OF WORD #
00707  M01S00695.exdrvr  +++|        IF FIRSTPART LS M860WLEN
00708  M01S00696.exdrvr  +++|        THEN                         # 32-BIT WORD HAS 2 PARTS #
00709  M01S00697.exdrvr  +++|          BEGIN  # SECOND #
00710  M01S00698.exdrvr  +++|          B<FIRSTPART,M860WLEN-FIRSTPART>TBYWORD[I] =
00711  M01S00699.exdrvr  +++|            B<0,M860WLEN-FIRSTPART>TBFWORD[BUFWORD+1];
00712  M01S00700.exdrvr  +++|          END  # SECOND #
00713  M01S00701.exdrvr  +++|
00714  M01S00702.exdrvr  +++|        BUFBIT = BUFBIT + M860WLEN;  # POSITION TO NEXT WORD #
00715  M01S00703.exdrvr  +++|        IF BUFBIT GQ 60
00716  M01S00704.exdrvr  +++|        THEN                         # NEXT WORD ON 60-BIT BOUNDARY #
00717  M01S00705.exdrvr  +++|          BEGIN  # NEXT #
00718  M01S00706.exdrvr  +++|          BUFBIT = BUFBIT - 60;
00719  M01S00707.exdrvr  +++|          BUFWORD = BUFWORD + 1;
00720  M01S00708.exdrvr  +++|          END  # NEXT #
00721  M01S00709.exdrvr  +++|
00722  M01S00710.exdrvr  +++|        END  # UNPACK #
00723  M01S00711.exdrvr  +++|
00724  M01S00712.exdrvr  +++|      P<TMPLOG> = LOC(FB$BFLOG[0]);
00725  M01S00713.exdrvr  +++|      SLOWFOR I = 0 STEP 1 UNTIL MAXBLCM1
00726  M01S00714.exdrvr  +++|      DO                             # REVERSE 8-BIT BYTES #
00727  M01S00715.exdrvr  +++|        BEGIN  # REVERSE #
00728  M01S00716.exdrvr  +++|        SLOWFOR J = 0 STEP 1 UNTIL 3
00729  M01S00717.exdrvr  +++|        DO                           # TRANSFER BYTES #
00730  M01S00718.exdrvr  +++|          BEGIN  # BYTE #
00731  M01S00719.exdrvr  +++|          B<60-M860WLEN+(8*J),8>TLGWORD[I] =
00732  M01S00720.exdrvr  +++|            B<8*(3-J),8>TBYWORD[I];
00733  M01S00721.exdrvr  +++|          END  # BYTE #
00734  M01S00722.exdrvr  +++|
00735  M01S00723.exdrvr  +++|        END  # REVERSE #
00736  M01S00724.exdrvr  +++|
00737  M01S00725.exdrvr  +++|      LH$CNT[0] = FORLEN;
00738  M01S00726.exdrvr  +++|      MESSAGE(LOGHDR,BML);           # SEND BUFFERED LOG TO BML #
00739  M01S00727.exdrvr  +++|
00740  M01S00728.exdrvr  +++|#
00741  M01S00729.exdrvr  +++|*     UPDATE EXEC CARTRIDGE STATISTICS.
00742  M01S00730.exdrvr  +++|#
00743  M01S00731.exdrvr  +++|
00744  M01S00732.exdrvr  +++|      P<BFBYTE> = LOC(FB$BFLOG[0]);
00745  M01S00733.exdrvr  +++|      P<HLRQ> = LLR$UCPRA[0];
00746  M01S00734.exdrvr  +++|      HLR$STRD[0] = BFL$STRD[0];     # STRIPES READ #
00747  M01S00735.exdrvr  +++|      HLR$STWR[0] = BFL$STWR[0];     # STRIPES WRITTEN #
00748  M01S00736.exdrvr  +++|      HLR$SRDE[0] = BFL$SRDE[0];     # SOFT READ ERRORS #
00749  M01S00737.exdrvr  +++|      HLR$SWRE[0] = BFL$SWRE[0];     # SOFT WRITE ERRORS #
00750  M01S00738.exdrvr  +++|      HLR$STDM[0] = BFL$STDM[0];     # STRIPES DEMARKED #
00751  M01S00739.exdrvr  +++|      HLR$CRLD[0] = BFL$CRLD[0];     # LOAD COUNT #
00752  M01S00740.exdrvr  +++|      HLR$LDER[0] = BFL$LDER[0];     # LOAD ERRORS #
00753  M01S00741.exdrvr  +++|      RETURN;
00754  M01S00742.exdrvr  +++|
00755  M01S00743.exdrvr  +++|BMLOG1:
00756  M01S00744.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
00757  M01S00745.exdrvr  +++|      ABORT;
00758  M01S00746.exdrvr  +++|      END  # BMLOG #
00759  M01S00747.exdrvr  +++|
00760  M01S00748.exdrvr  +++|    TERM
00761  M01S00749.exdrvr  +++|PROC CALLPP((FCODE));
00762  M01S00750.exdrvr  +++|# TITLE CALLPP - ACTIVATE THE PP MODULE *1SS*.                        #
00763  M01S00751.exdrvr  +++|
00764  M01S00752.exdrvr  +++|      BEGIN  # CALLPP #
00765  M01S00753.exdrvr  +++|
00766  M01S00754.exdrvr  +++|#
00767  M01S00755.exdrvr  +++|**    CALLPP - ACTIVATE THE PP MODULE *1SS*.
00768  M01S00756.exdrvr  +++|*
00769  M01S00757.exdrvr  +++|*     *CALLPP* SENDS A MESSAGE FROM A UDT MESSAGE BUFFER TO
00770  M01S00758.exdrvr  +++|*     THE M860 HARDWARE, THROUGH A MESSAGE WRITE FET BUFFER.
00771  M01S00759.exdrvr  +++|*     IT CALLS THE PP *1SS* IF IT IS NOT ALREADY ACTIVE ON
00772  M01S00760.exdrvr  +++|*     THE DESIRED CHANNEL.
00773  M01S00761.exdrvr  +++|*
00774  M01S00762.exdrvr  +++|*     PROC CALLPP ((FCODE))
00775  M01S00763.exdrvr  +++|*
00776  M01S00764.exdrvr  +++|*     ENTRY      (FCODE) = PP FUNCTION CODE.
00777  M01S00765.exdrvr  +++|*
00778  M01S00766.exdrvr  +++|*                P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
00779  M01S00767.exdrvr  +++|*
00780  M01S00768.exdrvr  +++|*                P<UDT$MSG> = UDT/SBT MESSAGE BUFFER ADDRESS.
00781  M01S00769.exdrvr  +++|*
00782  M01S00770.exdrvr  +++|*     EXIT       THE M860 MESSAGE WAS WRITTEN TO THE MESSAGE WRITE
00783  M01S00771.exdrvr  +++|*                FET BUFFER.  IF A PP WAS CALLED, THE ACTIVE PP CALL
00784  M01S00772.exdrvr  +++|*                BLOCK ENTRY COUNT IS INCREMENTED.  IF THE M860 MESSAGE
00785  M01S00773.exdrvr  +++|*                WAS INITIATED BY THE CPU DRIVER, THE CHANNEL MESSAGE
00786  M01S00774.exdrvr  +++|*                COUNT IS INCREMENTED.
00787  M01S00775.exdrvr  +++|*
00788  M01S00776.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, CALLPP2.* - EXPECTED FREE CALL
00789  M01S00777.exdrvr  +++|*                                            BLOCK ENTRY NOT FOUND.
00790  M01S00778.exdrvr  +++|*
00791  M01S00779.exdrvr  +++|*                *EXEC ABNORMAL, CALLPP2A.* - TWO DATA TRANSFERS WERE
00792  M01S00780.exdrvr  +++|*                                             TRIED ON THE SAME
00793  M01S00781.exdrvr  +++|*                                             CHANNEL.  ONLY ONE SHOULD
00794  M01S00782.exdrvr  +++|*                                             BE TRIED AT A TIME.
00795  M01S00783.exdrvr  +++|*
00796  M01S00784.exdrvr  +++|*                *EXEC ABNORMAL, CALLPP3.* - TWO RAW DATA READS WERE
00797  M01S00785.exdrvr  +++|*                                            TRIED.  ONLY ONE SHOULD BE
00798  M01S00786.exdrvr  +++|*                                            ACTIVE AT A TIME.
00799  M01S00787.exdrvr  +++|*
00800  M01S00788.exdrvr  +++|*     NOTES      THE M860 MESSAGE IS NOT SENT IF IT REQUIRES THE
00801  M01S00789.exdrvr  +++|*                ACCESSOR ARM AND THE ARM IS BUSY, THE PP CALL BLOCK
00802  M01S00790.exdrvr  +++|*                TABLE IS FULL, OR NO CHANNEL COULD BE ALLOCATED.
00803  M01S00791.exdrvr  +++|#
00804  M01S00792.exdrvr  +++|
00805  M01S00793.exdrvr  +++|
00806  M01S00794.exdrvr  +++|#
00807  M01S00795.exdrvr  +++|****  PROC CALLPP - XREF LIST BEGIN.
00808  M01S00796.exdrvr  +++|#
00809  M01S00797.exdrvr  +++|
00810  M01S00798.exdrvr  +++|      XREF
00811  M01S00799.exdrvr  +++|        BEGIN
00812  M01S00800.exdrvr  +++|        PROC ABORT;                  # ABORT #
00813  M01S00801.exdrvr  +++|        PROC FSCLOG;                 # DUMP FSC LOG TO BML #
00814  M01S00802.exdrvr  +++|        PROC GETCHAN;                # ALLOCATE CHANNEL #
00815  M01S00803.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
00816  M01S00804.exdrvr  +++|        PROC SMSG;                   # SEND AND CHECKSUM MESSAGE #
00817  M01S00805.exdrvr  +++|        PROC SYSTEM;                 # CALL PP #
00818  M01S00806.exdrvr  +++|        END
00819  M01S00807.exdrvr  +++|
00820  M01S00808.exdrvr  +++|#
00821  M01S00809.exdrvr  +++|****  PROC CALLPP - XREF LIST END.
00822  M01S00810.exdrvr  +++|#
00823  M01S00811.exdrvr  +++|
00824  M01S00812.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
00825  M01S00813.exdrvr  +++|*CALL,COMBFAS
00826  M01S00814.exdrvr  +++|*CALL,COMBCDD
00827  M01S00815.exdrvr  +++|*CALL,COMBFET
00828  M01S00816.exdrvr  +++|*CALL,COMBHFC
00829  M01S00817.exdrvr  +++|*CALL,COMBLBL
00830  M01S00818.exdrvr  +++|*CALL,COMBLRQ
00831  M01S00819.exdrvr  +++|*CALL,COMBUDT
00832  M01S00820.exdrvr  +++|*CALL,COMXCTF
00833  M01S00821.exdrvr  +++|*CALL,COMXMSC
00834  M01S00822.exdrvr  +++|
00835  M01S00823.exdrvr  +++|      ITEM CALLINDEX  U;             # FREE CALL BLOCK ENTRY INDEX #
00836  M01S00824.exdrvr  +++|      ITEM CU         U;             # CONTROLLER ORDINAL #
00837  M01S00825.exdrvr  +++|      ITEM FCODE      U;             # PP FUNCTION CODE PARAMETER #
00838  M01S00826.exdrvr  +++|      ITEM I          I;             # INDEX #
00839  M01S00827.exdrvr  +++|      ITEM RESPCOUNT  U;             # EXPECTED MSG RESPONSE COUNT #
00840  M01S00828.exdrvr  +++|      ITEM STAT       U;             # *SMSG* STATUS #
00841  M01S00829.exdrvr  +++|                                               CONTROL EJECT;
00842  M01S00830.exdrvr  +++|
00843  M01S00831.exdrvr  +++|      IF SM$ACCBUSY[LLR$SMO[0]]      # SM IN USE #
00844  M01S00832.exdrvr  +++|        AND (((MS$MSG[0] EQ HFC$CHSSMA  # SM STATUS CHANGE #
00845  M01S00833.exdrvr  +++|        OR MS$MSG[0] EQ HFC$CHSDRD)  # DRD STATUS CHANGE #
00846  M01S00834.exdrvr  +++|        AND MS$PARM1A[0] EQ ONLINE)  ##
00847  M01S00835.exdrvr  +++|        OR MS$MSG[0] LQ HFC$STCRNF   # ACQUIRE OR STORE #
00848  M01S00836.exdrvr  +++|        OR MS$MSG[0] EQ HFC$ENCRDR)  # ENTER #
00849  M01S00837.exdrvr  +++|      THEN                           # SM ARM TO BE MOVED #
00850  M01S00838.exdrvr  +++|        BEGIN  # WAIT #
00851  M01S00839.exdrvr  +++|        RETURN;                      # WAIT FOR ARM TO STOP #
00852  M01S00840.exdrvr  +++|        END  # WAIT #
00853  M01S00841.exdrvr  +++|
00854  M01S00842.exdrvr  +++|#
00855  M01S00843.exdrvr  +++|*     ALLOCATE CHANNEL.
00856  M01S00844.exdrvr  +++|#
00857  M01S00845.exdrvr  +++|
00858  M01S00846.exdrvr  +++|      GETCHAN(FCODE);
00859  M01S00847.exdrvr  +++|      IF P<FETMWB> EQ 0
00860  M01S00848.exdrvr  +++|      THEN                           # NO CHANNEL ALLOCATED #
00861  M01S00849.exdrvr  +++|        BEGIN  # RETRY #
00862  M01S00850.exdrvr  +++|        RETURN;                      # REALLOCATE LATER #
00863  M01S00851.exdrvr  +++|        END  # RETRY #
00864  M01S00852.exdrvr  +++|
00865  M01S00853.exdrvr  +++|      IF FMW$AT[0] NQ 0
00866  M01S00854.exdrvr  +++|      THEN                           # LAST MESSAGE CAUSED ERROR #
00867  M01S00855.exdrvr  +++|        BEGIN  # FSC #
00868  M01S00856.exdrvr  +++|        FSCLOG(WFET);                # DUMP FSC LOG TO BML #
00869  M01S00857.exdrvr  +++|        END  # FSC #
00870  M01S00858.exdrvr  +++|
00871  M01S00859.exdrvr  +++|      CU = LLR$CU[0];                # ASSUME MESSAGE FROM LLRQ #
00872  M01S00860.exdrvr  +++|      IF MS$CU[0] NQ 0
00873  M01S00861.exdrvr  +++|      THEN                           # SENDING ERROR LOG MESSAGE #
00874  M01S00862.exdrvr  +++|        BEGIN  # RESET #
00875  M01S00863.exdrvr  +++|        CU = MS$CU[0];
00876  M01S00864.exdrvr  +++|        END  # RESET #
00877  M01S00865.exdrvr  +++|
00878  M01S00866.exdrvr  +++|      CALLINDEX = 0;                 # PRESET INDEX #
00879  M01S00867.exdrvr  +++|      IF B<FMR$CIF[0],1>UD$WBACT[CU] EQ OFF
00880  M01S00868.exdrvr  +++|      THEN                           # FREE CHANNEL PICKED #
00881  M01S00869.exdrvr  +++|        BEGIN  # FIND CALL ENTRY #
00882  M01S00870.exdrvr  +++|        IF PPCBENCNT EQ PPCBTSIZE
00883  M01S00871.exdrvr  +++|        THEN                         # NO FREE CALL ENTRY #
00884  M01S00872.exdrvr  +++|          BEGIN  # TRY LATER #
00885  M01S00873.exdrvr  +++|          RETURN;
00886  M01S00874.exdrvr  +++|          END  # TRY LATER #
00887  M01S00875.exdrvr  +++|
00888  M01S00876.exdrvr  +++|#
00889  M01S00877.exdrvr  +++|*     SEARCH FOR FREE ENTRY IN PP CALL BLOCK TABLE.
00890  M01S00878.exdrvr  +++|#
00891  M01S00879.exdrvr  +++|
00892  M01S00880.exdrvr  +++|        SLOWFOR I = 1 STEP 1 WHILE (CALLINDEX EQ 0)AND(I LQ PPCBTSIZE)
00893  M01S00881.exdrvr  +++|        DO                           # FIND FREE CALL ENTRY #
00894  M01S00882.exdrvr  +++|          BEGIN  # FIND #
00895  M01S00883.exdrvr  +++|          IF PPU$FC[I] EQ 0
00896  M01S00884.exdrvr  +++|          THEN                       # FREE ENTRY FOUND #
00897  M01S00885.exdrvr  +++|            BEGIN  # FOUND #
00898  M01S00886.exdrvr  +++|            CALLINDEX = I;
00899  M01S00887.exdrvr  +++|            END  # FOUND #
00900  M01S00888.exdrvr  +++|
00901  M01S00889.exdrvr  +++|          END  # FIND #
00902  M01S00890.exdrvr  +++|
00903  M01S00891.exdrvr  +++|        IF CALLINDEX EQ 0
00904  M01S00892.exdrvr  +++|        THEN                         # FREE ENTRY NOT FOUND #
00905  M01S00893.exdrvr  +++|          BEGIN  # ABORT #
00906  M01S00894.exdrvr  +++|          FE$RTN[0] = "CALLPP2.";
00907  M01S00895.exdrvr  +++|          GOTO CALLPP2;
00908  M01S00896.exdrvr  +++|          END  # ABORT #
00909  M01S00897.exdrvr  +++|
00910  M01S00898.exdrvr  +++|        END  # FIND CALL ENTRY #
00911  M01S00899.exdrvr  +++|
00912  M01S00900.exdrvr  +++|      ELSE                           # CHANNEL PICKED IN USE #
00913  M01S00901.exdrvr  +++|        BEGIN  # IN USE #
00914  M01S00902.exdrvr  +++|        SLOWFOR I = 1 STEP 1 WHILE (CALLINDEX EQ 0)AND(I LQ PPCBTSIZE)
00915  M01S00903.exdrvr  +++|        DO                           # SCAN CALL BLOCK #
00916  M01S00904.exdrvr  +++|          BEGIN  # SCAN #
00917  M01S00905.exdrvr  +++|          IF P<FETMWB> EQ PPU$MBADDR[I]
00918  M01S00906.exdrvr  +++|          THEN                       # PP IN USE FOUND #
00919  M01S00907.exdrvr  +++|            BEGIN  # FOUND #
00920  M01S00908.exdrvr  +++|            CALLINDEX = I;
00921  M01S00909.exdrvr  +++|            END  # FOUND #
00922  M01S00910.exdrvr  +++|
00923  M01S00911.exdrvr  +++|          END  # SCAN #
00924  M01S00912.exdrvr  +++|
00925  M01S00913.exdrvr  +++|        END  # IN USE #
00926  M01S00914.exdrvr  +++|
00927  M01S00915.exdrvr  +++|      IF FCODE EQ IRMDAT
00928  M01S00916.exdrvr  +++|      THEN                           # SENDING DATA #
00929  M01S00917.exdrvr  +++|        BEGIN  # DATA #
00930  M01S00918.exdrvr  +++|        IF PPU$DBADDR[CALLINDEX] NQ 0
00931  M01S00919.exdrvr  +++|        THEN                         # 2 DATA TRANSFERS TO SAME PP #
00932  M01S00920.exdrvr  +++|          BEGIN  # ABORT #
00933  M01S00921.exdrvr  +++|          FE$RTN[0] = "CALLPP2A.";
00934  M01S00922.exdrvr  +++|          GOTO CALLPP2;
00935  M01S00923.exdrvr  +++|          END  # ABORT #
00936  M01S00924.exdrvr  +++|
00937  M01S00925.exdrvr  +++|        PPU$DBADDR[CALLINDEX] = LLR$MSFET[0];  # PASS DATA BUF ADDR #
00938  M01S00926.exdrvr  +++|        GOTO CALLPP1;
00939  M01S00927.exdrvr  +++|        END  # DATA #
00940  M01S00928.exdrvr  +++|
00941  M01S00929.exdrvr  +++|#
00942  M01S00930.exdrvr  +++|*     COPY MESSAGE FROM UDT/STORAGE BUFFER TO MESSAGE WRITE BUFFER.
00943  M01S00931.exdrvr  +++|#
00944  M01S00932.exdrvr  +++|
00945  M01S00933.exdrvr  +++|      RESPCOUNT = 1;                 # ASSUME NORMAL MESSAGE #
00946  M01S00934.exdrvr  +++|      IF MS$MSG[0] GQ HFC$MVLMVR     ##
00947  M01S00935.exdrvr  +++|        AND MS$MSG[0] LQ HFC$MVLMNW
00948  M01S00936.exdrvr  +++|      THEN                           # *MOUNT-VOLUME* MESSAGE #
00949  M01S00937.exdrvr  +++|        BEGIN  # CIF #
00950  M01S00938.exdrvr  +++|        B<3-FMR$CIF[0],1>MS$INTER[0] = ON;  # SWITCH BIT ORDER #
00951  M01S00939.exdrvr  +++|        B<FMR$CIF[0],1>UD$DBACT[LLR$CU[0]] = ON;
00952  M01S00940.exdrvr  +++|        RESPCOUNT = 2;               # INCLUDE REWIND/UNLOAD #
00953  M01S00941.exdrvr  +++|        END  # CIF #
00954  M01S00942.exdrvr  +++|
00955  M01S00943.exdrvr  +++|      MS$CU[0] = 0;                  # IN CASE ERROR LOG MESSAGE #
00956  M01S00944.exdrvr  +++|      IF MS$MSG[0] NQ HFC$WRTLBL
00957  M01S00945.exdrvr  +++|      THEN                           # NOT A *WRITE-LABEL* MESSAGE #
00958  M01S00946.exdrvr  +++|        BEGIN  # NOT WRITE #
00959  M01S00947.exdrvr  +++|        SMSG(FETMWB,UDT$MSG,0,0,STAT);
00960  M01S00948.exdrvr  +++|        END  # NOT WRITE #
00961  M01S00949.exdrvr  +++|
00962  M01S00950.exdrvr  +++|      ELSE                           # SEND *WRITE-LABEL* MESSAGE #
00963  M01S00951.exdrvr  +++|        BEGIN  # WRLABEL #
00964  M01S00952.exdrvr  +++|        SMSG(FETMWB,UDT$MSG,LABEL$CART,LABLEN,STAT);
00965  M01S00953.exdrvr  +++|        END  # WRLABEL #
00966  M01S00954.exdrvr  +++|
00967  M01S00955.exdrvr  +++|      IF STAT NQ 0
00968  M01S00956.exdrvr  +++|      THEN                           # MESSAGE WRITE BUFFER FULL #
00969  M01S00957.exdrvr  +++|        BEGIN  # FREE CHANNEL #
00970  M01S00958.exdrvr  +++|        IF MS$MSG[0] GQ (HRF$ELGFUL + HRF$R)   # ERROR LOG MESSAGE #
00971  M01S00959.exdrvr  +++|          AND MS$MSG[0] LQ (HRF$REQDMP + HRF$R)
00972  M01S00960.exdrvr  +++|        THEN                         # INDICATE RESPONSE NOT SENT #
00973  M01S00961.exdrvr  +++|          BEGIN  # RESTORE #
00974  M01S00962.exdrvr  +++|          MS$CU[0] = CU;
00975  M01S00963.exdrvr  +++|          END  # RESTORE #
00976  M01S00964.exdrvr  +++|
00977  M01S00965.exdrvr  +++|        RETURN;                      # TRY LATER #
00978  M01S00966.exdrvr  +++|        END  # FREE CHANNEL #
00979  M01S00967.exdrvr  +++|
00980  M01S00968.exdrvr  +++|      IF MS$MSG[0] EQ HFC$RDRAW
00981  M01S00969.exdrvr  +++|      THEN                           # READING RAW DATA #
00982  M01S00970.exdrvr  +++|        BEGIN  # RAW #
00983  M01S00971.exdrvr  +++|        IF FMR$RDBA[0] NQ 0          # READING 2 RAW STRIPES #
00984  M01S00972.exdrvr  +++|        THEN                         # SHOULD BE ONLY ONE #
00985  M01S00973.exdrvr  +++|          BEGIN  # ABORT #
00986  M01S00974.exdrvr  +++|          FE$RTN[0] = "CALLPP3.";
00987  M01S00975.exdrvr  +++|          GOTO CALLPP2;
00988  M01S00976.exdrvr  +++|          END  # ABORT #
00989  M01S00977.exdrvr  +++|
00990  M01S00978.exdrvr  +++|        P<FETFHB> = LLR$MSFET[0];
00991  M01S00979.exdrvr  +++|        FMR$RDBA[0] = FHB$FRST[0] + MSGLT;  # SET RAW DATA ADDRESS #
00992  M01S00980.exdrvr  +++|        END  # RAW #
00993  M01S00981.exdrvr  +++|
00994  M01S00982.exdrvr  +++|      IF MS$MSG[0] LQ HFC$STCRNF     # ACQUIRE OR STORE #
00995  M01S00983.exdrvr  +++|        OR MS$MSG[0] EQ HFC$ENCRDR   # ENTER #
00996  M01S00984.exdrvr  +++|        OR ((MS$MSG[0] EQ HFC$CHSSMA # SM STATUS CHANGE #
00997  M01S00985.exdrvr  +++|        OR MS$MSG[0] EQ HFC$CHSDRD)  # DRD STATUS CHANGE #
00998  M01S00986.exdrvr  +++|        AND MS$PARM1A[0] EQ ONLINE)
00999  M01S00987.exdrvr  +++|      THEN                           # RESERVE SM ARM #
01000  M01S00988.exdrvr  +++|        BEGIN  # SM #
01001  M01S00989.exdrvr  +++|        SM$ACCBUSY[LLR$SMO[0]] = TRUE;
01002  M01S00990.exdrvr  +++|        END  # SM #
01003  M01S00991.exdrvr  +++|
01004  M01S00992.exdrvr  +++|      IF MS$MSG[0] LS (HRF$ELGFUL + HRF$R)     # NOT ERROR LOG MSG #
01005  M01S00993.exdrvr  +++|        OR MS$MSG[0] GR (HRF$REQDMP + HRF$R)
01006  M01S00994.exdrvr  +++|      THEN                           # LLRQ SENT MESSAGE #
01007  M01S00995.exdrvr  +++|        BEGIN  # LLRQ #
01008  M01S00996.exdrvr  +++|        MBF$SENT[0] = TRUE;          # MESSAGE SENT TO PP #
01009  M01S00997.exdrvr  +++|        LLR$CIF[0] = FMR$CIF[0];
01010  M01S00998.exdrvr  +++|        END  # LLRQ #
01011  M01S00999.exdrvr  +++|
01012  M01S01000.exdrvr  +++|#
01013  M01S01001.exdrvr  +++|*     DO NOT INCREMENT MESSAGE COUNT IF NO M860 RESPONSE EXPECTED.
01014  M01S01002.exdrvr  +++|#
01015  M01S01003.exdrvr  +++|
01016  M01S01004.exdrvr  +++|      IF NOT MS$MSG$R[0]
01017  M01S01005.exdrvr  +++|      THEN                           # DRIVER-INITIATED MESSAGE #
01018  M01S01006.exdrvr  +++|        BEGIN  # ADD #
01019  M01S01007.exdrvr  +++|        MSGCNT(FMR$CIF[0],LLR$CU[0]) = MSGCNT(FMR$CIF[0],LLR$CU[0])
01020  M01S01008.exdrvr  +++|                                         + RESPCOUNT;
01021  M01S01009.exdrvr  +++|                                     # UPDATE CHANNEL MSG COUNT #
01022  M01S01010.exdrvr  +++|        END  # ADD #
01023  M01S01011.exdrvr  +++|
01024  M01S01012.exdrvr  +++|#
01025  M01S01013.exdrvr  +++|*     PRESET PP CALL BLOCK TABLE ENTRY, IF NO PP IS ACTIVE ON
01026  M01S01014.exdrvr  +++|*     THE CHOSEN CHANNEL.
01027  M01S01015.exdrvr  +++|#
01028  M01S01016.exdrvr  +++|
01029  M01S01017.exdrvr  +++|CALLPP1:
01030  M01S01018.exdrvr  +++|      IF B<FMR$CIF[0],1>UD$WBACT[CU] EQ OFF
01031  M01S01019.exdrvr  +++|      THEN                           # FREE CHANNEL #
01032  M01S01020.exdrvr  +++|        BEGIN  # CALL PP #
01033  M01S01021.exdrvr  +++|        PPCBENCNT = PPCBENCNT + 1;   # CREATE NEW ENTRY #
01034  M01S01022.exdrvr  +++|        B<FMR$CIF[0],1>UD$WBACT[CU] = ON;
01035  M01S01023.exdrvr  +++|        PPU$MBADDR[CALLINDEX] = P<FETMWB>;
01036  M01S01024.exdrvr  +++|        PPU$FC[CALLINDEX] = FCODE;
01037  M01S01025.exdrvr  +++|        PPU$ACTIVE[CALLINDEX] = TRUE;
01038  M01S01026.exdrvr  +++|        PPU$ESTORD[CALLINDEX] = UD$ESTO[CU];
01039  M01S01027.exdrvr  +++|        PPU$CNTORD[CALLINDEX] = CU;
01040  M01S01028.exdrvr  +++|        PPT$WORD0[0] = PPU$WORD0[CALLINDEX];  # PRESET FOR PP CALL #
01041  M01S01029.exdrvr  +++|        SPC$ADDR[0] = LOC(PPT$WORD0[0]);
01042  M01S01030.exdrvr  +++|        REPEAT WHILE PPT$WORD0[0] NQ 0
01043  M01S01031.exdrvr  +++|        DO                           # ISSUE PP CALL #
01044  M01S01032.exdrvr  +++|          BEGIN  # PP #
01045  M01S01033.exdrvr  +++|          SYSTEM(SPC,NRCL);
01046  M01S01034.exdrvr  +++|          END  # PP #
01047  M01S01035.exdrvr  +++|
01048  M01S01036.exdrvr  +++|        END  # CALL PP #
01049  M01S01037.exdrvr  +++|
01050  M01S01038.exdrvr  +++|      DRVRACTIVE = TRUE;
01051  M01S01039.exdrvr  +++|      RETURN;
01052  M01S01040.exdrvr  +++|
01053  M01S01041.exdrvr  +++|CALLPP2:
01054  M01S01042.exdrvr  +++|      MESSAGE(FEMSG,UDFL1);
01055  M01S01043.exdrvr  +++|      ABORT;
01056  M01S01044.exdrvr  +++|      END  # CALLPP #
01057  M01S01045.exdrvr  +++|
01058  M01S01046.exdrvr  +++|    TERM
01059  M01S01047.exdrvr  +++|PROC CRMSG;
01060  M01S01048.exdrvr  +++|# TITLE CRMSG - CREATE M860 MESSAGE.                                  #
01061  M01S01049.exdrvr  +++|
01062  M01S01050.exdrvr  +++|      BEGIN  # CRMSG #
01063  M01S01051.exdrvr  +++|
01064  M01S01052.exdrvr  +++|#
01065  M01S01053.exdrvr  +++|**    CRMSG - CREATE M860 MESSAGE.
01066  M01S01054.exdrvr  +++|*
01067  M01S01055.exdrvr  +++|*     *CRMSG* CREATES AN M860 MESSAGE WITHIN A UDT MESSAGE BUFFER.
01068  M01S01056.exdrvr  +++|*
01069  M01S01057.exdrvr  +++|*     PROC CRMSG
01070  M01S01058.exdrvr  +++|*
01071  M01S01059.exdrvr  +++|*     ENTRY      P<LLRQ> = *DRQUEUE* ENTRY ADDRESS.
01072  M01S01060.exdrvr  +++|*
01073  M01S01061.exdrvr  +++|*                P<UDT$MSG> = UDT MESSAGE BUFFER ADDRESS.
01074  M01S01062.exdrvr  +++|*
01075  M01S01063.exdrvr  +++|*                THE UDT MESSAGE BUFFER CONTAINS THE M860 FUNCTION
01076  M01S01064.exdrvr  +++|*                DEFINING THE MESSAGE TO BE CREATED.
01077  M01S01065.exdrvr  +++|*
01078  M01S01066.exdrvr  +++|*     EXIT       IF THE M860 FUNCTION WAS A PATH/DEVICE STATUS CHANGE
01079  M01S01067.exdrvr  +++|*                OR A *START ERROR LOG*, AND THE UDT HAS BEEN
01080  M01S01068.exdrvr  +++|*                COMPLETELY PROCESSED, THEN THE UDT MESSAGE BUFFER
01081  M01S01069.exdrvr  +++|*                ACTIVE FLAG IS LEFT CLEAR, AND NO MESSAGE IS CREATED.
01082  M01S01070.exdrvr  +++|*                OTHERWISE, AN M860 MESSAGE IS CREATED, AND THE ACTIVE
01083  M01S01071.exdrvr  +++|*                FLAG IS SET.
01084  M01S01072.exdrvr  +++|*
01085  M01S01073.exdrvr  +++|*     MESSAGES   *EXEC ABNORMAL, CRMSG1.* - UDT MESSAGE BUFFER STILL
01086  M01S01074.exdrvr  +++|*                                           IN USE, OR MESSAGE
01087  M01S01075.exdrvr  +++|*                                           SEQUENCE NUMBER IS CLEARED.
01088  M01S01076.exdrvr  +++|*
01089  M01S01077.exdrvr  +++|*                *EXEC ABNORMAL, CRMSG1A.* - MULTIPLE REQUESTS ARE
01090  M01S01078.exdrvr  +++|*                                            PROCESSING SERVICE CELLS
01091  M01S01079.exdrvr  +++|*                                            WHEN TURNING ON A DRD.
01092  M01S01080.exdrvr  +++|*
Line S01081 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01093  M02S01081.exdrvr2 ---|*                *EXEC ABNORMAL, CRMSG2.* - TWO ACKNOWLEDGE FLAGS WERE
Line S01082 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01094  M02S01082.exdrvr2 ---|*                                           SET DURING A PATH STATUS
Line S01083 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01095  M02S01083.exdrvr2 ---|*                                           CHANGE.
Line S01084 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01096  M02S01084.exdrvr2 ---|*
01097  M01S01085.exdrvr  +++|*                *EXEC ABNORMAL, CRMSG4.* - MULTIPLE REQUESTS ARE
01098  M01S01086.exdrvr  +++|*                                           PROCESSING SERVICE CELLS
01099  M01S01087.exdrvr  +++|*                                           WHEN TURNING ON AN SM.
01100  M01S01088.exdrvr  +++|*
01101  M01S01089.exdrvr  +++|*                *EXEC ABNORMAL, CRMSG5.* - INVALID SUBTYPE FOR A
01102  M01S01090.exdrvr  +++|*                                           *START ERROR LOG* FUNCTION.
01103  M01S01091.exdrvr  +++|*
01104  M01S01092.exdrvr  +++|*     NOTES      A UDT MESSAGE BUFFER IS NEVER CLEARED, EXCEPT WHEN
01105  M01S01093.exdrvr  +++|*                PREPARING TO CREATE ANOTHER MESSAGE IN IT.  THIS IS
01106  M01S01094.exdrvr  +++|*                DONE TO KEEP AN ACCURATE HISTORY FOR DEBUGGING
01107  M01S01095.exdrvr  +++|*                PURPOSES.
01108  M01S01096.exdrvr  +++|#
01109  M01S01097.exdrvr  +++|
01110  M01S01098.exdrvr  +++|
01111  M01S01099.exdrvr  +++|#
01112  M01S01100.exdrvr  +++|****  PROC CRMSG - XREF LIST BEGIN.
01113  M01S01101.exdrvr  +++|#
01114  M01S01102.exdrvr  +++|
01115  M01S01103.exdrvr  +++|      XREF
01116  M01S01104.exdrvr  +++|        BEGIN
01117  M01S01105.exdrvr  +++|        PROC ABORT;                  # ABORT #
01118  M01S01106.exdrvr  +++|        PROC GETCHAN;                # ALLOCATE CHANNEL #
01119  M01S01107.exdrvr  +++|        PROC MESSAGE;                # ISSUE DAYFILE MESSAGE #
01120  M01S01108.exdrvr  +++|        PROC PDATE;                  # GET PACKED DATE AND TIME #
01121  M01S01109.exdrvr  +++|        PROC ZFILL;                  # ZERO-FILL BUFFER #
01122  M01S01110.exdrvr  +++|        END
01123  M01S01111.exdrvr  +++|
01124  M01S01112.exdrvr  +++|#
01125  M01S01113.exdrvr  +++|****  PROC CRMSG - XREF LIST END.
01126  M01S01114.exdrvr  +++|#
01127  M01S01115.exdrvr  +++|
01128  M01S01116.exdrvr  +++|      DEF LISTCON    #0#;            # DO NOT LIST COMDECKS #
01129  M01S01117.exdrvr  +++|*CALL,COMBFAS
01130  M01S01118.exdrvr  +++|*CALL,COMBCDD
01131  M01S01119.exdrvr  +++|*CALL,COMBCPR
01132  M01S01120.exdrvr  +++|*CALL,COMBFET
01133  M01S01121.exdrvr  +++|*CALL,COMBHFC
01134  M01S01122.exdrvr  +++|*CALL,COMBLBL
01135  M01S01123.exdrvr  +++|*CALL,COMBLRQ
01136  M01S01124.exdrvr  +++|*CALL,COMBUDT
01137  M01S01125.exdrvr  +++|*CALL,COMXCTF
01138  M01S01126.exdrvr  +++|*CALL,COMXMSC
01139  M01S01127.exdrvr  +++|
01140  M01S01128.exdrvr  +++|#
01141  M01S01129.exdrvr  +++|*     DEFINITIONS TO CREATE *CHANGE STATUS* MESSAGES.
01142  M01S01130.exdrvr  +++|#
01143  M01S01131.exdrvr  +++|
01144  M01S01132.exdrvr  +++|      DEF CIFMASK    #X"0000"#;      # TURN OFF *CIF* ERROR LOGGING #
01145  M01S01133.exdrvr  +++|      DEF CONTDAV    #1#;            # CONTROLLER DEVICE ADDR VALUE #
01146  M01S01134.exdrvr  +++|      DEF DRDHNMASK  #X"8190"#;      # SET DRD/HANDLER ERROR LOGGING #
01147  M01S01135.exdrvr  +++|      DEF EOTBSC     #1#;            # EOT BUFFER STRIPE COUNT #
01148  M01S00005.exdrvr2 +++|      DEF FIELDSM1   #7#;            # COUNT OF 6-BIT FIELDS MINUS 1 #
01149  M01S01136.exdrvr  +++|
Line S01137 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01150  M02S01137.exdrvr2 ---|      ITEM DIAGACK    U;             # DIAGNOSTIC ACK BIT INDEX #
01151  M01S01138.exdrvr  +++|      ITEM DRDWORD    U;             # SAVED DRD STATUS WORD ADDRESS #
01152  M01S01139.exdrvr  +++|      ITEM FOUND      B;             # SET IF PATH/DEVICE FOUND #
01153  M01S01140.exdrvr  +++|      ITEM I          I;             # INDEX #
01154  M01S01141.exdrvr  +++|      ITEM J          I;             # INDEX #
Line S01142 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01155  M02S01142.exdrvr2 ---|      ITEM K          I;             # INDEX #
01156  M01S01143.exdrvr  +++|      ITEM MSGFTN     U;             # SAVED M860 FUNCTION #
01157  M01S01144.exdrvr  +++|      ITEM MSGSEQN    U;             # SAVED MSG SEQUENCE NUMBER #
01158  M01S01145.exdrvr  +++|      ITEM NEWPTHSTAT U;             # NEW PATH STATUS #
Line S01146 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01159  M02S01146.exdrvr2 ---|      ITEM ONACK      U;             # ON/OFF ACK BIT INDEX #
01160  M01S01147.exdrvr  +++|      ITEM START      U;             # 1ST LINE TO CHECK ACK BITS #
Line S01148 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01161  M02S01148.exdrvr2 ---|      ITEM STSP       U;             # SM/DRD STATUS FROM 1ST CU #
Line S01149 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01162  M02S01149.exdrvr2 ---|      ITEM STSS       U;             # SM/DRD STATUS FROM 2ND CU #
01163  M01S01150.exdrvr  +++|      ITEM TEMPCIF    U;             # SAVED *CIF* NUMBER #
01164  M01S01151.exdrvr  +++|      ITEM TEMPCSN0   U;             # FIRST 4 BYTES OF CSN #
01165  M01S01152.exdrvr  +++|      ITEM TEMPCSN1   U;             # NEXT 6 BYTES OF CSN #
01166  M01S01153.exdrvr  +++|      ITEM TEMPCSN2   U;             # LAST 2 BYTES OF CSN #
01167  M01S01154.exdrvr  +++|      ITEM TEMPDRD    U;             # SAVED *DRD* UNIT NUMBER #
01168  M01S01155.exdrvr  +++|
01169  M01S01156.exdrvr  +++|#
01170  M01S01157.exdrvr  +++|*     ARRAY USED TO CREATE *SET DATE/TIME* MESSAGES.
01171  M01S01158.exdrvr  +++|#
01172  M01S01159.exdrvr  +++|
01173  M01S01160.exdrvr  +++|      ARRAY DATETIME [0:0] S(1);     # PACKED DATE AND TIME #
01174  M01S01161.exdrvr  +++|        BEGIN
01175  M01S01162.exdrvr  +++|        ITEM DT$YEAR    U(00,24,06);  # YEAR MINUS 1970 #
01176  M01S01163.exdrvr  +++|        ITEM DT$MONTH   U(00,30,06);  # MONTH #
01177  M01S01164.exdrvr  +++|        ITEM DT$DAY     U(00,36,06);  # DAY #
01178  M01S01165.exdrvr  +++|        ITEM DT$HOUR    U(00,42,06);  # HOUR #
01179  M01S01166.exdrvr  +++|        ITEM DT$MINUTE  U(00,48,06);  # MINUTE #
01180  M01S01167.exdrvr  +++|        ITEM DT$SECOND  U(00,54,06);  # SECOND #
01181  M01S01168.exdrvr  +++|        END
01182  M01S01169.exdrvr  +++|
01183  M01S01170.exdrvr  +++|#
01184  M01S01171.exdrvr  +++|*     ARRAYS USED TO CREATE *CHANGE STATUS* MESSAGES.
01185  M01S01172.exdrvr  +++|#
01186  M01S01173.exdrvr  +++|
01187  M01S01174.exdrvr  +++|      ARRAY PTH [0:6] S(1);          # UDT PATH STRUCTURE #
01188  M01S01175.exdrvr  +++|        BEGIN
Line S01176 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01189  M02S01176.exdrvr2 ---|        ITEM PTH$ACK    U(00,00,06) = [7,,7,,3,7,7];
Line S01177 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01190  M02S01177.exdrvr2 ---|        ITEM PTH$LASTLN U(00,06,06) = [5,,7,,2,3,1];
Line S01178 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01191  M02S01178.exdrvr2 ---|        ITEM PTH$FRSTLN U(00,12,06) = [4,,6,,2,3,1];
01192  M01S00006.exdrvr2 +++|        ITEM PTH$LASTLN U(00,06,06) = [6,,10,,3,4,2];
01193  M01S00007.exdrvr2 +++|        ITEM PTH$FRSTLN U(00,12,06) = [5,,7,,3,4,1];
01194  M01S01179.exdrvr  +++|        END
01195  M01S01180.exdrvr  +++|
Line S01181 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01196  M02S01181.exdrvr2 ---|      ARRAY BNODE [2:5] S(1);        # BOTTOM PATH NODES #
01197  M01S00008.exdrvr2 +++|      ARRAY BNODE [3:6] S(1);        # BOTTOM PATH NODES #
01198  M01S01182.exdrvr  +++|        BEGIN
01199  M01S01183.exdrvr  +++|        ITEM NODE$B     U(00,00,60);  # PATH WORD #
01200  M01S01184.exdrvr  +++|        ITEM NODE$B0    U(00,00,06) = [0,0,1,1];
01201  M01S01185.exdrvr  +++|        ITEM NODE$B1    U(00,06,06) = [1,1,3,3];
Line S01186 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01202  M02S01186.exdrvr2 ---|        ITEM NODE$B2    U(00,12,06) = [0,0,0,0];
Line S01187 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01203  M02S01187.exdrvr2 ---|        ITEM NODE$B3    U(00,18,06) = [1,1,2,2];
Line S01188 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01204  M02S01188.exdrvr2 ---|        ITEM NODE$B4    U(00,24,06) = [,0,1,1];
Line S01189 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01205  M02S01189.exdrvr2 ---|        ITEM NODE$B5    U(00,30,06) = [,1,3,3];
Line S01190 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01206  M02S01190.exdrvr2 ---|        ITEM NODE$B6    U(00,36,06) = [,0,0,0];
Line S01191 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01207  M02S01191.exdrvr2 ---|        ITEM NODE$B7    U(00,42,06) = [,1,2,2];
01208  M01S00009.exdrvr2 +++|        ITEM NODE$B2    U(00,12,06) = [2,0,0,0];
01209  M01S00010.exdrvr2 +++|        ITEM NODE$B3    U(00,18,06) = [3,1,2,2];
01210  M01S00011.exdrvr2 +++|        ITEM NODE$B4    U(00,24,06) = [0,0,1,1];
01211  M01S00012.exdrvr2 +++|        ITEM NODE$B5    U(00,30,06) = [1,1,3,3];
01212  M01S00013.exdrvr2 +++|        ITEM NODE$B6    U(00,36,06) = [2,0,0,0];
01213  M01S00014.exdrvr2 +++|        ITEM NODE$B7    U(00,42,06) = [3,1,2,2];
01214  M01S01192.exdrvr  +++|        END
01215  M01S01193.exdrvr  +++|
Line S01194 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01216  M02S01194.exdrvr2 ---|      ARRAY TNODE [1:7] S(1);        # TOP PATH NODES #
01217  M01S00015.exdrvr2 +++|      ARRAY TNODE [1:10] S(1);        # TOP PATH NODES #
01218  M01S01195.exdrvr  +++|        BEGIN
01219  M01S01196.exdrvr  +++|        ITEM NODE$T     U(00,00,60);  # PATH WORD #
Line S01197 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01220  M02S01197.exdrvr2 ---|        ITEM NODE$T0    U(00,00,06) = [0,0,1,0,2,0,1];
Line S01198 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01221  M02S01198.exdrvr2 ---|        ITEM NODE$T1    U(00,06,06) = [0,0,1,0,2,0,1];
Line S01199 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01222  M02S01199.exdrvr2 ---|        ITEM NODE$T2    U(00,12,06) = [0,1,3,0,2,0,1];
Line S01200 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01223  M02S01200.exdrvr2 ---|        ITEM NODE$T3    U(00,18,06) = [0,1,3,0,2,0,1];
Line S01201 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01224  M02S01201.exdrvr2 ---|        ITEM NODE$T4    U(00,24,06) = [1,,0,1,3,0,1];
Line S01202 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01225  M02S01202.exdrvr2 ---|        ITEM NODE$T5    U(00,30,06) = [1,,0,1,3,0,1];
Line S01203 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01226  M02S01203.exdrvr2 ---|        ITEM NODE$T6    U(00,36,06) = [1,,2,1,3,0,1];
Line S01204 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01227  M02S01204.exdrvr2 ---|        ITEM NODE$T7    U(00,42,06) = [1,,2,1,3,0,1];
01228  M01S00016.exdrvr2 +++|        ITEM NODE$T0    U(00,00,06) = [0,1,0,1,0,2,0,1,2,3];
01229  M01S00017.exdrvr2 +++|        ITEM NODE$T1    U(00,06,06) = [0,1,0,1,0,2,0,1,2,3];
01230  M01S00018.exdrvr2 +++|        ITEM NODE$T2    U(00,12,06) = [0,1,0,3,0,2,0,1,2,3];
01231  M01S00019.exdrvr2 +++|        ITEM NODE$T3    U(00,18,06) = [0,1,0,3,0,2,0,1,2,3];
01232  M01S00020.exdrvr2 +++|        ITEM NODE$T4    U(00,24,06) = [0,1,1,0,1,3,0,1,2,3];
01233  M01S00021.exdrvr2 +++|        ITEM NODE$T5    U(00,30,06) = [0,1,1,0,1,3,0,1,2,3];
01234  M01S00022.exdrvr2 +++|        ITEM NODE$T6    U(00,36,06) = [0,1,1,2,1,3,0,1,2,3];
01235  M01S00023.exdrvr2 +++|        ITEM NODE$T7    U(00,42,06) = [0,1,1,2,1,3,0,1,2,3];
01236  M01S01205.exdrvr  +++|        END
01237  M01S01206.exdrvr  +++|
01238  M01S01207.exdrvr  +++|      SWITCH M860FUNCTN              # M860 FUNCTION CODES #
01239  M01S01208.exdrvr  +++|        ,                            # RESERVED #
01240  M01S01209.exdrvr  +++|        ACQUIRECRT,                  # ACQUIRE CARTRIDGE #
01241  M01S01210.exdrvr  +++|        STORECRT,                    # STORE CARTRIDGE #
Line S01211 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01242  M02S01211.exdrvr2 ---|        READCSN,                     # READ CSN #
01243  M01S00024.exdrvr2 +++|        ,                            # RESERVED #
01244  M01S01212.exdrvr  +++|        READCRTLBL,                  # READ CARTRIDGE LABEL #
01245  M01S01213.exdrvr  +++|        WRTLBLCRT,                   # WRITE CARTRIDGE LABEL #
01246  M01S01214.exdrvr  +++|        MNTVOLUME,                   # MOUNT VOLUME #
01247  M01S01215.exdrvr  +++|        WRTLBLVOL,                   # WRITE VOLUME LABEL #
01248  M01S01216.exdrvr  +++|        ENTERCRT,                    # ENTER CARTRIDGE #
Line S01217 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01249  M02S01217.exdrvr2 ---|        EJECTCRT,                    # EJECT CARTRIDGE #
Line S01218 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01250  M02S01218.exdrvr2 ---|        REQSTAT,                     # REQUEST STATUS #
01251  M01S00025.exdrvr2 +++|        ,                            # RESERVED #
01252  M01S00026.exdrvr2 +++|        ,                            # RESERVED #
01253  M01S01219.exdrvr  +++|        CHANGEPATH,                  # CHANGE PATH STATUS #
01254  M01S01220.exdrvr  +++|        DUMPBUFLOG,                  # DUMP BUFFERED LOG #
Line S01221 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01255  M02S01221.exdrvr2 ---|        DUMPMEMORY,                  # DUMP MEMORY #
01256  M01S00027.exdrvr2 +++|        ,                            # RESERVED #
01257  M01S01222.exdrvr  +++|        SETDATTIME,                  # SET DATE/TIME #
Line S01223 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01258  M02S01223.exdrvr2 ---|        READDATTIM,                  # READ DATE/TIME #
01259  M01S00028.exdrvr2 +++|        ,                            # RESERVED #
01260  M01S01224.exdrvr  +++|        SETMASCHAN,                  # SET MASTER CHANNEL #
01261  M01S01225.exdrvr  +++|        RDRAWSTRP,                   # READ RAW STRIPE #
01262  M01S01226.exdrvr  +++|        ,                            # RESERVED #
01263  M01S01227.exdrvr  +++|        STERRLOG,                    # START/STOP ERROR LOG #
Line S01228 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01264  M02S01228.exdrvr2 ---|        RDERRLOG,                    # READ ERROR LOG #
Line S01229 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01265  M02S01229.exdrvr2 ---|        WRTERRLOG,                   # WRITE TO ERROR LOG #
01266  M01S00029.exdrvr2 +++|        ,                            # RESERVED #
01267  M01S00030.exdrvr2 +++|        ,                            # RESERVED #
01268  M01S01230.exdrvr  +++|        SETERRLEN,                   # SET ERROR LOG LENGTH #
Line S01231 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01269  M02S01231.exdrvr2 ---|        COPYVOLUME,                  # COPY VOLUME #
01270  M01S00031.exdrvr2 +++|        ,                            # RESERVED #
01271  M01S01232.exdrvr  +++|        ,                            # RESERVED #
01272  M01S01233.exdrvr  +++|        ,                            # RESERVED #
01273  M01S01234.exdrvr  +++|        ,                            # RESERVED #
Line S01235 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01274  M02S01235.exdrvr2 ---|        SMTRESTART,                  # HOST RESTART #
01275  M01S00032.exdrvr2 +++|        ,                            # RESERVED #
01276  M01S01236.exdrvr  +++|        RESTARTCU;                   # RESTART CONTROLLER #
01277  M01S01237.exdrvr  +++|                                               CONTROL EJECT;
Line S00033 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr4
Seq #  *Modification Id* Act 
----------------------------+
01278  M02S00033.exdrvr4 ---|                                               CONTROL INERT;
01279  M01S01238.exdrvr  +++|
01280  M01S01239.exdrvr  +++|      IF MBF$SBADDR[0] NQ 0          ##
01281  M01S01240.exdrvr  +++|        OR MS$MSQN[0] EQ 0
01282  M01S01241.exdrvr  +++|      THEN                           # MESSAGE ERROR #
01283  M01S01242.exdrvr  +++|        BEGIN  # ABORT #
01284  M01S01243.exdrvr  +++|        FE$RTN[0] = "CRMSG1.";
01285  M01S01244.exdrvr  +++|        MESSAGE(FEMSG,UDFL1);
01286  M01S01245.exdrvr  +++|        ABORT;
01287  M01S01246.exdrvr  +++|        END  # ABORT #
01288  M01S01247.exdrvr  +++|
01289  M01S01248.exdrvr  +++|      IF MS$MSG[0] NQ HFC$CHSSMA     # HANDLED LATER #
01290  M01S01249.exdrvr  +++|        AND MS$MSG[0] NQ HFC$CHSDRD
01291  M01S01250.exdrvr  +++|      THEN                           # INDICATE DRIVER ACTIVITY #
01292  M01S01251.exdrvr  +++|        BEGIN  # ACTIVE #
01293  M01S01252.exdrvr  +++|        DRVRACTIVE = TRUE;
01294  M01S01253.exdrvr  +++|        END  # ACTIVE #
01295  M01S01254.exdrvr  +++|
01296  M01S01255.exdrvr  +++|      IF MBF$SAVE[0] NQ SAVENONE
01297  M01S01256.exdrvr  +++|      THEN                           # PRESERVE PART OF MSG BUFFER #
01298  M01S01257.exdrvr  +++|        BEGIN  # PRESET NORMALLY #
01299  M01S01258.exdrvr  +++|        MBF$ACTIVE[0] = TRUE;        # MESSAGE BUFFER NOW ACTIVE #
01300  M01S01259.exdrvr  +++|        MSGSEQN = MS$MSQN[0];        # SAVE MSG SEQUENCE NUMBER #
01301  M01S01260.exdrvr  +++|        MSGFTN = MS$MSG[0];          # SAVE M860 FUNCTION #
01302  M01S01261.exdrvr  +++|        IF MBF$SAVE[0] EQ SAVEMOST
01303  M01S01262.exdrvr  +++|        THEN                         # SAVE CSN AND DRD #
01304  M01S01263.exdrvr  +++|          BEGIN  # SAVE #
01305  M01S01264.exdrvr  +++|          TEMPCSN0 = MS$CART0[0];
01306  M01S01265.exdrvr  +++|          TEMPCSN1 = MS$CART1[0];
01307  M01S01266.exdrvr  +++|          TEMPCSN2 = MS$CART2[0];
01308  M01S01267.exdrvr  +++|          TEMPDRD = MS$DRDN[0];
01309  M01S01268.exdrvr  +++|          END  # SAVE #
01310  M01S01269.exdrvr  +++|
01311  M01S01270.exdrvr  +++|        ZFILL(UDT$MSG,MSGLT);        # CLEAR MESSAGE BUFFER #
01312  M01S01271.exdrvr  +++|        MS$MSG[0] = MSGFTN;
01313  M01S01272.exdrvr  +++|        MS$MSQN[0] = MSGSEQN;
01314  M01S01273.exdrvr  +++|        IF MBF$SAVE[0] EQ SAVEMOST
01315  M01S01274.exdrvr  +++|        THEN                         # RESTORE CSN AND DRD #
01316  M01S01275.exdrvr  +++|          BEGIN  # RESTORE #
01317  M01S01276.exdrvr  +++|          MS$CART0[0] = TEMPCSN0;
01318  M01S01277.exdrvr  +++|          MS$CART1[0] = TEMPCSN1;
01319  M01S01278.exdrvr  +++|          MS$CART2[0] = TEMPCSN2;
01320  M01S01279.exdrvr  +++|          MS$DRDN[0] = TEMPDRD;
01321  M01S01280.exdrvr  +++|          END  # RESTORE #
01322  M01S01281.exdrvr  +++|
01323  M01S01282.exdrvr  +++|        END  # PRESET NORMALLY #
01324  M01S01283.exdrvr  +++|
01325  M01S01284.exdrvr  +++|      GOTO M860FUNCTN[MS$MSG$M[0]];
01326  M01S01285.exdrvr  +++|
01327  M01S01286.exdrvr  +++|#
01328  M01S01287.exdrvr  +++|*     CREATE *LOAD CARTRIDGE* MESSAGE.
01329  M01S01288.exdrvr  +++|#
01330  M01S01289.exdrvr  +++|
01331  M01S01290.exdrvr  +++|ACQUIRECRT:
01332  M01S01291.exdrvr  +++|      MS$YADD[0] = LLR$Y[0];         # SET COORDINATES #
01333  M01S01292.exdrvr  +++|      MS$ZADD[0] = LLR$Z[0];
Line S01293 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01334  M02S01293.msea023 ---|
Line S01294 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01335  M02S01294.msea023 ---|#
Line S01295 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01336  M02S01295.msea023 ---|*     M860 MICROCODE REQUIRES NON-ZERO CSN ON ALL LOADS.
Line S01296 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01337  M02S01296.msea023 ---|#
Line S01297 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01338  M02S01297.msea023 ---|
01339  M01S01298.exdrvr  +++|      MS$CART0[0] = O"31160552100";  # ** *IBM * EBCDIC #
Line S01299 Modification History
M01 (Added by) exdrvr
M02 (Updated by) msea023
Seq #  *Modification Id* Act 
----------------------------+
01340  M02S01299.msea023 ---|      MS$CART2[0] = MS$MSQN[0];      # ** ADD GARBAGE CSN #
01341  M01S00003.msea023 +++|      SLOWFOR I = 0 STEP 1 UNTIL FIELDSM1
01342  M01S00004.msea023 +++|      DO                             # CONVERT CSN TO EBCDIC #
01343  M01S00005.msea023 +++|        BEGIN  # CONVERT #
01344  M01S00006.msea023 +++|        IF I LQ 5                    ##
01345  M01S00007.msea023 +++|        THEN                         # BYTES 1 THRU 6 #
01346  M01S00008.msea023 +++|          BEGIN  # I LQ 5 #
01347  M01S00009.msea023 +++|          B<I*8,8>MS$CART1[0] = X"F0" LOR B<I*6,6>LLR$CSND[0] - O"33";
01348  M01S00010.msea023 +++|          END  # I LQ 5 #
01349  M01S00011.msea023 +++|
01350  M01S00012.msea023 +++|        ELSE                         # BYTES 7 AND 8 #
01351  M01S00013.msea023 +++|          BEGIN  # I GR 5 #
01352  M01S00014.msea023 +++|          B<(I-6)*8,8>MS$CART2[0] = X"F0" LOR
01353  M01S00015.msea023 +++|                                    B<I*6,6>LLR$CSND[0] - O"33";
01354  M01S00016.msea023 +++|          END  # I GR 5 #
01355  M01S00017.msea023 +++|
01356  M01S00018.msea023 +++|        END  # CONVERT #
01357  M01S00019.msea023 +++|
01358  M01S01300.exdrvr  +++|      GOTO ENTERCRT;                 # SET DRD AND LOCATION #
01359  M01S01301.exdrvr  +++|      RETURN;
01360  M01S01302.exdrvr  +++|
01361  M01S01303.exdrvr  +++|#
01362  M01S01304.exdrvr  +++|*     CREATE *CHANGE DRD STATUS* MESSAGE.
01363  M01S01305.exdrvr  +++|#
01364  M01S01306.exdrvr  +++|
01365  M01S01307.exdrvr  +++|CHANGEDRD:
01366  M01S01308.exdrvr  +++|      FOUND = FALSE;
01367  M01S01309.exdrvr  +++|      UD$DRDWAIT[LLR$CU[0]] = FALSE; # ASSUME CHANGING DRD-S EMPTY #
01368  M01S01310.exdrvr  +++|      SLOWFOR I = 0 STEP 1 WHILE I LQ MAX$DRD AND NOT FOUND
01369  M01S01311.exdrvr  +++|      DO                             # SEARCH FOR DRD CHANGING STATUS #
01370  M01S01312.exdrvr  +++|        BEGIN  # SEARCH #
01371  M01S01313.exdrvr  +++|        SMO = B<I*6,6>UD$SMORDS[LLR$CU[0]];
01372  M01S01314.exdrvr  +++|        IF SMO EQ 0                  ##
01373  M01S01315.exdrvr  +++|          OR NOT SM$EXIST[SMO]
01374  M01S01316.exdrvr  +++|        THEN                         # SM NOT FOUND #
01375  M01S01317.exdrvr  +++|          BEGIN  # RETRY #
01376  M01S01318.exdrvr  +++|          TEST I;
01377  M01S01319.exdrvr  +++|          END  # RETRY #
01378  M01S01320.exdrvr  +++|
01379  M01S01321.exdrvr  +++|        DRST = DRST1;                # ASSUME 2ND CU #
01380  M01S01322.exdrvr  +++|        IF LLR$CU[0] EQ SM$CUO0[SMO]
01381  M01S01323.exdrvr  +++|        THEN                         # 1ST CU CHANGING DRD STATUS #
01382  M01S01324.exdrvr  +++|          BEGIN  # RESET #
01383  M01S01325.exdrvr  +++|          DRST = DRST0;
01384  M01S01326.exdrvr  +++|          END  # RESET #
01385  M01S01327.exdrvr  +++|
01386  M01S01328.exdrvr  +++|        DRDWORD = LOC(D1$ST[SMO]);   # CHECK LOWER DRD FIRST #
01387  M01S01329.exdrvr  +++|        SLOWFOR J = 1 STEP 1 WHILE J LQ MAX$SMDRD AND NOT FOUND
01388  M01S01330.exdrvr  +++|        DO                           # CHECK BOTH DRD-S OF ELIGIBLE SM #
01389  M01S01331.exdrvr  +++|          BEGIN  # DRD-S #
01390  M01S01332.exdrvr  +++|          P<PTHSTAT> = DRDWORD;      # CHECK NEXT DRD #
01391  M01S01333.exdrvr  +++|          IF PATHBIT(DRST,PATH$DF"U$EXISTS") EQ ON  ##
01392  M01S01334.exdrvr  +++|            AND PATHBIT(DRST,PATH$DF"U$DONE") EQ OFF  # NOT CHECKED #
01393  M01S01335.exdrvr  +++|            AND (UD$CNUP[LLR$CU[0]]  # IGNORE ACK BITS IF SET #
01394  M01S01336.exdrvr  +++|            OR PATHBIT(DRST,PATH$DF"U$CU$ACK") EQ ON  # ON/OFF STATUS #
01395  M01S01337.exdrvr  +++|            OR PATHBIT(DRST,PATH$DF"U$DIAG$ACK") EQ ON)  # DIAG STATUS #
01396  M01S01338.exdrvr  +++|          THEN                       # DRD CHANGING STATUS #
01397  M01S01339.exdrvr  +++|            BEGIN  # CHANGING #
01398  M01S01340.exdrvr  +++|            IF (P<PTHSTAT> EQ LOC(D0$ST[SMO]) AND D0$FULL[SMO]  ##
01399  M01S01341.exdrvr  +++|              AND P<LLRQ> NQ D0$LLADR[SMO])  # OTHER DRD COULD GO OFF #
01400  M01S01342.exdrvr  +++|              OR (P<PTHSTAT> EQ LOC(D1$ST[SMO]) AND D1$FULL[SMO]  ##
01401  M01S01343.exdrvr  +++|              AND P<LLRQ> NQ D1$LLADR[SMO])
01402  M01S01344.exdrvr  +++|            THEN                     # CHOSEN DRD STILL FULL #
01403  M01S01345.exdrvr  +++|              BEGIN  # SKIP #
01404  M01S01346.exdrvr  +++|              UD$DRDWAIT[LLR$CU[0]] = TRUE;  # HAVE LLRQ RETRY #
01405  M01S01347.exdrvr  +++|              DRDWORD = LOC(D0$ST[SMO]);  # IN CASE AT DRD 1 #
01406  M01S01348.exdrvr  +++|              TEST J;
01407  M01S01349.exdrvr  +++|              END  # SKIP #
01408  M01S01350.exdrvr  +++|
01409  M01S01351.exdrvr  +++|            PATHBIT(DRST,PATH$DF"U$DONE") = ON;
01410  M01S01352.exdrvr  +++|            IF P<PTHSTAT> EQ LOC(D0$ST[SMO])
01411  M01S01353.exdrvr  +++|            THEN                     # UPPER DRD PROCESSED #
01412  M01S01354.exdrvr  +++|              BEGIN  # DRD 0 #
01413  M01S01355.exdrvr  +++|              D0$DONE[SMO] = TRUE;
01414  M01S01356.exdrvr  +++|              END  # DRD 0 #
01415  M01S01357.exdrvr  +++|
01416  M01S01358.exdrvr  +++|            ELSE                     # LOWER DRD PROCESSED #
01417  M01S01359.exdrvr  +++|              BEGIN  # DRD 1 #
01418  M01S01360.exdrvr  +++|              D1$DONE[SMO] = TRUE;
01419  M01S01361.exdrvr  +++|              END  # DRD 1 #
01420  M01S01362.exdrvr  +++|
01421  M01S01363.exdrvr  +++|            FOUND = TRUE;
01422  M01S01364.exdrvr  +++|            TEST J;
01423  M01S01365.exdrvr  +++|            END  # CHANGING #
01424  M01S01366.exdrvr  +++|
01425  M01S01367.exdrvr  +++|          DRDWORD = LOC(D0$ST[SMO]); # CHECK UPPER DRD NEXT #
01426  M01S01368.exdrvr  +++|          END  # DRD-S #
01427  M01S01369.exdrvr  +++|
01428  M01S01370.exdrvr  +++|        END  # SEARCH #
01429  M01S01371.exdrvr  +++|
01430  M01S01372.exdrvr  +++|      IF NOT FOUND
01431  M01S01373.exdrvr  +++|      THEN                           # NO DRD LEFT TO PROCESS #
01432  M01S01374.exdrvr  +++|        BEGIN  # EXIT #
01433  M01S01375.exdrvr  +++|        IF UD$DRDWAIT[LLR$CU[0]]
01434  M01S01376.exdrvr  +++|        THEN                         # STILL WAITING FOR DRD TO EMPTY #
01435  M01S01377.exdrvr  +++|          BEGIN  # WAIT #
01436  M01S01378.exdrvr  +++|          RETURN;
01437  M01S01379.exdrvr  +++|          END  # WAIT #
01438  M01S01380.exdrvr  +++|
01439  M01S01381.exdrvr  +++|        DRVRACTIVE = TRUE;           # SO DRD ERROR SENDS K-DISPLAY #
01440  M01S01382.exdrvr  +++|        SLOWFOR I = 0 STEP 1 UNTIL MAX$DRD
01441  M01S01383.exdrvr  +++|        DO                           # CLEAR DRD DONE FLAGS #
01442  M01S01384.exdrvr  +++|          BEGIN  # CLEAR #
01443  M01S01385.exdrvr  +++|          SMO = B<I*6,6>UD$SMORDS[LLR$CU[0]];
01444  M01S01386.exdrvr  +++|          IF SMO EQ 0                ##
01445  M01S01387.exdrvr  +++|            OR NOT SM$EXIST[SMO]     # NO SM #
01446  M01S01388.exdrvr  +++|          THEN                       # TRY NEXT ORDINAL #
01447  M01S01389.exdrvr  +++|            BEGIN  # NEXT #
01448  M01S01390.exdrvr  +++|            TEST I;
01449  M01S01391.exdrvr  +++|            END  # NEXT #
01450  M01S01392.exdrvr  +++|
01451  M01S01393.exdrvr  +++|          DRST = DRST1;              # ASSUME 2ND CU #
01452  M01S01394.exdrvr  +++|          IF LLR$CU[0] EQ SM$CUO0[SMO]
01453  M01S01395.exdrvr  +++|          THEN                       # 1ST CU PROCESSED DRD #
01454  M01S01396.exdrvr  +++|            BEGIN  # RESET #
01455  M01S01397.exdrvr  +++|            DRST = DRST0;
01456  M01S01398.exdrvr  +++|            END  # RESET #
01457  M01S01399.exdrvr  +++|
01458  M01S01400.exdrvr  +++|          P<PTHSTAT> = LOC(D0$ST[SMO]);  # CLEAR DRD 0 FLAG #
01459  M01S01401.exdrvr  +++|          PATHBIT(DRST,PATH$DF"U$DONE") = OFF;
01460  M01S00001.exdrvr3 +++|          GOTO CRMSGA;
01461  M01S00002.exdrvr3 +++|
01462  M01S00003.exdrvr3 +++|CRMSGA:##
01463  M01S00004.exdrvr3 +++|          D0$FLAG[SMO] = B<12,6>D0$WD0[SMO] LOR B<18,6>D0$WD0[SMO];
01464  M01S00005.exdrvr3 +++|          GOTO CRMSGB;
01465  M01S00006.exdrvr3 +++|
01466  M01S00007.exdrvr3 +++|CRMSGB:##
Line S01402 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01467  M02S01402.exdrvr2 ---|          IF DRST NQ 0
Line S01403 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01468  M02S01403.exdrvr2 ---|          THEN                       # RESET FOR *SSALTER* #
Line S01404 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01469  M02S01404.exdrvr2 ---|            BEGIN  # FIX #
Line S01405 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01470  M02S01405.exdrvr2 ---|            STSP = D0$STSP[SMO];
Line S01406 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01471  M02S01406.exdrvr2 ---|            STSS = D0$STSS[SMO];
Line S01407 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01472  M02S01407.exdrvr2 ---|            D0$FLAG[SMO] = STSP LOR STSS;
Line S01408 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01473  M02S01408.exdrvr2 ---|            END  # FIX #
Line S01409 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01474  M02S01409.exdrvr2 ---|
01475  M01S01410.exdrvr  +++|          P<PTHSTAT> = LOC(D1$ST[SMO]);  # CLEAR DRD 1 FLAG #
01476  M01S01411.exdrvr  +++|          PATHBIT(DRST,PATH$DF"U$DONE") = OFF;
Line S01412 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01477  M02S01412.exdrvr2 ---|          IF DRST NQ 0
Line S01413 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01478  M02S01413.exdrvr2 ---|          THEN                       # RESET FOR *SSALTER* #
Line S01414 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01479  M02S01414.exdrvr2 ---|            BEGIN  # FIX #
Line S01415 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01480  M02S01415.exdrvr2 ---|            STSP = D1$STSP[SMO];
Line S01416 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01481  M02S01416.exdrvr2 ---|            STSS = D1$STSS[SMO];
Line S01417 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01482  M02S01417.exdrvr2 ---|            D1$FLAG[SMO] = STSP LOR STSS;
Line S01418 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01483  M02S01418.exdrvr2 ---|            END  # FIX #
Line S01419 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01484  M02S01419.exdrvr2 ---|
Line S00034 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01485  M02S00034.exdrvr3 ---|
Line S00035 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01486  M02S00035.exdrvr3 ---|                                               CONTROL REACTIVE;
Line S00036 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01487  M02S00036.exdrvr3 ---|
Line S00037 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01488  M02S00037.exdrvr3 ---|          D0$FLAG[SMO] = D0$STSP[SMO] LOR D0$STSS[SMO];
Line S00038 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01489  M02S00038.exdrvr3 ---|          D1$FLAG[SMO] = D1$STSP[SMO] LOR D1$STSS[SMO];
Line S00039 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01490  M02S00039.exdrvr3 ---|
Line S00040 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01491  M02S00040.exdrvr3 ---|                                               CONTROL INERT;
Line S00041 Modification History
M01 (Added by) exdrvr2
M02 (Updated by) exdrvr3
Seq #  *Modification Id* Act 
----------------------------+
01492  M02S00041.exdrvr3 ---|
01493  M01S00008.exdrvr3 +++|          GOTO CRMSGC;
01494  M01S00009.exdrvr3 +++|
01495  M01S00010.exdrvr3 +++|CRMSGC:##
01496  M01S00011.exdrvr3 +++|          D1$FLAG[SMO] = B<12,6>D1$WD0[SMO] LOR B<18,6>D1$WD0[SMO];
01497  M01S01420.exdrvr  +++|          END  # CLEAR #
01498  M01S01421.exdrvr  +++|
01499  M01S01422.exdrvr  +++|        RETURN;
01500  M01S01423.exdrvr  +++|        END  # EXIT #
01501  M01S01424.exdrvr  +++|
01502  M01S01425.exdrvr  +++|      DRVRACTIVE = TRUE;             # INDICATE DRIVER ACTIVITY #
01503  M01S01426.exdrvr  +++|      UD$LLRQA[LLR$CU[0]] = P<LLRQ>; # STORE LLRQ ADDRESS #
01504  M01S01427.exdrvr  +++|      MBF$ACTIVE[0] = TRUE;
01505  M01S01428.exdrvr  +++|      MSGSEQN = MS$MSQN$CN[0];       # PRESET MESSAGE BUFFER #
01506  M01S01429.exdrvr  +++|      MSGFTN = MS$MSG[0];
01507  M01S01430.exdrvr  +++|      ZFILL(UDT$MSG,MSGLT);
01508  M01S01431.exdrvr  +++|      MS$MSQN$CN[0] = MSGSEQN;
01509  M01S01432.exdrvr  +++|      MS$MSG[0] = MSGFTN;
01510  M01S01433.exdrvr  +++|      MS$DRDN[0] = D1$SUN[SMO];      # ASSUME LOWER DRD #
01511  M01S01434.exdrvr  +++|      LLR$DRD[0] = 1;
01512  M01S01435.exdrvr  +++|      IF P<PTHSTAT> EQ LOC(D0$ST[SMO])
01513  M01S01436.exdrvr  +++|      THEN                           # UPPER DRD BEING CHANGED #
01514  M01S01437.exdrvr  +++|        BEGIN  # RESET #
01515  M01S01438.exdrvr  +++|        MS$DRDN[0] = D0$SUN[SMO];
01516  M01S01439.exdrvr  +++|        LLR$DRD[0] = 0;
01517  M01S01440.exdrvr  +++|        END  # RESET #
01518  M01S01441.exdrvr  +++|
01519  M01S01442.exdrvr  +++|      IF PATHBIT(DRST,PATH$DF"U$ON") EQ 1  ##
01520  M01S01443.exdrvr  +++|        AND (UD$CNUP[LLR$CU[0]]      ##
01521  M01S01444.exdrvr  +++|        OR PATHBIT(DRST,PATH$DF"U$CU$ACK") EQ 1)
01522  M01S01445.exdrvr  +++|      THEN                           # DRD GOING ONLINE #
01523  M01S01446.exdrvr  +++|        BEGIN  # ON #
01524  M01S01447.exdrvr  +++|        PATHBIT(DRST,PATH$DF"U$CU$ACK") = 1;  # IN CASE CU RESTARTING #
01525  M01S01448.exdrvr  +++|        MS$PARM1A[0] = ONLINE;
01526  M01S01449.exdrvr  +++|        IF SM$SCCU[SMO]
01527  M01S01450.exdrvr  +++|        THEN                         # 2 REQUESTS CHECKING SRV CELLS #
01528  M01S01451.exdrvr  +++|          BEGIN  # ABORT #
01529  M01S01452.exdrvr  +++|          FE$RTN[0] = "CRMSG1A.";
01530  M01S01453.exdrvr  +++|          MESSAGE(FEMSG,UDFL1);
01531  M01S01454.exdrvr  +++|          ABORT;
01532  M01S01455.exdrvr  +++|          END  # ABORT #
01533  M01S01456.exdrvr  +++|
01534  M01S01457.exdrvr  +++|        SM$SCCU[SMO] = TRUE;         # CHECK SERVICE CELLS #
01535  M01S01458.exdrvr  +++|        END  # ON #
01536  M01S01459.exdrvr  +++|
01537  M01S01460.exdrvr  +++|      IF PATHBIT(DRST,PATH$DF"U$ON") EQ OFF  ##
01538  M01S01461.exdrvr  +++|        AND PATHBIT(DRST,PATH$DF"U$RQ$DIAG") EQ OFF
01539  M01S01462.exdrvr  +++|      THEN                           # DRD GOING OFFLINE #
01540  M01S01463.exdrvr  +++|        BEGIN  # OFF #
01541  M01S01464.exdrvr  +++|        MS$PARM1A[0] = OFFLINE;
01542  M01S01465.exdrvr  +++|        END  # OFF #
01543  M01S01466.exdrvr  +++|
01544  M01S01467.exdrvr  +++|      IF PATHBIT(DRST,PATH$DF"U$RQ$DIAG") EQ 1  ##
01545  M01S01468.exdrvr  +++|        AND (UD$CNUP[LLR$CU[0]]      ##
01546  M01S01469.exdrvr  +++|        OR PATHBIT(DRST,PATH$DF"U$DIAG$ACK") EQ 1)
01547  M01S01470.exdrvr  +++|      THEN                           # DRD GOING INTO DIAGNOSTIC MODE #
01548  M01S01471.exdrvr  +++|        BEGIN  # DIAG #
01549  M01S01472.exdrvr  +++|        MS$PARM1A[0] = DIAGNOSTIC;
01550  M01S01473.exdrvr  +++|        END  # DIAG #
01551  M01S01474.exdrvr  +++|
01552  M01S01475.exdrvr  +++|      LLR$SMO[0] = SMO;              # SAVE SM ORDINAL #
01553  M01S01476.exdrvr  +++|      RETURN;
01554  M01S01477.exdrvr  +++|
01555  M01S01478.exdrvr  +++|#
01556  M01S01479.exdrvr  +++|*     CREATE *CHANGE PATH STATUS* MESSAGE.
01557  M01S01480.exdrvr  +++|#
01558  M01S01481.exdrvr  +++|
01559  M01S01482.exdrvr  +++|CHANGEPATH:
01560  M01S01483.exdrvr  +++|      IF MS$MSG[0] EQ HFC$CHSSMA
01561  M01S01484.exdrvr  +++|      THEN                           # CHANGE SM STATUS #
01562  M01S01485.exdrvr  +++|        BEGIN  # SM #
01563  M01S01486.exdrvr  +++|        GOTO CHANGESM;
01564  M01S01487.exdrvr  +++|        END  # SM #
01565  M01S01488.exdrvr  +++|
01566  M01S01489.exdrvr  +++|      IF MS$MSG[0] EQ HFC$CHSDRD
01567  M01S01490.exdrvr  +++|      THEN                           # CHANGE DRD STATUS #
01568  M01S01491.exdrvr  +++|        BEGIN  # DRD #
01569  M01S01492.exdrvr  +++|        GOTO CHANGEDRD;
01570  M01S01493.exdrvr  +++|        END  # DRD #
01571  M01S01494.exdrvr  +++|
01572  M01S01495.exdrvr  +++|      ACKLINE = 0;                   # PRESET ACK BIT LOCATION IN UDT #
01573  M01S01496.exdrvr  +++|      ACKINDEX = 0;
Line S01497 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01574  M02S01497.exdrvr2 ---|      ONACK = 0;
Line S01498 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01575  M02S01498.exdrvr2 ---|      DIAGACK = 0;
01576  M01S01499.exdrvr  +++|      START = PTH$FRSTLN[MS$MSG$S[0]];  # PRESET FIRST LINE OF SEARCH #
01577  M01S01500.exdrvr  +++|      FOUND = FALSE;
01578  M01S01501.exdrvr  +++|
01579  M01S01502.exdrvr  +++|#
01580  M01S01503.exdrvr  +++|*     SEARCH FOR ACKNOWLEDGE BITS SET FOR THE DESIRED PATH.
01581  M01S01504.exdrvr  +++|#
01582  M01S01505.exdrvr  +++|
01583  M01S01506.exdrvr  +++|      SLOWFOR I = START STEP 1 UNTIL PTH$LASTLN[MS$MSG$S[0]]
01584  M01S01507.exdrvr  +++|      DO                             # SCAN UDT PATH WORDS #
01585  M01S01508.exdrvr  +++|        BEGIN  # SCAN WORDS #
01586  M01S01509.exdrvr  +++|        IF NOT FOUND
01587  M01S01510.exdrvr  +++|        THEN                         # CONTINUE WORD SCAN #
01588  M01S01511.exdrvr  +++|          BEGIN  # CHECK WORD #
01589  M01S01512.exdrvr  +++|          P<PTHSTAT> = P<UDT$CN> + ((LLR$CU[0]-1) * UDTCNTL) + I;
Line S01513 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01590  M02S01513.exdrvr2 ---|          SLOWFOR J = 0 STEP 1 UNTIL PTH$ACK[MS$MSG$S[0]]
01591  M01S00042.exdrvr2 +++|          SLOWFOR J = 0 STEP 1 UNTIL FIELDSM1
01592  M01S01514.exdrvr  +++|          DO                         # SCAN UDT PATH ACK BITS #
01593  M01S01515.exdrvr  +++|            BEGIN  # SCAN BITS #
01594  M01S01516.exdrvr  +++|            IF NOT FOUND
01595  M01S01517.exdrvr  +++|            THEN                     # CONTINUE BIT SCAN #
01596  M01S01518.exdrvr  +++|              BEGIN  # CHECK BITS #
01597  M01S01519.exdrvr  +++|              IF PATHBIT(J,PATH$DF"U$EXISTS") EQ ON  ##
01598  M01S01520.exdrvr  +++|                AND PATHBIT(J,PATH$DF"U$DONE") EQ OFF
01599  M01S01521.exdrvr  +++|              THEN                   # PATH EXISTS AND NOT PROCESSED #
01600  M01S01522.exdrvr  +++|                BEGIN  # SEND MSG #
01601  M01S01523.exdrvr  +++|                IF PATHBIT(J,PATH$DF"U$ON") EQ ON  ##
01602  M01S01524.exdrvr  +++|                  AND (UD$CNUP[LLR$CU[0]]  ##
01603  M01S01525.exdrvr  +++|                  OR PATHBIT(J,PATH$DF"U$CU$ACK") EQ ON)
01604  M01S01526.exdrvr  +++|                THEN                 # SEND ON MSG #
01605  M01S01527.exdrvr  +++|                  BEGIN  # ONLINE #
01606  M01S01528.exdrvr  +++|                  PATHBIT(J,PATH$DF"U$CU$ACK") = ON;  # SET ON ACK #
01607  M01S01529.exdrvr  +++|                  PATHBIT(J,PATH$DF"U$DONE") = ON;  # IGNORE CU CNUP #
01608  M01S01530.exdrvr  +++|                  NEWPTHSTAT = ONLINE;
Line S01531 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01609  M02S01531.exdrvr2 ---|                  SLOWFOR K = 1 STEP 1 UNTIL MAXSMUNIT
Line S01532 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01610  M02S01532.exdrvr2 ---|                  DO                 # ASSUME ALL HARDWARE OK NOW #
Line S01533 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01611  M02S01533.exdrvr2 ---|                    BEGIN  # ALL #
Line S01534 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01612  M02S01534.exdrvr2 ---|                    SM$HWOFF[K] = FALSE;  # LATER REQUESTS MAY RESET #
Line S01535 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01613  M02S01535.exdrvr2 ---|                    END  # ALL #
Line S01536 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01614  M02S01536.exdrvr2 ---|
01615  M01S01537.exdrvr  +++|                  FOUND = TRUE;
01616  M01S01538.exdrvr  +++|                  ACKLINE = I;       # SAVE LOCATION #
01617  M01S01539.exdrvr  +++|                  ACKINDEX = J;
Line S01540 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01618  M02S01540.exdrvr2 ---|                  ONACK = J;
01619  M01S01541.exdrvr  +++|                  END  # ONLINE #
01620  M01S01542.exdrvr  +++|
Line S01543 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01621  M02S01543.exdrvr2 ---|                IF NOT INITIALIZE
Line S01544 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01622  M02S01544.exdrvr2 ---|                THEN                 # OFF AND DIAG MODE CAN BE SENT #
Line S01545 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01623  M02S01545.exdrvr2 ---|                  BEGIN  # NOT INIT #
Line S01546 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01624  M02S01546.exdrvr2 ---|                  IF PATHBIT(J,PATH$DF"U$RQ$DIAG") EQ ON  ##
Line S01547 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01625  M02S01547.exdrvr2 ---|                    AND (UD$CNUP[LLR$CU[0]]  ##
Line S01548 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01626  M02S01548.exdrvr2 ---|                    OR PATHBIT(J,PATH$DF"U$DIAG$ACK") EQ ON)
Line S01549 Modification History
M01 (Added by) exdrvr
M02 (Updated by) exdrvr2
Seq #  *Modification Id* Act 
----------------------------+
01627  M02S01549.exdrvr2 ---|                  THEN               # SEND DIAGNOSTIC MSG #
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/exdrvr.txt ยท Last modified: by 127.0.0.1