$CONTROL MAP,CODE,USLINIT                                               00010000
<<PVPROC - MODULE 31>>                                                  00012000
<< HP32002C MPE SOURCE C.00.00 >>                                       00014000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00016000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00018000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00020000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00022000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00024000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00026000
$CONTROL PRIVILEGED                                                     00028000
                                                                        00030000
$TITLE "PVPROC - GLOBAL DECLARATIONS"                                   00032000
<< Ignore special interrupts from CS'80 discs.              >> <<04157>>00034000
<< Change all references to the now defunct 7935 to 7933.   >> <<04277>>00036000
<< Make sure both "SDLF" & "FORS" bits of LPDT set for serial>><<04524>>00038000
<<   disc remount.                                           >><<04524>>00040000
                                                                        00042000
BEGIN                                                                   00044000
                                                                        00046000
<<************************* PVPROC *************************>>          00048000
                                                                        00050000
LOGICAL STAT = Q-1;                                                     00052000
                                                                        00054000
INTEGER ERR,LDEV,VTABX,MSGLOC,MOUNTSTAT;                                00056000
                                                                        00058000
LOGICAL PRINTMSG, PRT'READMSG;                                 <<01600>>00060000
                                                                        00062000
DOUBLE STATUS;                                                          00064000
                                                                        00066000
LOGICAL                                                                 00068000
     S0 = S-0,                                                 <<03586>>00070000
     LDTX'OFFSET,          << DST rel. offset for LDTX entry >><<03586>>00072000
     STATUS1 = STATUS,                                                  00074000
     STATUS2 = STATUS+1;                                                00076000
                                                                        00078000
BYTE ARRAY MSG(0:72);                                                   00080000
                                                                        00082000
BYTE ARRAY NAME(0:7);                                                   00084000
                                                                        00086000
ARRAY VLAB(0:127);  <<VOLUME LABEL BUFFER>>                             00088000
                                                                        00090000
BYTE ARRAY VLABB(*) = VLAB;                                             00092000
INTEGER ARRAY LDTX(0:4);                                       <<SD.00>>00094000
DEFINE LDTX0=LDTX#,                                            <<SD.00>>00096000
       LDTX1=LDTX(1)#,                                         <<SD.00>>00098000
       LDTX2=LDTX(2)#,                                         <<SD.00>>00100000
       LDTX3=LDTX(3)#,                                         <<SD.00>>00102000
       LDTX4=LDTX(4)#;                                         <<SD.00>>00104000
                                                               <<03500>>00106000
LOGICAL ARRAY ldt'entry (0:4);                                 <<03500>>00108000
                                                               <<03500>>00110000
DEFINE ldt'f = 3).(2:1#;  << UP/DOWN flag >>                   <<03500>>00112000
                                                               <<03500>>00114000
                                                                        00116000
EQUATE WORDSPERSECTR=128; <<#WORDS PER SECTOR FOR ALL>>        <<00074>>00118000
                          <<SUPPORTED SERIAL DISCS>>           <<00074>>00120000
DEFINE                                                                  00122000
     SCRATCHVOL = (DISCTYPE(LDEV,VLAB)=3)#,                    <<01115>>00124000
     SERIALVOL  = (DISCTYPE(LDEV,VLAB)=2)#,                    <<01115>>00126000
     FOREIGNVOL = (DISCTYPE(LDEV,VLAB)=4)#,                    <<01115>>00128000
     SYSTEMVOL  = (DISCTYPE(LDEV,VLAB)=0)#;                    <<01115>>00130000
EQUATE  << VOLUME LABEL INFORMATION >>                                  00132000
     LDEVINFO     =  6,                                                 00134000
     LGENINDEX    =  7,                                                 00136000
     LSYSID1      =  8,                                                 00138000
     LSYSID2      =  9,                                                 00140000
     LVNAMELOC'    = 10,                                                00142000
     LINITDATE    = 14,                                                 00144000
     LDIRBASE     = 15,                                                 00146000
     LDIRSIZE     = 16,                                                 00148000
     LANAMELOC'    = 17,                                                00150000
     LSYSIDLOC    = 16,  <<BYTES>>                                      00152000
     LVNAMELOC    = 20,  <<BYTES>>                                      00154000
     LVDIRINFO    = 30,                                                 00156000
     LANAMELOC    = 34,  <<BYTES>>                                      00158000
     LGNAMELOC    = 42,  <<BYTES>>                                      00160000
     LVOLDIR      = 25,                                                 00162000
     LVOLDIRLOC   = 50,  <<BYTES>>                                      00164000
     LVSNAMELOC   = 50;  <<BYTES>>                                      00166000
                                                                        00168000
EQUATE  << DATA SEGMENTS/SIRS >>                                        00170000
     LDTDST    = 14,                                                    00172000
     LDTSIR    = 10,                                                    00174000
     LPDTDST   = 13,                                                    00176000
     LPDTSIR   =  9,                                                    00178000
     VTABDST   = 29,                                                    00180000
     VTABSIR   = 22,                                                    00182000
     MVTABDST  = 53,                                                    00184000
     MVTABSIR  = 27;                                                    00186000
                                                                        00188000
LOGICAL POINTER LPDT = 8;                                               00190000
                                                               <<00074>>00192000
EQUATE LDT2=2; <<THIRD WORD OF LDT ENTRY-LDT(2)->>             <<00074>>00194000
                                                               <<00074>>00196000
                                                                        00198000
EQUATE  << SUBTYPES >>                                                  00200000
     S7902        = 0,  <<FLOPPY DISC-ENTIRE PACK>>            <<00074>>00202000
     R7905        = 4,  <<7905 - REMOVEABLE PART>>                      00204000
     F7905        = 5,  <<7905 - FIXED PART>>                           00206000
     S7905        = 6,  <<7905 - ONE DEVICE (FIXED+REMOVEABLE)>>        00208000
     S7920        = 8,  <<7920>>                               <<RK.00>>00210000
     S7925        = 9,  <<7925>>                               <<00074>>00212000
     R7906        =10,  <<7906 - REMOVABLE PART>>              <<00074>>00214000
     F7906        =11,  <<7906 - FIXED PART>>                  <<00074>>00216000
     S7906        =12;  <<7906 - BOTH>>                        <<00074>>00218000
                                                                        00220000
EQUATE  <<MOUNT STATES>>                                                00222000
     VLDVOL  = 0,  <<VALID VOLUME>>                                     00224000
     SCRVOL  = 1,  <<SCRATCH VOLUME>>                                   00226000
     SYSVOL  = 2,  <<SYSTEM VOLUME>>                                    00228000
     UNFVOL  = 3,  <<UNFORMATTED VOLUME>>                               00230000
     UNRVOL  = 4,  <<UNREADABLE LABEL>>                                 00232000
     SERVOL  = 5,  <<SERIAL DISC VOLUME>>                      <<00.SD>>00234000
     UNKVOL  = 6;  <<UNKNOWN VOLUME FORMAT>>                   <<00.SD>>00236000
                                                                        00238000
                                                               <<03502>>00242000
DEFINE  << DISC TYPE SUBTYPE COMBINATIONS >>                   <<03502>>00244000
     D7905R     = ( TYPE=0 LAND STYPE= 4 )#,                   <<03502>>00246000
     D7905F     = ( TYPE=0 LAND STYPE= 5 )#,                   <<03502>>00248000
     D7920      = ( TYPE=0 LAND STYPE= 8 )#,                   <<03502>>00250000
     D7925      = ( TYPE=0 LAND STYPE= 9 )#,                   <<03502>>00252000
     D7906R     = ( TYPE=0 LAND STYPE=10 )#,                   <<03502>>00254000
     D7906F     = ( TYPE=0 LAND STYPE=11 )#,                   <<03502>>00256000
     FLOPPY     = ( TYPE=2 )#,                                 <<03502>>00258000
     D7933      = ( TYPE=3 LAND STYPE= 8 )#,                   <<04277>>00260000
     LINUS      = ( TYPE=3 LAND STYPE= 0 )#,                   <<03502>>00262000
     REMVBLE    = (D7920 OR D7925 OR D7905R OR D7906R          <<03502>>00264000
                   OR FLOPPY OR D7933 OR LINUS)#,              <<04277>>00266000
     SPLITDISC  = (D7905F OR D7906F)#;                         <<03502>>00268000
                                                               <<03502>>00270000
EQUATE                                                                  00272000
     CR           = %15,  <<CARRIAGE RETURN>>                           00274000
     LF           = %12,  <<LINE FEED>>                                 00276000
     R            =   0,  <<READ - ATTACHIO FUNCTTION>>                 00278000
     W            =   1,  <<WRITE - ATTACHIO FUNCTION>>                 00280000
     NSD          =   1,  <<VALUE OF NSDF FOR NON-SYS DISC>>            00282000
     SYSD         =   1,  <<LDEV OF SYSTEM DISC>>                       00286000
     SYSDB        = 512,  <<SYSTEM DB BASE>>                            00288000
     SERVGRNTD    =   3,  <<DEVREC STATUS>>                    <<00074>>00290000
     LDTENT       =   5,  <<LDT ENTRY SIZE>>                            00292000
     LDTXENT      =   5,  <<LDTX ENTRY SIZE>>                  <<SD.00>>00294000
     SYSVOLNUM    =   2;  <<LOC IN ZERO ENTRY OF VTAB>>                 00296000
                                                                        00298000
EQUATE  << SYSTEM DB AREA >>                                            00300000
     SYSUP        = SYSDB+%73,                                          00302000
     PROGENPINX   = SYSDB+%141,                                         00304000
     PVPROCPINX   = SYSDB+%363,                                         00306000
     PVRECG'CNT   = SYSDB+%364;                                         00308000
                                                                        00310000
