<< LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION>>               30260000
                                                                        30262000
$PAGE "DODSDIT(LDEV, TYPECHECK): Format DS DIT"                         30264000
$CONTROL SEGMENT=TABLESDS                                               30266000
COMMENT                                                                 30268000
                                                                        30270000
Purpose:                                                                30272000
<< IN ORDER TO PROCESS THE DS DITS ASSOCIATED WITH THE     >>  <<01199>>30274000
<< LOGICAL DEVICE "LDEV", ALL DEVICES MUST BE EXAMINED IN  >>  <<01199>>30276000
<< ORDER TO DETERMINE THAT THAT PARTICULAR DEVICE IS       >>  <<01199>>30278000
<< CONTROLLED BY LDEV.  EVERY ENTRY IN THE LPDT IS SCANNED >>  <<01199>>30280000
<< AND IF A DEVICE IS A DS DEVICE AND IT BACKREFERENCES    >>  <<01199>>30282000
<< LDEV, ITS DS DIT IS FORMATTED.                          >>  <<01199>>30284000
                                                                        30286000
Input parameters:                                                       30288000
                                                                        30290000
Output parameters:                                                      30292000
                                                                        30294000
Globals Referenced:                                                     30296000
                                                                        30298000
Globals Altered:                                                        30300000
                                                                        30302000
Data Structures:                                                        30304000
                                                                        30306000
Algorithm:                                                              30308000
                                                                        30310000
;                                                                       30312000
PROCEDURE DODSDIT( LDEV, TYPECHECK );                          <<01199>>30314000
VALUE LDEV, TYPECHECK;                                         <<01199>>30316000
INTEGER LDEV, TYPECHECK;                                       <<01199>>30318000
BEGIN                                                         <<<01.02>>30320000
                                                              <<<01.02>>30322000
DOUBLE SCRATCH,DITPTR,LPDT;                       <<<01.02>>            30324000
                                                               <<01199>>30326000
LOGICAL                                                        <<01199>>30328000
   DLT,                     << TABLE ADDRESSES.            >>  <<01199>>30330000
   DIT;                     << DIT ADDRESS.                >>  <<01199>>30332000
                                                               <<01199>>30334000
INTEGER                                                        <<01199>>30336000
   LDINDX,                  << LOGICAL DEVICE LOOP INDEX.  >>  <<01199>>30338000
   NUMENTRIES,              << NUMBER OF ENTRIES IN LPDT.  >>  <<01199>>30340000
   SUBTYPE,                 << DEVICE SUBTYPE.             >>  <<01199>>30342000
   BACKREF;                 << BACK REFERENCE LDEV NUMBER. >>  <<01199>>30344000
                                                               <<01199>>30346000
LOGICAL ARRAY SCR0(*)=SCRATCH;                                 <<01.02>>30348000
LOGICAL ARRAY SCR1(*)=SCR0(1);                                 <<01.02>>30350000
LOGICAL WORK1,SIZE,DTYPE,LD;                                  <<<01.02>>30352000
LOGICAL MULTIPT := FALSE;                                      <<01199>>30354000
INTEGER INDX;                                                 <<<01.02>>30356000
                                                              <<<01.02>>30358000
                                                              <<<01.02>>30360000
SUBROUTINE PRINTDSDIT;                                         <<01199>>30362000
                                                               <<01199>>30364000
<< PRINTS THE DIT OF DS DEVICE WITH LOGICAL DEVICE NUMBER, >>  <<01199>>30366000
<< "LD".  THIS SUBROUTINE ASSUMES THAT MOST ERROR CHECKS   >>  <<01199>>30368000
<< WERE ALREADY DONE.                                      >>  <<01199>>30370000
                                                               <<01199>>30372000
                                                               <<01199>>30374000
                                                               <<01199>>30376000
BEGIN                                                          <<01199>>30378000
   DITPTR:=SCRATCH;                                           <<<01.02>>30380000
   SCR1:=CORE(DITPTR+4D);<<GET DLT PTR>>                      <<<01.02>>30382000
   SCR1:=SCR1+%1000;<<MAKE IT ABSOLUTE>>                      <<<01.02>>30384000
   WORK1:=CORE(SCRATCH+5D);<<DLT WORD 5/DITSIZE/DEVTYPE>>     <<<01.02>>30386000
   SIZE:=WORK1.(0:8);                                         <<<01.02>>30388000
   DTYPE:=WORK1.(8:8);                                        <<<01.02>>30390000
   IF MULTIPT THEN GO HEADONE;                                 <<01199>>30392000
   IF DTYPE=41 THEN                                           <<<01.02>>30394000
      MOVE BBUF(12) := "(IODS0 CONTROLLER)";                   <<01199>>30396000
   IF DTYPE=16 THEN                                            <<01.02>>30398000
      MOVE BBUF(12) := "(IODS0 TERMINAL DEVICE)";              <<01199>>30400000
   IF BBUF(12)="  " THEN GO GETOUT;<<NOT DS DEV..ALL OVER>>   <<<01.02>>30402000
                                                               <<01199>>30404000
