<< LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION>>      <<06883>>00000001
$EDIT                                                          <<06883>>00046000
$EDIT                                                          <<06883>>00054000
$EDIT                                                          <<06883>>00118000
$EDIT                                                          <<06883>>00126000
$EDIT                                                          <<06883>>00130000
$EDIT                                                          <<06883>>00146000
$EDIT                                                          <<06883>>00148000
$EDIT VOID=00154000                                            <<06883>>00150000
$EDIT                                                          <<06883>>00160000
$EDIT VOID=00198000                                            <<06883>>00184000
    TERMINAL  = (TERMINAL':1)#,                                <<06883>>00212000
$EDIT                                                          <<06883>>00256000
$EDIT VOID=00268000                                            <<06883>>00262000
    PCBIO    =IOQ'PCB<>0#,<<TRUE IF PROC. RELATED IO>><<00.TE>><<06883>>00290000
$EDIT                                                          <<06883>>00292000
$EDIT                                                          <<06883>>00300000
$INCLUDE INCLPCB5                                              <<06883>>00326100
$INCLUDE INCLDRQ                                               <<06883>>00326900
$INCLUDE INCLIOQ                                               <<06883>>00327000
$INCLUDE INCLSBH                                               <<06883>>00327100
$INCLUDE INCLLPDT                                              <<06883>>00327200
$INCLUDE INCLOBJ                                               <<06883>>00327300
$EDIT VOID=00358000                                            <<06883>>00350000
DOUBLE PROCEDURE P'ATTACHIO(LDEV,QMISC,DSTX,ADR,FNCT,CNT,P1,   <<*7530>>00380100
                          P2,FLAGS,EB,ES);                     <<*7530>>00380200
  VALUE LDEV,QMISC,DSTX,ADR,FNCT,CNT,P1,P2,FLAGS,EB,ES;        <<*7530>>00380300
  INTEGER LDEV,QMISC,DSTX,ADR,FNCT,CNT,P1,P2,FLAGS,ES;         <<*7530>>00380400
  DOUBLE EB;                                                   <<*7530>>00380500
  OPTION EXTERNAL,VARIABLE;                                    <<*7530>>00380600
                                                               <<*7530>>00380700
$EDIT VOID=00426000                                            <<06883>>00420000
$EDIT VOID=00496000                                            <<06883>>00482000
  VALUE PNTR;   INTEGER PNTR;                                  <<06883>>00508000
                                                               <<06883>>00730010
integer procedure LDEVTOTYPE(LDEV);                            <<06883>>00730020
value LDEV;                                                    <<06883>>00730030
integer LDEV;                                                  <<06883>>00730040
option external;                                               <<06883>>00730050
                                                               <<06883>>00730060
integer procedure LDEVTOSUBTYPE(LDEV);                         <<06883>>00730070
value LDEV;                                                    <<06883>>00730080
integer LDEV;                                                  <<06883>>00730090
option external;                                               <<06883>>00730100
DOUBLE SEG;                                                    <<06883>>00768000
DOUBLE SEG;                                                    <<06883>>00778000
    INTEGER LPDT'INDEX;                                        <<06883>>00848000
    INTEGER POINTER DITP;                                      <<06883>>00850000
      LPDT'INDEX := LDEV * SIZE'OF'LPDT'ENTRY;                 <<06883>>00872000
      @DITP := LPDT'DIT'PTR;                                   <<06883>>00873000
<<  INTEGER PROCEDURE TO HANDLE THE ENABLING/DISABLING >>      <<06883>>00956050
<<  OF RPS FOR CS'80 DISCS. IT WILL RETURN AN INTEGER  >>      <<06883>>00956060
<<  STATUS.                                            >>      <<06883>>00956070
<<                                                     >>      <<06883>>00956080
INTEGER PROCEDURE RPS'ALLOW (LDEV, FUNC);                      <<06883>>00956090
VALUE LDEV, FUNC;                                              <<06883>>00956100
INTEGER LDEV,FUNC;                                             <<06883>>00956110
                                                               <<06883>>00956120