DEFINE  << LPDT FIELDS FOR PRIVATE VOLUMES >>                           00312000
     DRSTATE    = (0:2)#,  <<DEVICE RECOGNITION STATE>>        <<00.SD>>00314000
     LPDT1      = LPDT(LDEV&LSL(1)+1)#,                        <<SD.00>>00316000
     NSDF       = ( 4:1)#,  <<CONTROL-Y FIELD>>                         00318000
     MNTF       = ( 5:1)#,                                              00320000
     RESF       = ( 6:1)#,                                     <<00.SD>>00322000
     SDLF       = (10:1)#, <<SER/FORN DISC LOADED FIELD>>      <<01115>>00324000
     FORS       = (11:1)#; << 0=>SERIAL, 1=>FOREIGN >>         <<01115>>00326000
                                                                        00328000
DEFINE  << PARTIAL FIELDS >>                                            00330000
     LDEVF        = ( 0:8)#,  <<VTAB ENTRY LDEV FIELD>>                 00332000
     STATE        = ( 0:2)#,  <<DEVICE RECG. LPDT FIELD>>               00334000
     MVTABXF      = ( 8:8)#,  <<MOUNTED VOLUME TABLE INDEX>>            00336000
     NREADYF      = (14:1)#,  <<NOT READY BIT OF STATUS-2 (DISMOUNTED)>>00338000
     GSTATUS      = (13:3)#,                                            00340000
     TERMSTAT     = ( 3:7)#,  <<DISC I/O TERMINATION STATUS FIELD>>     00342000
     DEVTYPEF     = (10:6)#,  <<DEV TYPE IN LDT(3)>>                    00344000
     READ'SWITCH  = ( 9:1)#,  <<DEV IS READ ONLY>>             <<01600>>00346000
     VTENTNUMF    = (0 :8)#,                                            00348000
     VTENTSIZEF   = (8 :8)#;                                            00350000
                                                                        00352000
EQUATE  << CONDITION CODES >>                                           00354000
     CCG = 0,                                                           00356000
     CCL = 1,                                                           00358000
     CCE = 2;                                                           00360000
                                                                        00362000
EQUATE  PVERRMSGSET = 15;                                      <<01143>>00364000
                                                               <<01143>>00366000
EQUATE     << PV PROC ERROR INDICES INTO MESSAGE CATALOGUE >>  <<01143>>00368000
      READ'ONLY      =73,   << DEVICE IS READ ONLY >>          <<01600>>00370000
     INUSE'PVDISM   = 85,   << IN USE PRIV. VOL DISMOUNTED >>  <<01143>>00372000
     INUSE'SERDISM  = 86,   << IN USE SERIAL DISC DISMOUNT >>  <<01143>>00374000
     INUSE'REMOUNT  = 87,   << IN USE VOLUME REMOUNTED >>      <<01143>>00376000
     INUSE'FORDMT   = 88,   << IN USE FOREIGN DISK DISMOUNT >> <<01143>>00378000
     VOL'DISMOUNT   = 90,   << VOLUME DISMOUNTED >>            <<01143>>00380000
     VOL'MOUNT      = 91,   << VOLUME MOUNTED >>               <<01143>>00382000
     UNFORMVOL      = 95,   << UNFORMATTED VOLUME >>           <<01143>>00384000
     UNREADLAB      = 96,   << UNREADABLE LABEL >>             <<01143>>00386000
           <<  NO ROOM IN VOLUME TABLE >>                      <<01143>>00388000
     NOROOM98       = 98,   << UNFORMATTED LABEL DISK >>       <<01143>>00390000
     IOFAIL         = 226,  << I/O error from reqstatus >>     <<03769>>00392000
     NOROOM99       = 99;   <<   FORMATTED LABEL DISK >>       <<01143>>00394000
                                                               <<01143>>00396000
DEFINE                                                         <<04157>>00398000
   CS'80  =  ( LDEVTOTYPE(LDEV) = 3 )#;                        <<04157>>00400000
                                                               <<04157>>00402000
EQUATE                                                         <<04157>>00404000
   STATUS'CS80   = 7,    << Read status function - ATTACHIO >> <<04157>>00406000
   IGNORE'INT    = %101010,  << Driver wants us to ignore it >><<04157>>00408000
   P1'CS80       = 8,    << Parameters to ATTACHIO           >><<04157>>00410000
   P2'CS80       = 9;    <<   for the special read status    >><<04157>>00412000
                                                               <<04157>>00414000
                                                               <<04157>>00416000
INTEGER                                                        <<04157>>00418000
   DISC'STATUS;          << The return from the driver       >><<04157>>00420000
DEFINE CC=STAT.(6:2)#;                                                  00422000
DEFINE CARY=STAT.(5:1)#;                                       <<RK.05>>00424000
DEFINE DUPLICATE = ASSEMBLE(DUP)#;                                      00426000
DEFINE DELETE = ASSEMBLE(DEL)#;                                         00428000
DEFINE HARDHALT = ASSEMBLE(HALT 0;BR*-1)#;                              00430000
DEFINE ENABLE  = ASSEMBLE(SED 1)#;                             <<01371>>00432000
DEFINE DISABLE = ASSEMBLE(SED 0)#;                             <<01371>>00434000
                                                               <<03500>>00436000
<< For status returned by Create'Dfs'Data'Seg >>               <<03500>>00438000
                                                               <<03500>>00440000
LOGICAL dfs'status;                                            <<03500>>00442000
                                                                        00444000
INTRINSIC READ,PRINT,ASCII,BINARY,TERMINATE;                            00446000
                                                                        00448000
PROCEDURE REPORT'IOERROR (LDEV,IOSTATUS);                      <<04157>>00450000
   VALUE LDEV,IOSTATUS;                                        <<04157>>00452000
   INTEGER LDEV,IOSTATUS;                                      <<04157>>00454000
   OPTION EXTERNAL;                                            <<04157>>00456000
                                                               <<04157>>00458000
                                                               <<04157>>00460000
PROCEDURE WAIT(W,D);                                                    00462000
VALUE W,D;                                                              00464000
INTEGER W,D;                                                            00466000
OPTION EXTERNAL;                                                        00468000
                                                                        00470000
PROCEDURE AWAKE(P,A,W);                                                 00472000
VALUE P,A,W;                                                            00474000
INTEGER P,A,W;                                                          00476000
OPTION EXTERNAL;                                                        00478000
                                                                        00480000
LOGICAL PROCEDURE GETSIR(N);                                            00482000
VALUE N; LOGICAL N;                                                     00484000
OPTION EXTERNAL;                                                        00486000
                                                                        00488000
PROCEDURE RELSIR(N,B);                                                  00490000
VALUE N,B; LOGICAL N,B;                                                 00492000
OPTION EXTERNAL;                                                        00494000
                                                               <<01115>>00496000
INTEGER PROCEDURE DISCTYPE(LDEV, LABL);                        <<01115>>00498000
VALUE LDEV;                                                    <<01115>>00500000
INTEGER LDEV;                                                  <<01115>>00502000
ARRAY LABL;                                                    <<01115>>00504000
OPTION EXTERNAL;                                               <<01115>>00506000
                                                                        00508000
INTEGER PROCEDURE EXCHANGEDB(D);                                        00510000
VALUE D; LOGICAL D;                                                     00512000
OPTION EXTERNAL;                                                        00514000
                                                                        00516000
LOGICAL PROCEDURE SETSYSDB;                                             00518000
OPTION EXTERNAL;                                                        00520000
                                                                        00522000
PROCEDURE RESETDB(D);                                                   00524000
VALUE D; LOGICAL D;                                                     00526000
OPTION EXTERNAL;                                                        00528000
                                                                        00530000
PROCEDURE LOG12(MISCINFO,DEVINFO,VNAME,VNAMELEN,RECTYPE);               00532000
VALUE MISCINFO,DEVINFO,VNAMELEN,RECTYPE;                                00534000
LOGICAL MISCINFO,DEVINFO;                                               00536000
INTEGER VNAMELEN,RECTYPE;                                               00538000
ARRAY VNAME;                                                            00540000
OPTION EXTERNAL;                                                        00542000
                                                                        00544000
INTEGER PROCEDURE GENMSG(SETNO,MSGNO,MASK,PARM1,PARM2,                  00546000
   PARM3,PARM4,PARM5,DEST,REPLY,OFFSET,DST,IOTYPE);                     00548000
VALUE SETNO,MSGNO,MASK,PARM1,PARM2,PARM3,PARM4,PARM5,                   00550000
   DEST,REPLY,OFFSET,DST,IOTYPE;                                        00552000
INTEGER SETNO,MSGNO,DEST,DST;                                           00554000
LOGICAL MASK,PARM1,PARM2,PARM3,PARM4,PARM5,REPLY,OFFSET,                00556000
   IOTYPE;                                                              00558000
OPTION VARIABLE,EXTERNAL;                                               00560000
                                                                        00562000
                                                                        00564000
DOUBLE PROCEDURE ATTACHIO(P1,P2,P3,P4,P5,P6,P7,P8,P9);                  00566000
VALUE      P1,P2,P3,P4,P5,P6,P7,P8,P9;                                  00568000
INTEGER    P1,P2,P3,P4,P5,P6,P7,P8,P9;                                  00570000
OPTION EXTERNAL;                                                        00572000
                                                                        00574000
DOUBLE PROCEDURE REQSTATUS(LDN);                                        00576000
VALUE LDN; INTEGER LDN;                                                 00578000
OPTION EXTERNAL;                                                        00580000
                                                                        00582000
PROCEDURE HELP;                                                         00584000
OPTION EXTERNAL;                                                        00586000
                                                                        00588000
PROCEDURE DEBUG;                                               <<01143>>00590000
OPTION EXTERNAL;                                               <<01143>>00592000
                                                               <<03500>>00594000
<< Disc free space set-up routines >>                          <<03500>>00596000
                                                               <<03500>>00598000