HEADONE:                                                       <<01199>>30406000
                                                               <<01199>>30408000
   PRINTLINE;                                                 <<<01.02>>30410000
   SKIPLINES(1);                                              <<<01.02>>30412000
   IF TYPECHECK <> 17 THEN                                     <<01199>>30414000
   BEGIN                                                       <<01199>>30416000
      MOVE BBUF(12) := "UNIT";                                 <<01199>>30418000
      @PBUF := @BBUF + 17;                                     <<01199>>30420000
      WORK1 := CORE( DITPTR+10D);                              <<01199>>30422000
      WORK1 := WORK1.(8:8);                                    <<01199>>30424000
      ASCII( WORK1, 10, PBUF );                                <<01199>>30426000
   END;                                                        <<01199>>30428000
   @PBUF:=@BBUF+32;                                           <<<01.02>>30430000
                                                               <<01199>>30432000
   MOVE BBUF(20):="LOGICAL DEV";                              <<<01.02>>30434000
   ASCII(LD,10,PBUF);                                         <<<01.02>>30436000
   MOVE BBUF(37):="FLAGS =";                                  <<<01.02>>30438000
   @PBUF:=@BBUF+45;                                           <<<01.02>>30440000
   WORK1:=CORE(DITPTR);                                       <<<01.02>>30442000
   PUTNUM(WORK1);<<FLAGS>>                                    <<<01.02>>30444000
   MOVE BBUF(55):="NEXT DIT =";                               <<<01.02>>30446000
   WORK1:=CORE(DITPTR+1D);                                    <<<01.02>>30448000
   @PBUF:=@BBUF+66;                                           <<<01.02>>30450000
   PUTNUM(WORK1);<<NEXT DIT>>                                 <<<01.02>>30452000
   MOVE BBUF(74):="DLTP =";                                   <<<01.02>>30454000
   WORK1:=CORE(DITPTR+4D);                                    <<<01.02>>30456000
   @PBUF:=@BBUF+81;                                           <<<01.02>>30458000
   PUTNUM(WORK1);<<DLTP>>                                     <<<01.02>>30460000
   MOVE BBUF(104):="IOQP =";                                  <<<01.02>>30462000
   WORK1:=CORE(DITPTR+2D);                                    <<<01.02>>30464000
   @PBUF:=@BBUF+111;                                          <<<01.02>>30466000
   PUTNUM(WORK1);<<IOQP>>                                     <<<01.02>>30468000
   PRINTLINE;                                                 <<<01.02>>30470000
   SKIPLINES(1);                                              <<<01.02>>30472000
   IF SIZE=0 THEN RETURN;                                     <<<01.02>>30474000
   SCRATCH:=DITPTR-%1000D;                                    <<<01.02>>30476000
                                                               <<03752>>30478000
<< NOW PRINT THE ACTUAL DIT >>                                 <<03752>>30480000
   PRINT'OCTAL'DIT( DITPTR, SCR1, INTEGER( SIZE ));            <<03752>>30482000
                                                               <<03752>>30484000
   SKIPLINES(2);                                              <<<01.02>>30486000
   GETOUT:                                                     <<01199>>30488000
                                                               <<01199>>30490000
END;  << PRINTDSDIT >>                                         <<01199>>30492000
                                                               <<01199>>30494000
<< M A I N   B O D Y                                       >>  <<01199>>30496000
                                                               <<01199>>30498000
                                                               <<01199>>30500000
<< CHECK THE PARAMETER.                                    >>  <<01199>>30502000
   IF LDEV = 0 THEN RETURN;                                    <<01199>>30504000
                                                               <<01199>>30506000
<< DETERMINE THE NUMBER OF ENTRIES IN THE LPDT.            >>  <<01199>>30508000
   LPDT := DSTTOADDR(%15);                                     <<01199>>30510000
   NUMENTRIES := CORE(LPDT);                                   <<01199>>30512000
                                                               <<01199>>30514000
<< PROCESS EVERY ENTRY IN THE LPDT.                        >>  <<01199>>30516000
                                                               <<01199>>30518000
FOR LDINDX := 1 UNTIL NUMENTRIES DO                            <<01199>>30520000
BEGIN                                                          <<01199>>30522000
                                                               <<01199>>30524000