BEGIN                                                          <<06883>>00956130
  EQUATE                                                       <<06883>>00956140
                                                               <<06883>>00956150
    CS80'TYPE         = 3,                                     <<06883>>00956160
    DISABLE'DONE      = %200,                                  <<06883>>00956170
    ENABLE'DONE       = %201,                                  <<06883>>00956180
    INVALID'DEVICE    = %202,                                  <<06883>>00956190
    RPS'NOT'AVAILABLE = %203,                                  <<06883>>00956200
    STATUS'DISABLE    = %204,                                  <<06883>>00956210
    STATUS'ENABLE     = %205,                                  <<06883>>00956220
                                                               <<06883>>00956230
<< FUNCTION OF ATTACHIO CALLS >>                               <<06883>>00956240
                                                               <<06883>>00956250
    RPS'ENABLE        = 97,                                    <<06883>>00956260
    RPS'DISABLE       = 98,                                    <<06883>>00956270
    RPS'STATUS        = 99;                                    <<06883>>00956280
                                                               <<06883>>00956290
                                                               <<06883>>00956300
  INTEGER   SUBTYPE, BUFF, STATE, STATE2;                      <<06883>>00956310
                                                               <<06883>>00956320
  IF LDEVTOTYPE(LDEV) <> CS80'TYPE THEN                        <<06883>>00956330
    RPS'ALLOW := INVALID'DEVICE                                <<06883>>00956340
  ELSE                                                         <<06883>>00956350
   BEGIN                                                       <<06883>>00956360
    SUBTYPE := LDEVTOSUBTYPE(LDEV);                            <<06883>>00956370
    IF  (SUBTYPE = 1 OR                                        <<06883>>00956380
         SUBTYPE = 2 OR                                        <<06883>>00956390
         SUBTYPE = 4 OR                                        <<06883>>00956400
         SUBTYPE = 8 )   THEN                                  <<06883>>00956410
    BEGIN                                                      <<06883>>00956420
     TOS := ATTACHIO(LDEV,0,0,@BUFF,RPS'STATUS,1,0,0,1);       <<06883>>00956430
     DEL;                                                      <<06883>>00956440
     STATE := TOS;                                             <<06883>>00956450
     IF STATE.(13:3) <> 1 THEN                                 <<06883>>00956460
       RPS'ALLOW := STATE.(8:8)                                <<06883>>00956470
     ELSE                                                      <<06883>>00956480
       BEGIN                                                   <<06883>>00956490
        CASE FUNC OF                                           <<06883>>00956500
          BEGIN                                                <<06883>>00956510
                                                               <<06883>>00956520
  << 0 >>  BEGIN     << DISABLE IS REQUESTED >>                <<06883>>00956530
             IF BUFF = 0 THEN                                  <<06883>>00956540
               RPS'ALLOW := DISABLE'DONE                       <<06883>>00956550
             ELSE                                              <<06883>>00956560
               BEGIN                                           <<06883>>00956570
                TOS :=ATTACHIO(LDEV,0,0,0,RPS'DISABLE,1,0,0,1);<<06883>>00956580
                DEL;                                           <<06883>>00956590
                RPS'ALLOW := TOS.(8:8);                        <<06883>>00956600
               END;                                            <<06883>>00956610
           END;      << CASE 0 >>                              <<06883>>00956620
                                                               <<06883>>00956630
  << 1 >>  BEGIN    << ENABLE IS REQUESTED >>                  <<06883>>00956640
             IF BUFF = 1 THEN                                  <<06883>>00956650
                RPS'ALLOW := ENABLE'DONE                       <<06883>>00956660
             ELSE                                              <<06883>>00956670
               BEGIN                                           <<06883>>00956680
                 TOS :=ATTACHIO(LDEV,0,0,0,RPS'ENABLE,1,0,0,1);<<06883>>00956690
                 DEL;                                          <<06883>>00956700
                 STATE := TOS;                                 <<06883>>00956710
                 TOS :=                                        <<06883>>00956720
                   ATTACHIO(LDEV,0,0,@BUFF,RPS'STATUS,1,0,0,1);<<06883>>00956730
                 DEL;                                          <<06883>>00956740
                 STATE2 := TOS;                                <<06883>>00956750
                 IF (STATE.(13:3) <> 1 OR STATE2.(13:3) <> 1)  <<06883>>00956760
                 THEN                                          <<06883>>00956765
                    RPS'ALLOW := STATE.(8:8)                   <<06883>>00956770
                 ELSE                                          <<06883>>00956780
                   BEGIN                                       <<06883>>00956790
                     IF BUFF = 0 THEN                          <<06883>>00956800
                        RPS'ALLOW := RPS'NOT'AVAILABLE         <<06883>>00956810
                     ELSE                                      <<06883>>00956820
                        RPS'ALLOW := STATE.(8:8);              <<06883>>00956830
                   END;                                        <<06883>>00956840
               END;                                            <<06883>>00956850
           END;      << CASE 1 >>                              <<06883>>00956860
                                                               <<06883>>00956870
  << 2 >>  BEGIN     << STATUS IS REQUESTED >>                 <<06883>>00956880
             IF BUFF = 1 THEN                                  <<06883>>00956890
                RPS'ALLOW := STATUS'ENABLE                     <<06883>>00956900
             ELSE                                              <<06883>>00956910
                RPS'ALLOW := STATUS'DISABLE;                   <<06883>>00956920
           END;      << CASE 2 >>                              <<06883>>00956930
                                                               <<06883>>00956940
          END; << OF CASE >>                                   <<06883>>00956950
       END;                                                    <<06883>>00956960
    END                                                        <<06883>>00956970
   ELSE RPS'ALLOW := INVALID'DEVICE;                           <<06883>>00956980
  END;                                                         <<06883>>00956990
END;           << INTEGER FUNCTION >>                          <<06883>>00957000
$EDIT VOID=01022000                                            <<06883>>00992000
BEGIN                                                          <<06883>>00993000
   INTEGER LPDT'INDEX;                                         <<06883>>00994000
                                                               <<06883>>00995000
   CHECKLDEV( LDEV );                                          <<06883>>00996000
   IF > THEN                                                   <<06883>>00997000
      BEGIN  << IT'S A TERMINAL >>                             <<06883>>00998000
      LPDT'INDEX := LDEV * SIZE'OF'LPDT'ENTRY;                 <<06883>>00999000
      DISABLE;                                                 <<06883>>01000000
      IF BFLAG THEN                                            <<06883>>01001000
         LPDT'BREAK := 0                                       <<06883>>01002000
      ELSE                                                     <<06883>>01003000
         LPDT'CONTROL'Y := 0;                                  <<06883>>01004000
      IF <> THEN RESETBREAKBITS := 1;                          <<06883>>01005000
      END;                                                     <<06883>>01006000
                                                               <<06883>>01007000
END;                                                           <<06883>>01008000
$EDIT VOID=01334000                                            <<07426>>01030000
$EDIT VOID=01490000                                            <<06883>>01338000
$EDIT VOID=01650000                                            <<06883>>01494000
INTEGER PROCEDURE GETSYSBUF( NUM, IMPF);                       <<06883>>01495000
   VALUE NUM, IMPF;                                            <<06883>>01496000
   LOGICAL NUM, IMPF;                                          <<06883>>01497000
   OPTION PRIVILEGED, UNCALLABLE;                              <<06883>>01498000
BEGIN                                                          <<06883>>01499000
                                                               <<06883>>01500000
ENTRY FGETSYSBUF;                                              <<06883>>01501000
INTEGER                                                        <<06883>>01502000
   CSTAT       = Q-1, << CALLER STATUS >>                      <<06883>>01503000
   LASTWORD;          << LAST LOCATION OF SBUF's >>            <<06883>>01504000
LOGICAL                                                        <<06883>>01505000
   TYPE,              << BUFFER FENCE >>                       <<06883>>01506000
   SIZE,              << BUFFER SIZE >>                        <<06883>>01507000
   NEWINUSE,                                                   <<06883>>01508000
   SBF'ENTRY'INDEX,                                            <<06883>>01509000
   PREV'INDEX;        << PREV SBUF ENTRY INDEX >>              <<06883>>01510000
                                                               <<06883>>01511000
   TYPE := 0; << NO BUFFER FENCE >>                            <<06883>>01512000
   GO AROUND;                                                  <<06883>>01513000
   HELP;  <<FOR HELP PLABEL *************>>                    <<06883>>01514000
FGETSYSBUF:                                                    <<06883>>01515000
   TYPE := 8; << BUFFER FENCE FOR FILESYSTEM TO PREVENT HOGGING<<06883>>01516000
AROUND:                                                        <<06883>>01517000
   SIZE := SBH'ENT'SIZE;    << BUFFER SIZE >>                  <<06883>>01518000
   LASTWORD := (SBH'TOT'ENT-1) * SIZE + SBH'HEADER'SIZE;       <<06883>>01519000
   SBH'REQCOUNU := SBH'REQCOUNU + 1; << INC. REQ. CNTR >>      <<06883>>01520000
   IF CARRY THEN SBH'REQCOUNT := SBH'REQCOUNT + 1;             <<06883>>01521000
   IF NOT(1 <= INTEGER(NUM) <= INTEGER(SBH'PRI'ENT)) THEN      <<06883>>01522000
      BEGIN                                                    <<06883>>01523000
      TOS := CCL;                                              <<06883>>01524000
      GO TO SETCC;                                             <<06883>>01525000
      END;                                                     <<06883>>01526000
                                                               <<06883>>01527000
   DISABLE;                                                    <<06883>>01528000
TRYAGAIN:                                                      <<06883>>01529000
   NEWINUSE := SBH'CUR'NUSE + NUM;                             <<06883>>01530000
   IF NEWINUSE + TYPE > SBH'PRI'ENT THEN                       <<06883>>01531000
      BEGIN << CAN'T SUPPLY ENOUGH BUFFERS >>                  <<06883>>01532000
      << If first overflow, report table full to console >>    <<06883>>01533000
      IF SBH'OVRFLOWS = 0 THEN                                 <<06883>>01534000
         MPE'TABLE'FULL(1);  << table 1 is SBUF >>             <<06883>>01535000
      SBH'OVRFLOWS := SBH'OVRFLOWS + 1;                        <<06883>>01536000
      IF IMPF THEN                                             <<06883>>01537000
         BEGIN << IMPEDE THIS PROCESS >>                       <<06883>>01538000
         IOIMPEDE(ABS(SYSDB+SYSSBUF));                         <<06883>>01539000
         GO TO TRYAGAIN;                                       <<06883>>01540000
         END;                                                  <<06883>>01541000
      TOS := CCG; << IMFORM CALLER OF BUFFER SHORTAGE >>       <<06883>>01542000
      GO TO SETCC;                                             <<06883>>01543000
      END;                                                     <<06883>>01544000
   IF NEWINUSE > SBH'MAX'NUSE THEN                             <<06883>>01545000
      SBH'MAX'NUSE := NEWINUSE;                                <<06883>>01546000
   SBH'CUR'NUSE := NEWINUSE; << UPDATE USE CNTR >>             <<06883>>01547000
   SBF'ENTRY'INDEX := SBH'FREEHEAD;                            <<06883>>01548000
   GETSYSBUF := SBF'ENTRY'INDEX; << RETURN INDEX TO CALLER >>  <<06883>>01549000
                                                               <<06883>>01550000
   DO BEGIN                                                    <<06883>>01551000
      IF NOT(SBH'HEADER'SIZE <= INTEGER(SBF'ENTRY'INDEX-1)     <<06883>>01552000
         <= LASTWORD) THEN SUDDENDEATH( 250);                  <<06883>>01553000
      IF (SBF'ENTRY'INDEX-SBH'HEADER'SIZE-1) MOD SIZE <> 0     <<06883>>01554000
         THEN SUDDENDEATH( 250);                               <<06883>>01555000
      PREV'INDEX := SBF'ENTRY'INDEX;                           <<06883>>01556000
      SBF'ENTRY'INDEX := SBF'LINK;                             <<06883>>01557000
      NUM := NUM - 1;                                          <<06883>>01558000
      END UNTIL =;                                             <<06883>>01559000
                                                               <<06883>>01560000
   IF SBF'ENTRY'INDEX = 0 THEN                                 <<06883>>01561000
      SBH'FREETAIL := SBH'FREEHEAD'INDEX + 1;                  <<06883>>01561100
   SBH'FREEHEAD := SBF'ENTRY'INDEX;                            <<06883>>01562000
   SBF'ENTRY'INDEX := PREV'INDEX;                              <<06883>>01563000
   SBF'LINK := 0; << ZERO LAST LINK >>                         <<06883>>01564000
   TOS := CCE;                                                 <<06883>>01565000
SETCC:                                                         <<06883>>01566000
   CSTAT.CC := TOS;                                            <<06883>>01567000
END;                                                           <<06883>>01568000
$EDIT                                                          <<06883>>01666000
$EDIT                                                          <<06883>>01674000
   I := 0,                                                     <<06883>>01678500
   PIN,                                                        <<06883>>01679000
   IOQ'ENTRY'INDEX,                                            <<06883>>01683000
   LPDT'INDEX,                                                 <<06883>>01683500
   DBSAVE;                                                     <<06883>>01684000
$EDIT VOID=01688000                                            <<06883>>01686000
   IF = THEN PIN := (CURPRC)/PCBSIZE;                          <<06883>>01696000
  WHILE (I:=I+1) <= LPDT'MAX'ENTRIES DO                        <<06883>>01700000
    LPDT'INDEX := I * SIZE'OF'LPDT'ENTRY;                      <<06883>>01704000
    @DITP := LPDT'DIT'PTR;                                     <<06883>>01705000
    IF NOT LPDT'VIRTUAL'DEVICE AND                             <<06883>>01706000
       @DITP <> 0 AND << CHECK FOR ALL ZERO LPDT ENTRY >>      <<06883>>01706200
$$EDIT                                                         <<07426>>01706500
       DITP.(TERMINAL':2) <> DISC' THEN                        <<06883>>01707000
        IOQ'ENTRY'INDEX := DITP(DIOQP);                        <<06883>>01740000
          IF NOT IOQ'DONE AND IOQ'PCB = PIN THEN               <<06883>>01746000
            IOQ'ABORT := 1;                                    <<06883>>01752000
          IOQ'ENTRY'INDEX := IOQ'QLINK; <<STEP TO NEXT IOQ>>   <<06883>>01762000
  DLTP;                                                        <<06883>>01816000
$EDIT VOID=01822000                                            <<06883>>01818000
  IOQ'ENTRY'INDEX,                                             <<06883>>01825000
  LPDT'INDEX,                                                  <<06883>>01825500
  LPDT'INDEX := LDEVICE * SIZE'OF'LPDT'ENTRY;                  <<06883>>01846000
  @DITP := LPDT'DIT'PTR;                                       <<06883>>01847000
      IOQ'ENTRY'INDEX := DITP(DIOQP);                          <<06883>>01876000
        IOQ'ENTRY'INDEX := DITP(DIOQP);                        <<06883>>01884000
          IF NOT IOQ'DONE AND (ABORTALL OR PCBIO) THEN         <<06883>>01890000
            IOQ'ABORT := 1;   <<mark IOQ aborted>>             <<06883>>01896000
            IF IOQ'ENTRY'INDEX = DITP(DIOQP) THEN              <<06883>>01898000
          IOQ'ENTRY'INDEX := IOQ'QLINK; <<STEP TO NEXT IOQ>>   <<06883>>01906000
POINTER                                                        <<06883>>01994000
   DLTPL,                                                      <<07426>>01994050
   DITP;                                                       <<06883>>01994100
LOGICAL                                                        <<06883>>01994200
   IOQ'ENTRY'INDEX,                                            <<06883>>01994300
   PRESENT'INDEX,                                              <<06883>>01994400
   LPDT'INDEX;                                                 <<06883>>01994500
IF IOQX.(1:1)=DISC THEN RETURN;    << CAN'T ABORT DISC >>      <<17521>>01997000
   IOQ'ENTRY'INDEX := IOQX;                                    <<06883>>02000000
   LPDT'INDEX := IOQ'LDEV * SIZE'OF'LPDT'ENTRY;                <<06883>>02002000
   @DITP := LPDT'DIT'PTR;                                      <<06883>>02004000
@DLTPL := DITP(DDLTP);                                         <<07426>>02005000
$EDIT                                                          <<06883>>02006000
$EDIT                                                          <<07426>>02008000
   IOQ'ABORT := 1;  << SET ABORT >>                            <<06883>>02012000
  IF DLTPL.QABORTS THEN << ASK DRIVER TO ABORTIO REQ. >>       <<07426>>02013000
     ATTACHIO(IOQ'LDEV,0,0,0,ABORT'IO,0,IOQX,0,NOPCB)          <<07426>>02013100
  ELSE << HANDLE NORMAL CASE, JUST DEQUEUE >>                  <<07426>>02013200
   IF IOQ'ENTRY'INDEX = DITP(DIOQP) THEN                       <<06883>>02014000
      IF NOT DITP.TERMINAL THEN DITP.IAK := 1;                 <<06883>>02018000
      PRESENT'INDEX := IOQ'ENTRY'INDEX;                        <<06883>>02031000
      IOQ'ENTRY'INDEX := DITP(DIOQP); << SCAN IOQ LIST >>      <<06883>>02032000
      WHILE <> DO                                              <<06883>>02034000
         IF IOQ'QLINK = IOQ'ENTRY'INDEX THEN                   <<06883>>02038000
            << DELINK IOQ >>                                   <<06883>>02042000
            PRESENT'INDEX := IOQ'ENTRY'INDEX;                  <<06883>>02042100
            IOQ'ENTRY'INDEX := IOQX;                           <<06883>>02042200
            TOS := IOQ'QLINK;                                  <<06883>>02042300
            IOQ'ENTRY'INDEX := PRESENT'INDEX;                  <<06883>>02042400
            IOQ'QLINK := TOS;                                  <<06883>>02042500
            RETURNIOQ(IOQX);                                   <<06883>>02046000
         IOQ'ENTRY'INDEX := IOQ'QLINK; << STEP TO NEXT IOQ >>  <<06883>>02054000
INTEGER PARM;                                                  <<06883>>02408000
DOUBLE DST;                                                    <<06883>>02409000
       DST'OFFSET, << FOR MOVING FROM DS TO LOCAL BUF >>       <<07426>>02439000
       DCU'MSG'LENGTH, << TOTAL LEN OF DS IN BYTES >>          <<07426>>02439100
EQUATE BUF'LENGTH = 768;                                       <<07426>>02449000
EQUATE BUF'BYTE'LENGTH = BUF'LENGTH * 2;                       <<07426>>02449100
ARRAY BUF(0:BUF'LENGTH-1); << LOCAL BUFFER FOR LOG DATA >>     <<07426>>02450000
   DOUBLE SEGID=DST;                                           <<06883>>02453000
   LOGICAL ARRAY SEGID'(*)=DST;                                <<06883>>02453500
IF SEGID'(OBJIDNUMFIELD) <> 0 THEN << DST# <> 0? >>            <<06883>>02474000
  J := SEGID'(OBJIDNUMFIELD); << GET DST# >>                   <<06883>>02478000
  IOUNFREEZE'(SEGID);                                         <<10/21>> 02481000
  SEGID'(OBJIDNUMFIELD) := 0; << MARK DST NOT THERE >>         <<06883>>02486000
  SEGID'(OBJIDNUMFIELD) := 0; << MARK DST NOT THERE >>         <<06883>>02588000
      SEGID'(OBJIDTYPEFIELD) := OBJIDDATATYPE; << BUILD >>     <<06883>>02628000
      SEGID'(OBJIDPBXFIELD)  := 0;  << 2 WORD SEGID     >>     <<06883>>02628400
      SEGID'(OBJIDNUMFIELD)  := J;                             <<06883>>02628600
    TOS := SEGID'(OBJIDNUMFIELD); << GET DST # >>              <<06883>>02640000
    IOFREEZE'(SEGID);                                          <<06883>>02648000
  DST'OFFSET := 0;                                             <<07426>>02682000
  DCU'MSG'LENGTH := PARM & LSR(1); << EXTRACT BYTE LENGTH OF DS<<07426>>02682100
  TOTAL'LENGTH := IF DCU'MSG'LENGTH > BUF'BYTE'LENGTH          <<07426>>02682200
    THEN BUF'BYTE'LENGTH << DS WILL NOT FIT IN BUFFER >>       <<07426>>02682300
    ELSE DCU'MSG'LENGTH;     << DS WILL FIT IN BUFFER     >>   <<07426>>02682400
$$EDIT                                                         <<17532>>02684000
  << WHILE LOOP NEEDED TO HANDLE CASE WHERE DS WITH DCU >>     <<07426>>02686000
  << INFO IS TOO BIG FOR THE LOCAL BUFFER. LOOPS THRU   >>     <<07426>>02686400
  << ONLY ONCE IF DS WILL FIT WITHIN THE LOCAL BUFFER.  >>     <<07426>>02686800
                                                               <<07426>>02687200
  WHILE DST'OFFSET < DCU'MSG'LENGTH DO << THESE ARE ALL BYTE >><<07426>>02687600
    BEGIN                          << COUNTS AND OFFSETS >>    <<07426>>02688000
    TOS := @BUF;                                               <<07426>>02688400
    TOS := SEGID'(OBJIDNUMFIELD);                              <<07426>>02688800
    TOS := (DST'OFFSET + 1) / 2;   << MFDS EXPECTS WORD  >>    <<07426>>02689200
    TOS := (TOTAL'LENGTH + 1) / 2; << OFFSETS AND COUNTS >>    <<07426>>02689600
    ASSEMBLE(MFDS 4);                                          <<07426>>02690000
    LOG'TYPE'47; << LOG EXTRACTED PORTION OF MESG >>           <<07426>>02690400
                                                               <<07426>>02690800
    DST'OFFSET := DST'OFFSET + TOTAL'LENGTH;                   <<07426>>02691200
    IF DST'OFFSET + TOTAL'LENGTH > DCU'MSG'LENGTH              <<07426>>02691600
       THEN BEGIN << ADJUST FOR LEFT OVER AT END OF DS >>      <<07426>>02692000
            TOTAL'LENGTH := DCU'MSG'LENGTH - DST'OFFSET;       <<07426>>02692400
            END;                                               <<07426>>02692800
    END; << WHILE >>                                           <<07426>>02693200
                                                               <<07426>>02694000
                                                               <<07426>>02698000
EQUATE DIT'REPLY = -3; << INIT. ODD VALUE FOR FLAG>>           <<06883>>02767000
$EDIT                                                          <<06883>>02776000
                                                               <<06883>>02782000
       DST'DCU'LOG,                                            <<06883>>02800100
$EDIT VOID=02812000                                            <<06883>>02810000
<< TABLE RELATIVE INDEX INTO IOQ TABLE >>                      <<06883>>02811000
INTEGER                                                        <<06883>>02812000
   Q'ENTRY'INDEX,                                              <<06883>>02812100
   IOQ'ENTRY'INDEX = Q'ENTRY'INDEX,                            <<06883>>02812200
   DRQ'ENTRY'INDEX = Q'ENTRY'INDEX;                            <<06883>>02812300
define THISPIN = (CURPRC)/PCBSIZE#,                            <<06883>>02838000
       IOMSGPROC = absolute(%1152)#;                           <<06883>>02846000
$EDIT                                                          <<06883>>02848000
       SBUFDST = 8;                                            <<06883>>02854000
$EDIT                                                          <<06883>>02856000
IOMSGQUEUE := LPCB(IOMSGQUEUE * PCBSIZE + NIMPPINWORDNUM) /    <<06883>>02970000
                   PCBSIZE;                                    <<06883>>02972000
X := S0 * PCBSIZE + NIMPPINWORDNUM;                            <<06883>>02974000
LPCB(X) := 0;                                                  <<06883>>02976000
        tos := SBUFX;     <<location of buf in XDS>>           <<06883>>03154000
        tos := MOVE'LENGTH - 15;  <<length of variable info>>  <<06883>>03174000
          SBUFX := @LOG'BUF'PTR;  <<SBUF index>>               <<06883>>03228000
        IOQ'ENTRY'INDEX := SM2; <<load IOQ >>                  <<06883>>03312000
$EDIT                                                          <<06883>>03314000
        if not IOQ'DONE then <<if not completed>>              <<06883>>03318000
          IOQ'IOWAKE := 1;  <<turn on WAKE bit>>               <<06883>>03322000
          IOQ'PCB := THISPIN; << set this PCB >>               <<06883>>03324000
$EDIT                                                          <<06883>>03330000
$EDIT                                                          <<06883>>03362000
$EDIT VOID=03376000                                            <<06883>>03365000
        TOS := 0;    << RETURN VALUE FROM GENMSG >>            <<06883>>03366000
        ASSEMBLE( ADDS 14 ); << OPEN BUF OF GENMSG PARMS >>    <<06883>>03367000
        ASSEMBLE( LRA S-13 ); << DB REL DISP OF BUFFER >>      <<06883>>03368000
        TOS := SBH'DST;       << DST NUMBER OF SBUF    >>      <<06883>>03369000
        TOS := SBUFX+1;       << DISP INTO SBUF TABLE  >>      <<06883>>03370000
        TOS := 14;            << NR OF WORDS TO MOVE   >>      <<06883>>03371000
        ASSEMBLE( MFDS 4 );                                    <<06883>>03372000
        DSTX := SBF(SBUFX+12);<< SAVE DITP IN DSTX     >>      <<06883>>03373000
        SETSYSDB;                                              <<06883>>03374000
          FLAG := DIT'REPLY;                                   <<06883>>03392000
          BUF := BUF+DSTNUM-(DST(DITDSTI)-SYSDB);              <<06883>>03394000
          RELSIR(MSGSIR,SAVESIR);                              <<06883>>03397000
          Q'ENTRY'INDEX := PS0(DIOQP); <<set msg reply in IOQ>><<06883>>03418000
          if <> then                                           <<06883>>03420000
            IF PS0.(0:2) = 1 << IF DRQ ENTRY >>                <<06883>>03422000
               THEN DRQ'MSGDONE := 1                           <<06883>>03422100
               ELSE IOQ'MSGDONE := 1;                          <<06883>>03422200
              IF FLAG <> DIT'REPLY THEN                        <<06883>>03437000
   DUNIT            = 10,<< OFFSET OF UNIT # IN DIT >>         <<06883>>03747000
   DILTP            = 5, << OFFSET OF ILT PTR IN DIT >>        <<06883>>03747400
$EDIT                                                          <<*7530>>04414000
   LDTSIZE = 7,                                                <<06883>>04580000
   CLASSINFO(0:16);                                            <<06883>>04738000
   DEVICE(0:8);                                                <<06883>>04776000
   DEVINFO(0:23);                                              <<06883>>04780000
   IOSTATUS:=P'ATTACHIO(DESTDEV,QMISC,STACKDST,@TARGET,        <<*7530>>05692000
      FUNCTION,TARGETLEN,S2,S1,BLOCKED);                       <<*7530>>05694000
      SP0:=ABS(SYSDBLOC+DEVINFO(4)+DUNIT).(12:4);<<DIT UNIT>>  <<06883>>06066000
      XREG := SYSDBLOC+DEVINFO(4)+DILTP; << POINT TO ILT PTR >><<06883>>06067000
         SP0.(0:9):=ABSOLUTE(ABSOLUTE(XREG)+SYSDBLOC+7)        <<06883>>06072000
      ELSE << XREG EXPECTED TO POINT TO ILT PTR IN DIT >>      <<06883>>06074000
         SP0.(0:9):=ABSOLUTE(ABSOLUTE(XREG)+SYSDBLOC);         <<06883>>06076000
         IOSTATUS:=P'ATTACHIO(S3,QMISC,STACKDST,@STATBUF,      <<*7530>>06096000
            GETSTATUS,4,0,0,BLOCKED);                          <<*7530>>06098000
         CONFIGUREDEVICE(CLASSINFO(4),CTLINEPTRDESC);          <<06883>>08224000
         CONFIGUREDEVICE(CLASSINFO(4),CTDUMPDEVDESC);          <<06883>>08230000