INTEGER PROCEDURE Create'Dfs'Data'Seg (ldev, disk'label,       <<03500>>00600000
                                       assume'dt'is'dirty,     <<03500>>00602000
                                       flag'dt'as'dirty);      <<03500>>00604000
   VALUE ldev, assume'dt'is'dirty, flag'dt'as'dirty;           <<03500>>00606000
   INTEGER ldev;                                               <<03500>>00608000
   ARRAY disk'label;                                           <<03500>>00610000
   LOGICAL assume'dt'is'dirty;                                 <<03500>>00612000
   LOGICAL flag'dt'as'dirty;                                   <<03500>>00614000
   OPTION EXTERNAL, VARIABLE;                                  <<03500>>00616000
                                                               <<03500>>00618000
PROCEDURE Delete'Dfs'Data'Seg (ldev);                          <<03500>>00620000
   VALUE ldev;                                                 <<03500>>00622000
   INTEGER ldev;                                               <<03500>>00624000
   OPTION EXTERNAL;                                            <<03500>>00626000
                                                               <<03500>>00628000
PROCEDURE Process'Dfs'Error (ldev, error'status,               <<03500>>00630000
                             type'of'error);                   <<03500>>00632000
   VALUE ldev, error'status, type'of'error;                    <<03500>>00634000
   INTEGER ldev;                                               <<03500>>00636000
   LOGICAL error'status;                                       <<03500>>00638000
   INTEGER type'of'error;                                      <<03500>>00640000
   OPTION EXTERNAL;                                            <<03500>>00642000
                                                               <<03586>>00646000
INTEGER PROCEDURE GETDATASEG(MEMSIZE,VDSIZE);                  <<03586>>00648000
   VALUE MEMSIZE,VDSIZE;                                       <<03586>>00650000
   INTEGER MEMSIZE,VDSIZE;                                     <<03586>>00652000
   OPTION EXTERNAL;                                            <<03586>>00654000
                                                               <<03586>>00656000
                                                               <<03586>>00658000
                                                               <<03586>>00660000
PROCEDURE RELDATASEG(SEGMENT);                                 <<03586>>00662000
   VALUE SEGMENT;                                              <<03586>>00664000
   INTEGER SEGMENT;                                            <<03586>>00666000
   OPTION EXTERNAL;                                            <<03586>>00668000
                                                               <<03586>>00670000
                                                               <<03586>>00672000
                                                               <<03586>>00674000
PROCEDURE RECOGNIZE (LDEV);                                    <<03586>>00676000
   VALUE LDEV;                                                 <<03586>>00678000
   INTEGER LDEV;                                               <<03586>>00680000
   OPTION EXTERNAL;                                            <<03586>>00682000
                                                               <<03586>>00684000
                                                               <<03586>>00686000
                                                               <<03586>>00688000
PROCEDURE CLEANLDEV (LDEV);                                    <<03586>>00690000
  VALUE LDEV;                                                  <<03586>>00692000
  INTEGER LDEV;                                                <<03586>>00694000
  OPTION EXTERNAL;                                             <<03586>>00696000
                                                               <<03586>>00698000
INTEGER PROCEDURE LDEVTOTYPE(LDEV);                            <<03586>>00700000
   VALUE LDEV;                                                 <<03586>>00702000
   INTEGER LDEV;                                               <<03586>>00704000
   OPTION EXTERNAL;                                            <<03586>>00706000
                                                               <<03586>>00708000
                                                               <<03586>>00710000
PROCEDURE CHECKDISC(LDEV,STATUS);                              <<03586>>00712000
   VALUE LDEV;                                                 <<03586>>00714000
   INTEGER LDEV;                                               <<03586>>00716000
   LOGICAL STATUS;                                             <<03586>>00718000
   OPTION EXTERNAL;                                            <<03586>>00720000
                                                               <<03586>>00722000
                                                               <<03586>>00724000
LOGICAL PROCEDURE TEST'FOR'REELSWITCH (LDEV);                  <<03619>>00726000
   VALUE LDEV;                                                 <<03619>>00728000
   INTEGER LDEV;                                               <<03619>>00730000
   OPTION EXTERNAL;                                            <<03619>>00732000
                                                               <<03619>>00734000
                                                               <<03619>>00736000
                                                               <<03619>>00738000
PROCEDURE LABELED'DEV'MOUNTED (LDEV);                          <<03619>>00740000
   VALUE LDEV;                                                 <<03619>>00742000
   INTEGER LDEV;                                               <<03619>>00744000
   OPTION EXTERNAL;                                            <<03619>>00746000
                                                               <<03619>>00748000
                                                               <<03619>>00750000
                                                               <<03619>>00752000
PROCEDURE CHECKLDEV(LDEV);                                     <<03723>>00754000
   VALUE LDEV;                                                 <<03723>>00756000
   INTEGER LDEV;                                               <<03723>>00758000
   OPTION EXTERNAL;                                            <<03723>>00760000
                                                               <<03723>>00762000
                                                               <<03723>>00764000
$PAGE                                                          <<04157>>00766000
PROCEDURE REEL'SWITCH (LDEV);                                  <<03619>>00768000
   VALUE LDEV;                                                 <<03619>>00770000
   INTEGER LDEV;                                               <<03619>>00772000
   OPTION INTERNAL;                                            <<03619>>00774000
                                                               <<03619>>00776000
BEGIN                                                          <<03619>>00778000
                                                               <<03619>>00780000
<< Makes sure that if the newly re-mounted serial disc, was >> <<03619>>00782000
<< for a reel switch and that AVR will be performed on it.  >> <<03619>>00784000
                                                               <<03619>>00786000
                                                               <<03619>>00788000
IF TEST'FOR'REELSWITCH(LDEV)  THEN                             <<03619>>00790000
BEGIN          << We are expecting a reel switch! >>           <<03619>>00792000
   DISABLE;                                                    <<04157>>00794000
   LPDT1.DRSTATE := 0;   << RECOGNIZE expects unowned state >> <<04157>>00796000
                         << we will return to the owned state>><<04157>>00798000
                         << before leaving PVPROC.           >><<04157>>00800000
   ENABLE;                                                     <<04157>>00802000
   RECOGNIZE(LDEV);    << Perform AVR >>                       <<03619>>00804000
   LABELED'DEV'MOUNTED(LDEV);    << Tell Labeled Tape       >> <<03619>>00806000
                                 << interface we're done.   >> <<03619>>00808000
END;                                                           <<03619>>00810000
                                                               <<03619>>00812000
END;                                                           <<03619>>00814000
$PAGE                                                          <<03586>>00816000
                                                               <<03586>>00818000
PROCEDURE LABELED'SDISC (LDEV,LDTX,LDTX'OFFSET);               <<03586>>00820000
   VALUE LDEV,LDTX'OFFSET;                                     <<03586>>00822000
   INTEGER LDEV;                                               <<03586>>00824000
   ARRAY LDTX;                                                 <<03586>>00826000
   LOGICAL LDTX'OFFSET;                                        <<03586>>00828000
   OPTION INTERNAL;                                            <<03586>>00830000
                                                               <<03586>>00832000
BEGIN                                                          <<03586>>00834000
                                                               <<03586>>00836000
COMMENT                                                        <<03586>>00838000
                                                               <<03586>>00840000
   Will check if the newly mounted (unowned) serial disc is    <<03586>>00842000
   labeled. (Upon entry LDTX1 = 0, i.e. unowned).              <<03586>>00844000
   To do this must have XDS for serial disc interface and the  <<03586>>00846000
   XDS number in word #1 of LDTX. After setup, then call       <<03586>>00848000
   RECOGNIZE to see if labeled (and sets TAPE LABEL table).    <<03586>>00850000
   Then must release the XDS and reset word #1 of LDTX.        <<03586>>00852000
                                                               <<03586>>00854000
   ENTRY:                                                      <<03586>>00856000
      LDTX        = Entry for this Ldev in LDTX.               <<03586>>00858000
      LDTX'OFFSET = Address (rel. to LDT) where                <<03586>>00860000
                    LDTX for this Ldev lives.                  <<03586>>00862000
                                                               <<03586>>00864000
   DB MUST BE AT STACK!!                                       <<03586>>00866000
;                                                              <<03586>>00868000
                                                               <<03586>>00870000
EQUATE                                                         <<03586>>00872000
  ARRAYSIZE= 5,          << Size of sdisc buffer >>            <<03586>>00874000
  LOCK     = 16,         << Lock ldev >>                       <<03586>>00876000
  UNLOCK   = 17,         << Unlock ldev >>                     <<03586>>00878000
  CHK'LOCK = 18;         << Check if ldev is locked or not >>  <<03586>>00880000
                                                               <<03586>>00882000
                                                               <<03586>>00884000
DEFINE                                                         <<03586>>00886000
   DOWNED'DEV  = STATUS.(6:1) = 1#;                            <<04157>>00888000
                                                               <<03586>>00892000
                                                               <<03586>>00894000
INTEGER                                                        <<03586>>00896000
   STATUS,               << Return from CHECKDISC >>           <<03586>>00898000
   SEGMENT;              << DST # for sdisc XDS >>             <<03586>>00902000
                                                               <<03586>>00904000
LOGICAL                                                        <<03586>>00906000
   LOCKFLAG;             << True if ldev is locked already >>  <<04157>>00908000
                                                               <<03586>>00912000
ARRAY SDISC'DST(0:ARRAYSIZE-1);   << Sdisc temp buffer >>      <<03586>>00914000
                                                               <<03586>>00916000