<< FOR EVERY DEVICE IN THE SYSTEM, GET THE DEVICE TYPE,    >>  <<01199>>30526000
<< SUBTYPE, DIT POINTER, AND BACKREFERENCE.                >>  <<01199>>30528000
   LD := LOGICAL( LDINDX );                                    <<01199>>30530000
   SCRATCH:=LPDT+DOUBLE(LD*4);                                          30532000
    IF INTEGER(CORE(SCRATCH))<0 THEN GO NEXTDEV;               << MCW >>30534000
   DIT:=CORE(SCRATCH+2D)+%1000;                                         30536000
   SCRATCH:=DOUBLE(DIT);                                                30538000
                                                               <<01199>>30540000
<< GET DIT SIZE AND DEVICE TYPE FROM DLT ENTRY.            >>  <<01199>>30542000
   DLT := CORE( SCRATCH + 4D ) + %1000;                        <<01199>>30544000
   SCR0 := 0;                                                  <<01199>>30546000
   SCR1 := DLT;                                                <<01199>>30548000
   WORK1 := CORE( SCRATCH + 5D );                              <<01199>>30550000
   DTYPE := WORK1.(8:8);                                       <<01199>>30552000
   SIZE := WORK1.(0:8);                                        <<01199>>30554000
                                                               <<01199>>30556000
<< CHECK FOR DS TYPE DEVICES (DEVICE TYPES 16 AND 41).     >>  <<01199>>30558000
   IF DTYPE <> 41 AND DTYPE <> 16 THEN GO NEXTDEV;             <<01199>>30560000
   SCR0 := 0;                                                  <<01199>>30562000
   SCR1 := DIT;                                                <<01199>>30564000
   IF DTYPE = 16 THEN   << MULTIPOINT DEVICE CHECK.        >>  <<01199>>30566000
   BEGIN                                                       <<01199>>30568000
                                                               <<01199>>30570000
      WORK1 := CORE( SCRATCH );   << CHECK TERMINAL BIT    >>  <<01199>>30572000
      IF WORK1.(0:1) = 1  THEN GO NEXTDEV;                     <<01199>>30574000
      WORK1 := CORE( SCRATCH + 11D );  << BACK REFERENCE   >>  <<01199>>30576000
      IF INTEGER( WORK1) <> LDEV  THEN GO NEXTDEV;             <<01199>>30578000
      MULTIPT := TRUE;       << GOOD MULTIPOINT DEVICE     >>  <<01199>>30580000
      WORK1 := CORE( SCRATCH +  9D );  << SUPERVISOR CHECK >>  <<01199>>30582000
      IF WORK1.(7:1) = 1                                       <<01199>>30584000
         THEN MOVE BBUF(12) := "(MULTIPOINT SUPERVISOR)"       <<01199>>30586000
         ELSE MOVE BBUF(12) := "(MULTIPOINT TERMINAL)  ";      <<01199>>30588000
                                                               <<01199>>30590000
   END                                                         <<01199>>30592000
                                                               <<01199>>30594000
   ELSE   << POSSIBLE IODS0 CONTROLLER                     >>  <<01199>>30596000
   BEGIN                                                       <<01199>>30598000
      BACKREF := INTEGER( CORE( SCRATCH + 7D ) ).(0:8);        <<01199>>30600000
      IF BACKREF <> LDEV        << WRONG BACKREF           >>  <<01199>>30602000
         THEN GO NEXTDEV;                                      <<01199>>30604000
      MULTIPT := FALSE;                                        <<01199>>30606000
   END;                                                        <<01199>>30608000
                                                               <<01199>>30610000
   SCR0 := 0;                                                  <<01199>>30612000
   SCR1 := DIT;                                                <<01199>>30614000
   PRINTDSDIT;                                                 <<01199>>30616000
   SCR0 := 0;                                                  <<01199>>30618000
   SCR1 := DIT;                                                <<01199>>30620000
   LD := CORE( SCRATCH + 11D);                           <<01199>>      30622000
   WHILE LD <> 0 DO                                            <<01199>>30624000
   BEGIN                                                       <<01199>>30626000
      SCR0 := 0;                                               <<01199>>30628000
      SCRATCH := DOUBLE(LD * 4) + LPDT;                                 30630000
      DIT := SCR1 := CORE( SCRATCH +2D) + %1000;                        30632000
      PRINTDSDIT;                                              <<01199>>30634000
      SCR0 := 0;                                               <<01199>>30636000
      SCR1 := DIT;                                             <<01199>>30638000
      LD := CORE( SCRATCH + 11D);                              <<01199>>30640000
   END;                                                        <<01199>>30642000
   NEXTDEV:                                                    <<01199>>30644000
                                                               <<01199>>30646000
END;                                                           <<01199>>30648000
                                                               <<01199>>30650000
   BBUF:=" ";                                                 <<<01.02>>30652000
   MOVE BBUF(1):=BBUF,(40);                                   <<<01.02>>30654000
END<<DODSDIT>>;                                               <<<01.02>>30656000