EQUATE                                                         <<03586>>00918000
   MEMSIZE        = %77700,     << Values  for           >>    <<03586>>00920000
   VDSIZE         = 0,          <<    GETDATASEG.        >>    <<03586>>00922000
                                                               <<03586>>00924000
   << Entries in SDISC'DST >>                                  <<03586>>00926000
   JUST'ALLOCATED = 0,         << True if XDS just allocated >><<03586>>00928000
   WRITERING      = 1,         << True if allow writes       >><<03586>>00930000
   FATALERROR     = 2,         << True if error detected     >><<03586>>00932000
   ERRORLOGCELL   = 3,                                         <<03586>>00934000
   MSIZECELL      = 4,                                         <<03586>>00936000
   JUST'ALLOC'ADR = 7;                                         <<03586>>00938000
                                                               <<03586>>00940000
   << If the device is downed, don't want to AVR it >>         <<03586>>00942000
                                                               <<03586>>00944000
   CHECKDISC(LDEV,STATUS);                                     <<03586>>00946000
   IF DOWNED'DEV  THEN  RETURN;                                <<03586>>00948000
                                                               <<03586>>00950000
   LOCKFLAG := TRUE;                                           <<03586>>00954000
                                                               <<03586>>00956000
   IF CS'80 THEN                                               <<03586>>00958000
   BEGIN        << See if we need to lock the device >>        <<03586>>00960000
      ATTACHIO(LDEV,0,0,@LOCKFLAG,CHK'LOCK,1,0,0,1);           <<03586>>00962000
      IF NOT LOCKFLAG THEN                                     <<03586>>00964000
                 << Not locked, better lock it >>              <<03586>>00966000
         ATTACHIO(LDEV,0,0,0,LOCK,0,0,0,1);                    <<03586>>00968000
   END;            << CS'80 device >>                          <<03586>>00970000
                                                               <<03586>>00972000
                                                               <<03586>>00974000
   SEGMENT := GETDATASEG(MEMSIZE,VDSIZE);                      <<03586>>00976000
   IF <> THEN GO RETRN;     << Nothing more to do >>           <<03586>>00978000
                                                               <<03586>>00980000
   << Set up values for the SDISC'DST  >>                      <<03586>>00982000
                                                               <<03586>>00984000
   SDISC'DST(JUST'ALLOCATED) := TRUE;                          <<03586>>00986000
   SDISC'DST(WRITERING) := FALSE;                              <<03586>>00988000
   SDISC'DST(FATALERROR) := FALSE;                             <<03586>>00990000
   SDISC'DST(ERRORLOGCELL) := 0;                               <<03586>>00992000
   SDISC'DST(MSIZECELL) := MEMSIZE;                            <<03586>>00994000
                                                               <<03586>>00996000
   TOS := SEGMENT;                                             <<03586>>00998000
   TOS := JUST'ALLOC'ADR;                                      <<03586>>01000000
   TOS := @SDISC'DST;                                          <<03586>>01002000
   TOS := ARRAYSIZE;                                           <<03586>>01004000
   ASSEMBLE(MTDS 4);                                           <<03586>>01006000
                                                               <<03586>>01008000
   << Also need the segment # in LDTX1 so sdisc interface >>   <<03586>>01010000
   << can find it.                                        >>   <<03586>>01012000
                                                               <<03586>>01014000
   LDTX1 := SEGMENT;                                           <<03586>>01016000
   TOS := LDTDST;                                              <<03586>>01018000
   TOS := LDTX'OFFSET;                                         <<03586>>01020000
   TOS := @LDTX;                                               <<03586>>01022000
   TOS := LDTXENT;                                             <<03586>>01024000
   ASSEMBLE(MTDS 4);                                           <<03586>>01026000
                                                               <<03586>>01028000
   << Set ownership bits to 0 so RECOGNIZE will work. >>       <<03586>>01030000
                                                               <<03586>>01032000
   DISABLE;                                                    <<04157>>01034000
   LPDT1.DRSTATE := 0;                                         <<03586>>01036000
   ENABLE;                                                     <<04157>>01038000
                                                               <<03586>>01040000
   RECOGNIZE(LDEV);       << See if labeled sdisc >>           <<03586>>01042000
                                                               <<03586>>01044000
   << Now reset LDTX1 and release SDISC XDS >>                 <<03586>>01046000
                                                               <<03586>>01048000
   LDTX1 := 0;                                                 <<03586>>01050000
   TOS := LDTDST;                                              <<03586>>01052000
   TOS := LDTX'OFFSET;                                         <<03586>>01054000
   TOS := @LDTX;                                               <<03586>>01056000
   TOS := LDTENT;                                              <<03586>>01058000
   ASSEMBLE(MTDS 4);                                           <<03586>>01060000
                                                               <<03586>>01062000
   DISABLE;                                                    <<04157>>01064000
   LPDT1.DRSTATE := 0;        << Device not owned >>           <<03586>>01066000
   ENABLE;                                                     <<04157>>01068000
                                                               <<03586>>01070000
   RELDATASEG(SEGMENT);                                        <<03586>>01072000
                                                               <<03586>>01074000
RETRN:                                                         <<03586>>01076000
                                                               <<03586>>01078000
                                                               <<03586>>01080000
   IF CS'80 AND (NOT LOCKFLAG)  THEN                           <<03586>>01082000
                     << We locked it, now unlock it >>         <<03586>>01084000
      ATTACHIO(LDEV,0,0,0,UNLOCK,0,0,0,1);                     <<03586>>01086000
                                                               <<03586>>01088000
END;                                                           <<03586>>01090000
                                                               <<03586>>01092000
PROCEDURE DISCIO(LDN,FUNCT,BUF,ADDR,WC);                                01094000
VALUE LDN,FUNCT,ADDR,WC;                                                01096000
INTEGER LDN,FUNCT,WC;                                                   01098000
DOUBLE ADDR;                                                            01100000
ARRAY BUF;                                                              01102000
OPTION PRIVILEGED,UNCALLABLE;                                           01104000
BEGIN                                                                   01106000
     INTEGER                                                            01108000
          ADDR1 = ADDR,                                                 01110000
          ADDR2 = ADDR+1;                                               01112000
     INTEGER POINTER BUFP = BUF;                                        01114000
                                                                        01116000
     CC:=CCE;                                                           01118000
        <<NON-SHARABLE DISC: MUST BE SERIAL>>                  <<SD.00>>01120000
     IF LPDT(LDN&LSL(1)+1).DRSTATE=1 AND                       <<01115>>01122000
        LPDT(LDN&LSL(1)+1).FORS=0 THEN                         <<01115>>01124000
        TOS:=ATTACHIO(LDN,0,0,@BUFP,FUNCT,                     <<SD.00>>01126000
        WC,ADDR1,ADDR2,%41)                                    <<SD.00>>01128000
     ELSE                                                      <<SD.00>>01130000
        TOS:=ATTACHIO(LDN,0,0,@BUFP,FUNCT,                     <<SD.00>>01132000
        WC,ADDR1,ADDR2,1);                                     <<SD.00>>01134000
     DELETE;                                                            01136000
     IF TOS.GSTATUS <> 1 THEN CC:=CCL;                                  01138000
END << DISCIO >>;                                                       01140000
                                                                        01142000
PROCEDURE UPDATELDT(LDN,VTABX);                                         01144000
VALUE LDN,VTABX;                                                        01146000
INTEGER LDN,VTABX;                                                      01148000
OPTION PRIVILEGED,UNCALLABLE;                                           01150000
BEGIN                                                                   01152000
     LOGICAL A;                                                         01154000
     INTEGER DST;                                                       01156000
     INTEGER ARRAY LDT(*) = DB+0;                                       01158000
     DEFINE DVCLTABB=LDT(1)#, <<DEVICE CLASS>>                 <<DL003>>01160000
            <<TABLE BASE ADDRESS>>                             <<DL003>>01162000
            DVCLTABL=LDT(3)#; <<DEVICE CLASS>>                 <<DL003>>01164000
            <<TABLE LENGTH>>                                   <<DL003>>01166000
     EQUATE LDTXSIZE=5;                                        <<DL003>>01168000
                                                                        01170000
     DST:=EXCHANGEDB(LDTDST);                                           01172000
     A:=GETSIR(LDTSIR);                                                 01174000
     IF LDT(DVCLTABB+DVCLTABL+LDN*LDTXSIZE+1)=0 THEN           <<DL003>>01176000
     <<NOT AN ALLOCATED SERIAL DISC, NO PIN#>>                 <<DL003>>01178000
     <<TO BE PROTECTED>>                                       <<DL003>>01180000
     LDT((LDN * LDT.(8:8))+1).(0:8):=VTABX;                             01182000
     RELSIR(LDTSIR,A);                                                  01184000
     EXCHANGEDB(DST);                                                   01186000
END << UPDATELDT >>;                                                    01188000
                                                                        01190000
INTEGER PROCEDURE MOUNTEDLDEV;                                          01192000
OPTION PRIVILEGED,UNCALLABLE;                                           01194000
BEGIN                                                                   01196000
     INTEGER I,DEV,RDEV,TYPE,STYPE,LDEVMAX;                    <<00074>>01198000
     LOGICAL DIT,DEVINFO;                                               01200000
                                                                        01202000
     LOGICAL SUBROUTINE REMOVABLE;                                      01204000
     BEGIN                                                              01206000
          RDEV:=DEV;                                                    01208000
          TOS:=@TYPE; <<FETCH TYPE FROM LDT>>                  <<00074>>01210000
          TOS:=LDTDST;                                         <<00074>>01212000
          TOS:=DEV*LDTENT+LDT2;                                <<00074>>01214000
          TOS:=1;                                              <<00074>>01216000
          ASSEMBLE(MFDS 4); <<FETCH TYPE FROM LDT>>            <<00074>>01218000
          TYPE:=TYPE.DEVTYPEF;                                 <<00074>>01220000
          STYPE:=LPDT((DEV & LSL(1))+1).(12:4);                         01222000
          IF SPLITDISC THEN                                    <<03502>>01224000
          BEGIN <<LOOK FOR REMOVABLE PART>>                    <<00074>>01226000
               DIT:=LPDT(DEV & LSL(1)).(1:15);                          01228000
               FOR I:=1 UNTIL INTEGER(LPDT(0).(0:8)) DO        <<RK.00>>01230000
               IF (LPDT(I & LSL(1)).(1:15) = DIT)              <<RK.00>>01232000
                  AND (I <> DEV) <<NOT US>> THEN               <<RK.00>>01234000
               BEGIN                                                    01236000
                    STYPE:=LPDT(((RDEV:=I) & LSL(1))+1).(12:4);         01238000
                    I:=LPDT(0).(0:8);  <<STOP LOOP>>                    01240000
               END;                                                     01242000
          END;                                                          01244000
                                                               <<03502>>01248000
IF REMVBLE THEN REMOVABLE:=TRUE;                               <<03502>>01250000
                                                               <<03502>>01252000
     END <<REMOVABLE>>;                                                 01254000
                                                                        01256000
     LDEVMAX:=LPDT(0).(0:8);                                            01258000
     FOR DEV:=1 UNTIL LDEVMAX DO                                        01260000
     BEGIN                                                              01262000
          IF LPDT((DEV & LSL(1))+1).STATE = SERVGRNTD THEN     <<00074>>01264000
          BEGIN                                                         01266000
               IF REMOVABLE THEN  <<SUBTYPE IS OK>>                     01268000
               IF LPDT((RDEV & LSL(1))+1).NSDF = NSD THEN               01270000
               BEGIN                                                    01272000
                    MOUNTEDLDEV:=RDEV;                                  01274000
                    DISABLE;                                            01276000
                    LPDT((DEV & LSL(1))+1).STATE:=0;  <<AVAIL>><<RK.00>>01278000
                    ENABLE;                                             01280000
                    DEV:=LDEVMAX;  <<STOP LOOP>>                        01282000
               END;                                                     01284000
          END;                                                          01286000
     END;                                                               01288000
END << MOUNTEDLDEV >>;                                                  01290000
                                                                        01292000
INTEGER PROCEDURE ADDTOVTAB(LDN,ESTAT);                                 01294000
VALUE LDN,ESTAT;                                                        01296000
INTEGER LDN,ESTAT;                                                      01298000
OPTION VARIABLE;                                                        01300000
OPTION PRIVILEGED,UNCALLABLE;                                           01302000
BEGIN                                                                   01304000
     << LDN -   LOGICAL DEVICE NUMBER FOR VOLUME TO BE ADDED TO         01306000
                VOLUME TABLE.                                           01308000
        ESTAT - OPTIONAL PARAMETER WHICH, IF NON ZERO, INDICATES        01310000
                THE VOLUME IS UNFORMATTED OR HAS AN UNREADABLE          01312000
                LABEL. IN EITHER CASE, A VOLUME NAME WILL NOT BE        01314000
                PLACED IN THE VOLUME TABLE ENTRY                        01316000
                                                                        01318000
      RETURN CODES:                                                     01320000
        CCE - SUCCESSFUL (EITHER EMPTY ENTRY -- CARRY=FALSE             01322000
                          OR OLDNAME=NEWNAME -- CARRY=TRUE)             01324000
        CCL - NO ROOM (VTAB IS FULL)                                    01326000
        CCG - LDN WAS ALREADY IN VTAB AND                               01328000
              THE OLDVOLNAME<>NEWVOLNAME                                01330000
                                                                        01332000
     >>                                                                 01334000
     LOGICAL PMAP = Q-4;                                                01336000
     INTEGER INDEX:=0;                                                  01338000
     INTEGER OLDINDEX:=0;                                      <<RK.00>>01340000
     INTEGER I,DST,LOC,VTENTNUM,VTENTSIZE;                              01342000
     LOGICAL A,IOSTATUS,THISLDEV;                              <<RK.00>>01344000
     ARRAY VTAB(*) = DB+0;                                              01346000
     ARRAY VTABENT(0:13);  <<ASSUME VTAB ENTRY SIZE = 14>>              01348000
     BYTE ARRAY                                                         01350000
          VTABB(*)     = VTAB,                                          01352000
          VTABENTB(*)  = VTABENT;                                       01354000
     DEFINE                                                             01356000
          ESTATF   = (13: 1)#,                                          01358000
          NSDVOLF  = (14: 1)#,                                          01360000
          SCRATCHF = (15: 1)#;                                          01362000
                                                                        01364000
     CC:=CCE;                                                           01366000
     CARY:=0;                                                  <<RK.05>>01368000
     A:=GETSIR(VTABSIR);                                                01370000
     DST:=EXCHANGEDB(VTABDST);                                          01372000
     VTENTNUM:=VTAB.VTENTNUMF;                                          01374000
     VTENTSIZE:=VTAB.VTENTSIZEF;                                        01376000
     I:=VTAB(SYSVOLNUM).(8:8);  <<NUMBER OF SYSTEM VOLUMES>>            01378000
     WHILE (I:=I+1) <= VTENTNUM DO                                      01380000
     BEGIN                                                              01382000
          LOC:=(I*VTENTSIZE);                                           01384000
          THISLDEV:=VTAB(LOC+12).LDEVF;                        <<RK.00>>01386000
          IF THISLDEV = 0 THEN INDEX:= I;    <<AVAILABLE SLOT>><<RK.00>>01388000
          IF THISLDEV = LOGICAL(LDN) THEN OLDINDEX:=I;         <<RK.00>>01390000
          << IE, IT'S ALREADY HERE -- LOST AN OFFLINE ? >>     <<RK.00>>01392000
          << TWO SECOND GOTCHA !! >>                           <<RK.00>>01394000
     END;                                                      <<RK.00>>01396000
     EXCHANGEDB(DST);                                          <<RK.00>>01398000
     IF OLDINDEX <> 0 THEN <<ALREADY HERE>>                    <<RK.00>>01400000
     BEGIN                                                     <<RK.00>>01402000
          <<MOVE OLD ENTRY INTO VTABENT>>                      <<RK.00>>01404000
          TOS:=@VTABENT;                                       <<RK.00>>01406000
          TOS:=VTABDST;                                        <<RK.00>>01408000
          TOS:=OLDINDEX*VTENTSIZE;                             <<RK.00>>01410000
          TOS:=VTENTSIZE;                                      <<RK.00>>01412000
          ASSEMBLE(MFDS 4);                                    <<RK.00>>01414000
          IF VTABENTB<>VLABB(LVNAMELOC),(8),2 OR               <<RK.00>>01416000
             * <> VLABB(LGNAMELOC),(8),2 OR                    <<RK.00>>01418000
             * <> VLABB(LANAMELOC),(8) THEN                    <<RK.00>>01420000
          CC:=CCG;                                             <<RK.00>>01422000
          INDEX:=OLDINDEX;  <<UPDATE VTAB ENTRY>>              <<RK.00>>01424000
          CARY:=1;                                             <<RK.05>>01426000
     END;                                                      <<RK.00>>01428000
     IF  INDEX <> 0 THEN  <<FOUND AVAILABLE ENTRY>>            <<RK.00>>01430000
     BEGIN                                                              01432000
          VTABENT:=0;                                                   01434000
          MOVE VTABENT(1):=VTABENT,(VTENTSIZE-1);                       01436000
          VTABENT(12):=2 CAT LDN(0:8:8);  <<SET NSD-VOLUME FLAG>>       01438000
          IF PMAP THEN VTABENT(12).ESTATF:=ESTAT ELSE                   01440000
          BEGIN                                                         01442000
               IF DISCTYPE(LDN,VLAB)=3 THEN VTABENT(12).SCRATCHF:=1;    01444000
               MOVE VTABENTB:=VLABB(LVNAMELOC),(8),2;                   01446000
               MOVE * :=VLABB(LGNAMELOC),(8),2;                         01448000
               MOVE * :=VLABB(LANAMELOC),(8);                           01450000
          END;                                                          01452000
          <<MOVE NEW ENTRY INTO VTAB>>                                  01454000
          TOS:=VTABDST;                                                 01456000
          TOS:=INDEX*VTENTSIZE;                                         01458000
          TOS:=@VTABENT;                                                01460000
          TOS:=VTENTSIZE;                                               01462000
          ASSEMBLE(MTDS 4);                                             01464000
          UPDATELDT(LDN,INDEX);                                         01466000
          ADDTOVTAB:=INDEX;  <<PASS BACK VTAB INDEX>>                   01468000
     END ELSE CC:=CCL;                                                  01470000
     RELSIR(VTABSIR,A);                                                 01472000
END << ADDTOVTAB >>;                                                    01474000
                                                                        01476000
INTEGER PROCEDURE DELFRVTAB(LDN);                                       01478000
VALUE LDN; INTEGER LDN;                                                 01480000
OPTION PRIVILEGED,UNCALLABLE;                                           01482000
BEGIN                                                                   01484000
     INTEGER INDEX:=0;                                                  01486000
     INTEGER DST,LOC,VTENTNUM,VTENTSIZE;                                01488000
     LOGICAL A,FOUND:=FALSE;                                            01490000
     ARRAY VTAB(*) = DB+0;                                              01492000
                                                                        01494000
     CC:=CCE;                                                           01496000
     A:=GETSIR(VTABSIR);                                                01498000
     DST:=EXCHANGEDB(VTABDST);                                          01500000
     VTENTNUM:=VTAB.VTENTNUMF;                                          01502000
     VTENTSIZE:=VTAB.VTENTSIZEF;                                        01504000
     WHILE (INDEX:=INDEX+1) <= VTENTNUM DO                              01506000
     BEGIN                                                              01508000
          LOC:=(INDEX*VTENTSIZE);                                       01510000
          IF VTAB(LOC+12).LDEVF = LOGICAL(LDN) THEN  <<FOUND ENTRY>>    01512000
          BEGIN                                                         01514000
               FOUND:=TRUE;                                             01516000
               DELFRVTAB:=INDEX;  <<PASS BACK VTAB INDEX>>              01518000
               VTAB(LOC):=0; MOVE VTAB(LOC+1):=VTAB(LOC),(VTENTSIZE-1); 01520000
               UPDATELDT(LDN,0);  <<NULL VTAB POINTER>>                 01522000
               INDEX:=VTENTNUM;  <<STOP LOOP>>                          01524000
          END;                                                          01526000
     END;                                                               01528000
     EXCHANGEDB(DST);                                                   01530000
     RELSIR(VTABSIR,A);                                                 01532000
     IF NOT FOUND THEN CC:=CCL;                                         01534000
END << DELFRVTAB>>;                                                     01536000
                                                                        01538000
PROCEDURE PVLOG12(MOUNTYPE);                                            01540000
VALUE MOUNTYPE; LOGICAL MOUNTYPE;                                       01542000
OPTION PRIVILEGED,UNCALLABLE;                                           01544000
BEGIN                                                                   01546000
     <<VLAB MUST CONTAIN THE VOLUME LABEL OF THE VOLUME JUST            01548000
       MOUNTED IF ENTRY IS FOR A MOUNT RECOGNITION.                     01550000
     >>                                                                 01552000
                                                                        01554000
     LOGICAL MISCINFO,DEVINFO;                                          01556000
     ARRAY VNAME(0:15);                                                 01558000
     BYTE ARRAY VNAMEB(*) = VNAME;                                      01560000
     EQUATE                                                             01562000
          PVPMOUNT  = 12,  <<LOG ENTRY TYPE>>                           01564000
          VNAMELEN  = 16;  <<LENGTH OF VNAME ARRAY FOR LOG>>            01566000
                                                                        01568000
     VNAME:=0; MOVE VNAME(1):=VNAME,(15);                               01570000
     MISCINFO:=STATUS2.NREADYF                                          01572000
               CAT MOUNTYPE(13:15:1)                                    01574000
               CAT MOUNTSTAT(8:12:4)                                    01576000
               CAT VTABX(0:8:8);                                        01578000
     DEVINFO:=LDEV CAT LPDT((LDEV & LSL(1))+1)(4:12:4);                 01580000
     IF NOT STATUS2.NREADYF THEN  <<MOUNT ENTRY>>                       01582000
     IF MOUNTSTAT = VLDVOL OR MOUNTSTAT = SYSVOL THEN                   01584000
     BEGIN                                                              01586000
          MOVE VNAME:=VLAB(LVNAMELOC'),(4);                             01588000
          IF MOUNTSTAT = VLDVOL THEN  <<ITS A PRIVATE VOLUME>>          01590000
          MOVE VNAME(4):=VLAB(LANAMELOC'),(12);                         01592000
     END;                                                               01594000
     LOG12(MISCINFO,DEVINFO,VNAME,VNAMELEN,PVPMOUNT);                   01596000
END  << PVLOG12 >>;                                                     01598000
PROCEDURE PRTGENMSG (NUM);                                     <<01143>>01600000
VALUE NUM;   INTEGER NUM;                                      <<01143>>01602000
OPTION PRIVILEGED,UNCALLABLE;                                  <<RK.00>>01604000
BEGIN                                                          <<RK.00>>01606000
     GENMSG (PVERRMSGSET, NUM, %10000, LDEV,,,,, 0);           <<01143>>01608000
     PRINTMSG := FALSE;                                        <<01143>>01610000
END;                                                           <<RK.00>>01612000
$PAGE                                                          <<03723>>01616000
PROCEDURE CHECKNSD;                                            <<03723>>01618000
OPTION PRIVILEGED,UNCALLABLE;                                  <<03723>>01620000
                                                               <<03723>>01622000
BEGIN                                                          <<03723>>01624000
                                                               <<03723>>01626000
<< Called when PVPROC first awoken by PROGEN to interragate >> <<03723>>01628000
<< all ldevs for any mounted non-system domain discs and add>> <<03723>>01630000
<< them to the volume table.                                >> <<03723>>01632000
<< DB can be set anywhere.                                  >> <<03723>>01634000
                                                               <<03723>>01636000
                                                               <<03723>>01638000
                                                               <<03723>>01640000
DEFINE                                                         <<03723>>01642000
   NOT'ONLINE=   STATUS1.(14:1) = 1#,<< Device is not ready  >><<03723>>01644000
   DIRECT'ACC=  LDT(2).(10:3) = 0#,<< Direct access device  >> <<03723>>01646000
   LPDTSIZE  =  2#,                                            <<03723>>01648000
   VLABSIZE  =  128#,              << Size of disc label    >> <<03723>>01650000
   MAXLDEV   =  (0:8)#;                                        <<03723>>01652000
                                                               <<03723>>01654000
DOUBLE                                                         <<03723>>01656000
   STATUS;                                                     <<03723>>01658000
                                                               <<03723>>01660000
LOGICAL                                                        <<03723>>01662000
   STATUS0  = STATUS,                                          <<03723>>01664000
   STATUS1  = STATUS +1;                                       <<03723>>01666000
                                                               <<03723>>01668000
                                                               <<03723>>01670000
INTEGER                                                        <<03723>>01672000
   DST,                      << DST of stack upon entry >>     <<03723>>01674000
   HLDEV;                    << Max. ldev # configured  >>     <<03723>>01676000
                                                               <<03723>>01678000
ARRAY LDT(0:LDTENT-1);       << Logical Device Table entry >>  <<03723>>01680000
                                                               <<03723>>01682000
                                                               <<03723>>01684000
DST := EXCHANGEDB(0);        << Must be at stack >>            <<03723>>01686000
                                                               <<03723>>01688000
<< Get the zeroth entry of the LDT to find out how many    >>  <<03723>>01690000
<< LDEVs on the system.                                    >>  <<03723>>01692000
                                                               <<03723>>01694000
TOS := @LDT;                                                   <<03723>>01696000
TOS := LDTDST;                                                 <<03723>>01698000
TOS := 0;                                                      <<03723>>01700000
TOS := LDTENT;                                                 <<03723>>01702000
ASSEMBLE (MFDS 4);                                             <<03723>>01704000
                                                               <<03723>>01706000
HLDEV := LDT(0).MAXLDEV;                                       <<03723>>01708000
LDEV := 0;                                                     <<03723>>01710000
                                                               <<03723>>01712000
WHILE (LDEV := LDEV+1) <= HLDEV DO                             <<03723>>01714000
BEGIN                                                          <<03723>>01716000
   << Want to check all ldevs. Must be good ldev, and     >>   <<03723>>01718000
   << non-system domain disc before being added to the    >>   <<03723>>01720000
   << volume table. INITIAL will add all system           >>   <<03723>>01722000
   << discs to the table, and set all other entries to    >>   <<03723>>01724000
   << zero.                                               >>   <<03723>>01726000
                                                               <<03723>>01728000
   CHECKLDEV(LDEV);     << Make sure it's valid >>             <<03723>>01730000
   IF < THEN  GO AROUND;                                       <<03723>>01732000
                                                               <<03723>>01734000
   << Get the LDT entry to find out the device type       >>   <<03723>>01736000
                                                               <<03723>>01738000
   TOS := @LDT;                                                <<03723>>01740000
   TOS := LDTDST;                                              <<03723>>01742000
   TOS := LDEV * LDTENT;                                       <<03723>>01744000
   TOS := LDTENT;                                              <<03723>>01746000
   ASSEMBLE (MFDS 4);                                          <<03723>>01748000
                                                               <<03723>>01750000
   IF DIRECT'ACC THEN                                          <<03723>>01752000
   BEGIN        << It's a disc! >>                             <<03723>>01754000
      IF LPDT(LDEV*LPDTSIZE + 1).NSDF = 1  THEN                <<03723>>01756000
      BEGIN     << Non-system domain >>                        <<03723>>01758000
                                                               <<03723>>01760000
         << Make sure it's on line >>                          <<03723>>01762000
                                                               <<03723>>01764000
         STATUS := REQSTATUS(LDEV);                            <<03723>>01766000
         IF <>  OR  NOT'ONLINE THEN  GO AROUND;                <<03723>>01768000
                                                               <<03723>>01770000
         << Now read the label >>                              <<03723>>01772000
                                                               <<03723>>01774000
         DISCIO(LDEV,R,VLAB,0D,VLABSIZE);                      <<03723>>01776000
         IF <> THEN                                            <<03723>>01778000
         BEGIN                                                 <<03723>>01780000
            STATUS := REQSTATUS(LDEV);                         <<03723>>01782000
            IF <> THEN GO AROUND;                              <<03723>>01784000
            ERR := STATUS1.TERMSTAT;                           <<03723>>01786000
            MOUNTSTAT := IF (ERR=7  LOR  ERR=%11)              <<03723>>01788000
                            THEN UNFVOL ELSE UNRVOL;           <<03723>>01790000
         END                                                   <<03723>>01792000
         ELSE                                                  <<03723>>01794000
         MOUNTSTAT:=IF SCRATCHVOL THEN SCRVOL ELSE             <<03723>>01796000
                    IF SYSTEMVOL THEN SYSVOL ELSE              <<03723>>01798000
                    IF SERIALVOL THEN SERVOL ELSE              <<03723>>01800000
                    IF FOREIGNVOL THEN UNKVOL ELSE             <<03723>>01802000
                    VLDVOL;                                    <<03723>>01804000
                                                               <<03723>>01806000
         IF MOUNTSTAT <> SYSVOL  THEN                          <<03723>>01808000
         BEGIN                                                 <<03723>>01810000
            VTABX := ADDTOVTAB(LDEV);                          <<03723>>01812000
            IF < THEN                                          <<03723>>01814000
            BEGIN                                              <<03723>>01816000
               PRTGENMSG(NOROOM99);                            <<03723>>01818000
               GO AROUND;                                      <<03723>>01820000
            END;                                               <<03723>>01822000
         END;                                                  <<03723>>01824000
                                                               <<03723>>01826000
         IF MOUNTSTAT = SERVOL THEN                            <<03723>>01828000
         BEGIN      << Serial disc >>                          <<03723>>01830000
            LPDT1.SDLF := 1;                                   <<03723>>01832000
            LPDT1.FORS := 0;                                   <<03723>>01834000
         END                                                   <<03723>>01836000
         ELSE                                                  <<03723>>01838000
            IF MOUNTSTAT = UNKVOL  THEN                        <<03723>>01840000
            BEGIN      << Foreign disc >>                      <<03723>>01842000
               LPDT1.SDLF := 1;                                <<03723>>01844000
               LPDT1.FORS := 1;                                <<03723>>01846000
            END;                                               <<03723>>01848000
                                                               <<03723>>01850000
         << Create disc free space data segment for PV >>      <<03723>>01852000
                                                               <<03723>>01854000
         IF mountstat = vldvol THEN                            <<03723>>01856000
            BEGIN  << Private Volume >>                        <<03723>>01858000
                                                               <<03723>>01860000
               dfs'status := Create'Dfs'Data'Seg (ldev, vlab,  <<03723>>01862000
                                           FALSE, FALSE);      <<03723>>01864000
               IF NOT dfs'status THEN                          <<03723>>01866000
                  Process'Dfs'Error (ldev, dfs'status, 0);     <<03723>>01868000
                                                               <<03723>>01870000
            END;   << Private Volume >>                        <<03723>>01872000
                                                               <<03723>>01874000
       PVLOG12(1);                                             <<03723>>01876000
    END;                                                       <<03723>>01878000
 END;                                                          <<03723>>01880000
                                                               <<03723>>01882000
AROUND:                                                        <<03723>>01884000
END;                                                           <<03723>>01886000
                                                               <<03723>>01888000
EXCHANGEDB(DST);                                               <<03723>>01890000
                                                               <<03723>>01892000
END;      << Procedure CHECKNSD >>                             <<03723>>01894000
                                                                        01896000
$PAGE "PVPROC - AUTO-RECOGNITION LOOP (OUTER BLOCK)"                    01898000
                                                                        01900000
<<******************* O-U-T-E-R  B-L-O-C-K ************************>>   01902000
                                                                        01904000
     CHECKNSD;  <<LOOK FOR MOUNTED, NON-SYSTEM VOLUMES>>                01906000
     IF ABSOLUTE(SYSUP) THEN                                            01908000
        WAIT(%20,0)                                                     01910000
     ELSE                                                               01912000
        AWAKE(ABSOLUTE(PROGENPINX),2,%20);                              01914000
     PRT'READMSG:=FALSE;  <<READ ONLY SWITCH OFF>>             <<01600>>01916000
     WHILE TRUE DO                                                      01918000
     BEGIN                                                              01920000
          WHILE ABSOLUTE(PVRECG'CNT) > 0 DO  <<VOLUME MOUNTED>>         01922000
          BEGIN                                                         01924000
               DISABLE;                                                 01926000
               ABSOLUTE(PVRECG'CNT):=ABSOLUTE(PVRECG'CNT)-1;            01928000
               ENABLE;                                                  01930000
               PRINTMSG:=TRUE;  <<ASSUME VALID RECOGNITION>>            01932000
               IF (LDEV:=MOUNTEDLDEV) <> 0 THEN  <<VALID RECOGNITION>>  01934000
               BEGIN                                                    01936000
                    MOUNTSTAT:=0;  <<ASSUME VALID PV VOLUME>>           01938000
<<>>                                                           <<RK.05>>01940000
                    TOS:=@LDTX0;                               <<SD.00>>01942000
                    TOS:=LDTDST;                               <<SD.00>>01944000
                    TOS:=0;                                    <<SD.00>>01946000
                    TOS:=LDTENT;                               <<SD.00>>01948000
                    ASSEMBLE(MFDS 4);                          <<SD.00>>01950000
                    TOS:=@LDTX0;                               <<SD.00>>01952000
                    TOS:=LDTDST;                               <<SD.00>>01954000
                    TOS:=LDTX1+LDTX3+LDEV*LDTXENT;             <<SD.00>>01956000
                    LDTX'OFFSET := S0;                         <<03586>>01958000
                    TOS:=LDTXENT;                              <<SD.00>>01960000
                    ASSEMBLE(MFDS 4);                          <<SD.00>>01962000
                                                               <<03769>>01964000
<< PVPROC should ignore certain unexpected interrupts from  >> <<04157>>01966000
<< CS'80 discs. For example, when a disc does automatic head>> <<04157>>01968000
<< alignment, it generates an unexpected interrupt. In order >><<04157>>01970000
<< to detect this situation, PVPROC will do a read status    >><<04157>>01972000
<< with special values for P1 and P2. If the driver wants us >><<04157>>01974000
<< to ignore the interrupt, %101010 will be returned in the  >><<04157>>01976000
<< first word of the status information.                     >><<04157>>01978000
                                                               <<04157>>01980000
                    DISC'STATUS := 0;                          <<04157>>01982000
                                                               <<04157>>01984000
                    IF CS'80  THEN                             <<04157>>01986000
                    BEGIN                                      <<04157>>01988000
                      STATUS:=ATTACHIO(LDEV,0,0,@DISC'STATUS,  <<04157>>01990000
                             STATUS'CS80,1,P1'CS80,P2'CS80,1); <<04157>>01992000
                      IF STATUS1.(13:3) <> 1 THEN              <<04157>>01994000
                      BEGIN      << Report I/O error to conso>><<04157>>01996000
                        REPORT'IOERROR(LDEV,STATUS1.(8:8));    <<04157>>01998000
                        GO WAIT1;                              <<04157>>02000000
                      END;                                     <<04157>>02002000
                                                               <<04157>>02004000
                      IF DISC'STATUS = IGNORE'INT  THEN        <<04157>>02006000
                      BEGIN                                    <<04157>>02008000
                      << Now want to reset the ownership bits>><<04157>>02010000
                      << of the LPDT to whatever condition   >><<04157>>02012000
                      << they were before this interrupt -   >><<04157>>02014000
                      << the device may have been owned.     >><<04157>>02016000
                                                               <<04157>>02018000
                        DISABLE;                               <<04157>>02020000
                        IF LPDT1.SDLF = 1 AND LPDT1.FORS = 0   <<04157>>02022000
                                 AND  LDTX1 <> 0               <<04157>>02024000
                          THEN LPDT1.DRSTATE := 1 << Owned >>  <<04157>>02026000
                        ELSE LPDT1.DRSTATE := 0;  << Unowned>> <<04157>>02028000
                        ENABLE;                                <<04157>>02030000
                                                               <<04157>>02032000
                        GO WAIT1;                              <<04157>>02034000
                      END;                                     <<04157>>02036000
                    END;                                       <<04157>>02038000
                                                               <<04157>>02040000
                    STATUS:=REQSTATUS(LDEV);                   <<RK.05>>02042000
                    IF <> THEN                                 <<03769>>02044000
                    BEGIN                                      <<03769>>02046000
                        PRTGENMSG(IOFAIL);                     <<03769>>02048000
                        GO WAIT1;                              <<03769>>02050000
                    END;                                       <<03769>>02052000
                                                               <<03769>>02054000
                                                               <<03769>>02056000
                    IF STATUS2.READ'SWITCH = 1 THEN            <<01600>>02058000
                       <<DEVICE IS READ ONLY>>                 <<01600>>02060000
                       PRT'READMSG := TRUE                     <<03718>>02062000
                     ELSE PRT'READMSG := FALSE;                <<03718>>02064000
                                                               <<03769>>02066000
                    IF STATUS2.NREADYF THEN  <<WENT OFF-LINE>>          02068000
                    BEGIN                                               02070000
                         IF LPDT1.MNTF THEN                    <<2B.00>>02072000
                         BEGIN                                          02074000
                            PRTGENMSG (INUSE'PVDISM);          <<01143>>02076000
                         END ELSE                                       02078000
                         IF LDTX1<>0 AND                       <<SD.00>>02080000
                         LPDT1.SDLF=1 AND                       <<<FDF>>02082000
                         LPDT1.FORS=0 THEN                     <<01115>>02084000
                         BEGIN                                 <<00.SD>>02086000
                            PRTGENMSG (INUSE'SERDISM);         <<01143>>02088000
                               VTABX:=DELFRVTAB(LDEV);         <<01115>>02090000
                            << Remove from Tape Label Table >> <<03586>>02092000
                                                               <<03586>>02094000
                            CLEANLDEV(LDEV);                   <<03586>>02096000
                                                               <<03586>>02098000
                         END ELSE                              <<00.SD>>02100000
                         IF LDTX1<>0 AND                       <<01115>>02102000
                            LPDT1.SDLF=1 AND LPDT1.FORS=1      <<01115>>02104000
                           THEN                                <<01115>>02106000
                             BEGIN                             <<01115>>02108000
                               PRTGENMSG(INUSE'FORDMT);        <<01143>>02110000
                               VTABX:=DELFRVTAB(LDEV);         <<01115>>02112000
                             END                               <<01115>>02114000
                         ELSE                                  <<01115>>02116000
                         BEGIN                                          02118000
                              VTABX:=DELFRVTAB(LDEV);                   02120000
                              IF = THEN  <<VTAB ENTRY FOUND>>           02122000
                              BEGIN                                     02124000
                                 PRTGENMSG (VOL'DISMOUNT);     <<01143>>02126000
                              END                              <<rk.05>>02128000
                              ELSE                             <<rk.05>>02130000
                              BEGIN                            <<rk.05>>02132000
                                   MSGLOC:=34;                 <<rk.05>>02134000
                                   MOVE MSG:=("(VOLUME MOUNTE",<<RK.05>>02136000
                                      "D)",CR,LF,"        ",   <<RK.05>>02138000
                            "DISMOUNT");             <<RK.05>>          02140000
                              END;                             <<rk.05>>02142000
                                                               <<03500>>02144000
                              << Delete disc free space >>     <<03500>>02146000
                              << data segment.          >>     <<03500>>02148000
                                                               <<03500>>02150000
                              Delete'Dfs'Data'Seg (ldev);      <<03500>>02152000
                                                               <<03500>>02154000
                              << If serial disc, remove from >><<03586>>02156000
                              << Tape Label Table.           >><<03586>>02158000
                                                               <<03586>>02160000
                              IF LPDT1.SDLF = 1 AND            <<03586>>02162000
                                 LPDT1.FORS = 0                <<03586>>02164000
                                THEN CLEANLDEV(LDEV);          <<03586>>02166000
                                                               <<03586>>02168000
                         END;                                           02170000
                         DISABLE;                              <<04157>>02172000
                         LPDT1.SDLF:=0;                        <<SD.00>>02174000
                         ENABLE;                               <<04157>>02176000
                    END ELSE                 <<WENT ON-LINE>>           02178000
                                                               <<03769>>02180000
                    IF NOT LPDT((LDEV & LSL(1))+1).MNTF THEN            02182000
                    BEGIN                                               02184000
                         DISCIO(LDEV,R,VLAB,0D,128);  <<READ LABEL>>    02186000
                         IF <> THEN                                     02188000
                         BEGIN                                          02190000
                              VTABX:=ADDTOVTAB(LDEV,%1);                02192000
                              IF < THEN PRTGENMSG(NOROOM98)    <<03533>>02194000
                              ELSE BEGIN                       <<01143>>02196000
                                   STATUS:=REQSTATUS(LDEV);             02198000
                                   IF <> THEN                  <<03769>>02200000
                                   BEGIN                       <<03769>>02202000
                                      PRTGENMSG(IOFAIL);       <<03769>>02204000
                                      GO WAIT1;                <<03769>>02206000
                                   END;                        <<03769>>02208000
                                                               <<03769>>02210000
                                   ERR:=STATUS1.TERMSTAT;               02212000
                                   IF (ERR=7 LOR ERR=%11) THEN          02214000
                                   BEGIN                                02216000
                                        MOUNTSTAT:=UNFVOL;              02218000
                                        PRTGENMSG(UNFORMVOL);  <<01143>>02220000
                                   END ELSE                             02222000
                                   BEGIN                                02224000
                                        MOUNTSTAT:=UNRVOL;              02226000
                                        PRTGENMSG(UNREADLAB);  <<01143>>02228000
                                   END;                                 02230000
                              END;                                      02232000
                         END ELSE                                       02234000
                         BEGIN                                          02236000
                              TOS := @MSG;                     <<03769>>02238000
                              MSGLOC := 0;                     <<03769>>02240000
                                                               <<03769>>02242000
                              VTABX:=ADDTOVTAB(LDEV);                   02244000
                              IF < THEN PRTGENMSG(NOROOM99)    <<03533>>02246000
                              ELSE BEGIN                       <<01143>>02248000
                              IF CARRY THEN                    <<RK.05>>02252000
                                 BEGIN                         <<RK.05>>02254000
                                 MOVE *:=("(VOLUME DI",        <<RK.05>>02256000
                                    "SMOUNTED) ",CR,LF,        <<RK.05>>02258000
                                    "        "),2;             <<RK.05>>02260000
                                 MSGLOC:=30;                   <<RK.05>>02262000
                                 DISABLE;                      <<04157>>02264000
                                 LPDT1.SDLF:=0;                <<RK.09>>02266000
                                 ENABLE;                       <<04157>>02268000
                                 END;                          <<RK.05>>02270000
                              CASE DISCTYPE(LDEV,VLAB) OF      <<01115>>02272000
                               BEGIN                           <<01115>>02274000
                                BEGIN  <<SYSTEM VOLUME>>       <<01115>>02276000
                                     MOUNTSTAT:=SYSVOL;        <<01115>>02278000
                                     MSGLOC:=MSGLOC+13;        <<01115>>02280000
                                     MOVE  * :="SYSTEM VOLUME";<<01115>>02282000
                                END;                           <<01115>>02284000
                                BEGIN  <<PRIVATE VOLUME>>      <<01115>>02286000
                                     MOVE NAME:=VLABB(LVNAMELOC),(8);   02288000
                                     MOVE  * :=NAME WHILE AN,1;<<01115>>02290000
                                     MOVE * :=" OF ",2;        <<01115>>02292000
                                     MOVE NAME:=VLABB(LVSNAMELOC),(8);  02294000
                                     MOVE * :=NAME WHILE AN,1; <<01115>>02296000
                                     MOVE * :=".",2;           <<01115>>02298000
                                     MOVE NAME:=VLABB(LGNAMELOC),(8);   02300000
                                     MOVE * :=NAME WHILE AN,1; <<01115>>02302000
                                     MOVE * :=".",2;           <<01115>>02304000
                                     MOVE NAME:=VLABB(LANAMELOC),(8);   02306000
                                     MOVE * :=NAME WHILE AN,1; <<01115>>02308000
                                     MSGLOC:=TOS-@MSG;         <<01115>>02310000
                                                               <<03500>>02312000
                                     << Create disc free space <<03500>>02314000
                                     << data segement for P.V. <<03500>>02316000
                                     << if LDEV in UP.         <<03500>>02318000
                                                               <<03500>>02320000
                                     TOS := @ldt'entry;        <<03500>>02322000
                                     TOS := ldtdst;            <<03500>>02324000
                                     TOS := ldev * ldtent;     <<03500>>02326000
                                     TOS := ldtent;            <<03500>>02328000
                                     ASSEMBLE (MFDS 4);        <<03500>>02330000
                                                               <<03500>>02332000
                                     IF ldt'entry (ldt'f) THEN <<03500>>02334000
                                     BEGIN  << Its UP >>       <<03500>>02336000
                                                               <<03500>>02338000
                                     dfs'status :=             <<03500>>02340000
                                        Create'Dfs'Data'Seg    <<03500>>02342000
                                           (ldev, vlab, FALSE, <<03500>>02344000
                                            FALSE);            <<03500>>02346000
                                                               <<03500>>02348000
                                     IF NOT dfs'status THEN    <<03500>>02350000
                                        Process'Dfs'Error      <<03500>>02352000
                                           (ldev, dfs'status,  <<03500>>02354000
                                            0);                <<03500>>02356000
                                                               <<03500>>02358000
                                     END;   << Its UP >>       <<03500>>02360000
                                                               <<03500>>02362000
                                END;                           <<01115>>02364000
                                BEGIN  <<SERIAL VOLUME>>       <<01115>>02366000
                                     MOUNTSTAT:=SERVOL;        <<01115>>02368000
                                     MSGLOC:=MSGLOC+11;        <<01115>>02370000
                                     MOVE  * :="SERIAL DISC";  <<01115>>02372000
                                     DISABLE;                  <<04157>>02374000
                                     LPDT1.SDLF:=1;            <<01115>>02376000
                                     LPDT1.FORS := 0;          <<04524>>02378000
                                     ENABLE;                   <<04157>>02380000
                                     IF LDTX1<>0 THEN          <<01115>>02382000
                                        BEGIN                  <<01115>>02384000
                                        << May be re-mounted >><<03619>>02386000
                                        << because of reel   >><<03619>>02388000
                                        << switch...check it!>><<03619>>02390000
                                        REEL'SWITCH (LDEV);    <<03619>>02392000
                                        DISABLE;               <<04157>>02394000
                                        LPDT1.DRSTATE:=1;      <<01115>>02396000
                                        ENABLE;                <<04157>>02398000
                                        GO TO SERIALREMOUNT;   <<01443>>02400000
                                        END                    <<03586>>02402000
                                     ELSE                      <<03586>>02404000
                                        LABELED'SDISC(LDEV,LDTX<<03586>>02406000
                                           ,LDTX'OFFSET);      <<03586>>02408000
                                                               <<03586>>02410000
                                END;                           <<01115>>02414000
                                BEGIN  <<SCRATCH VOLUME>>      <<01115>>02416000
                                     MOUNTSTAT:=SCRVOL;        <<01115>>02418000
                                     MSGLOC:=MSGLOC+14;        <<01115>>02420000
                                     MOVE  * :="SCRATCH VOLUME"; <<FDF>>02422000
                                END;                           <<01115>>02424000
                                BEGIN  <<FOREIGN VOLUME>>      <<01115>>02426000
                                     MOUNTSTAT:=UNKVOL;        <<01115>>02428000
                                     MSGLOC:=MSGLOC+14;        <<01115>>02430000
                                     MOVE  * :="FOREIGN VOLUME"; <<FDF>>02432000
                                     DISABLE;                  <<04157>>02434000
                                     LPDT1.SDLF:=1;            <<01115>>02436000
                                     LPDT1.FORS:=1;            <<01115>>02438000
                                     ENABLE;                   <<04157>>02440000
                                     IF LDTX1<>0 THEN          <<01115>>02442000
                                       GO TO INUSEREMOUNT;     <<01115>>02444000
                                END;                           <<01115>>02446000
                               END; << OF CASE ON DISCTYPE >>  <<01115>>02448000
                           END;                                <<RK.05>>02450000
                         END;                                           02452000
                    END ELSE                                   <<RK.00>>02454000
                    BEGIN                                      <<RK.00>>02456000
INUSEREMOUNT:           PRTGENMSG(INUSE'REMOUNT);              <<01143>>02458000
                    END;                                       <<RK.00>>02460000
SERIALREMOUNT:                                                 <<01443>>02462000
                    PVLOG12(0);  << MAKE LOG ENTRY >>          <<01143>>02464000
                    IF PRINTMSG THEN  <<VALID MOUNT/DISMOUNT>>          02466000
                    BEGIN                                               02468000
                         MSG(MSGLOC+13):=0;  <<GENMSG STOP>>            02470000
                         MOVE MSG(MSGLOC):=" ON LDEV#    ";             02472000
                         ASCII(LDEV,10,MSG(MSGLOC+10));                 02474000
                         GENMSG(-1,@MSG,,,,,,,0);                       02476000
                         IF PRT'READMSG THEN GENMSG            <<01600>>02478000
                         (PVERRMSGSET,READ'ONLY,%10000,,,,,,0);<<01600>>02480000
                    END;                                                02482000
               END;                                                     02484000
          END;                                                          02486000
                                                               <<03769>>02488000
WAIT1:                                                         <<03769>>02490000
                                                               <<03769>>02492000
          WAIT(-%20,0); <<WAIT FOR NEXT MOUNT>>                <<RK.00>>02494000
     END;                                                               02496000
HELP;                                                          <<RK.00>>02498000
END.                                                                    02500000
