*DECK REQQDEV 
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
    PROC REQQDEV ((LFN),(INPDEV));
      BEGIN    # REQQDEV #
# 
**    REQQDEV    REQUEST QUEUE DEVICE RESIDENCE.
*     REQQDEV IS CALLED TO ASSIGN A FILE TO A QUEUE DEVICE. 
* 
*     PROC REQQDEV ((LFN), (INPDEV))
* 
*     ENTRY      LFN = FILE NAME. 
*                INPDEV = TRUE IF FILE IS TO BE ASSIGNED TO INPUT DEVICE
*                       = FALSE IF FILE IS FOR OUTPUT.
* 
*     EXIT       FILE ASSIGNED TO DEVICE. 
* 
*     PROCESS    CALL LFM (NOS) OR REQ (NOS/BE).
# 
  
      ITEM LFN        C(7);        # LOCAL FILE NAME #
      ITEM INPDEV     B;           # DEVICE TYPE FLAG (NOS ONLY) #
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC ABORTQ;
        PROC CALLSYS;              # ISSUE SYSTEM REQUEST # 
        PROC MSGLOG;               # ISSUE ERROR MESSAGE #
        PROC NAME;                 # DEBUG CODE # 
        PROC RTNFIL;               # RETURN FILE #
        FUNC XCOD       C(10);     # CONVERT BINARY TO OCTAL DPC #
        END 
  
# 
****  XREF END
# 
  
  
      DEF LEMSG52    #28#;
      ARRAY EMSG52     S(3);
        BEGIN 
      CONTROL IFEQ OS$NOSBE;
        ITEM $D52       C(00,00,28) = [" QTF, FATAL REQ ERROR = XXB."]; 
      CONTROL ENDIF;
      CONTROL IFEQ OS$NOS;
        ITEM $D52       C(00,00,28) = [" QTF, FATAL LFM ERROR = XXB."]; 
      CONTROL ENDIF;
        ITEM EMSG52EC   C(02,24,02);
        END 
  
    CONTROL IFEQ OS$NOS;
  
      DEF LFMAIOQ    #O"15"#;      # ASSIGN FILE TO I/O QUEUE DEVICE #
      DEF LFMNID     #2#;          # NO MESSAGE # 
  
      ARRAY LFM [0:0] S(3); 
        BEGIN 
        ITEM $LFM       C(00,00,04) = ["LFMP"]; 
        ITEM LFMCODE    U(00,24,12);  # FUNCTION CODE # 
        ITEM LFMID      U(00,36,06);  # FUNCTION PARAMETER #
        ITEM LFMADR     U(00,42,18);  # ADDRESS OF THE FET #
        ITEM LFMLFN     U(01,00,42);  # FILE NAME # 
        ITEM LFMEC      U(01,42,08);  # ERROR CODE #
        ITEM LFMCOMP    B(01,59,01);  # COMPLETE BIT #
        ITEM LFMDT      C(02,00,02);  # DEVICE TYPE # 
        ITEM LFMEP      B(02,15,01) = [TRUE]; 
        END 
  
    CONTROL ENDIF;
  
    CONTROL IFEQ OS$NOSBE;
      ARRAY REQ[0:0] S(1);
        BEGIN 
        ITEM $REQ       C(00,00,04) = ["REQP"]; 
        ITEM REQADR     U(00,42,18);  # PARAM BLOCK ADDR #
        END 
  
      ARRAY REQB[0:0] S(2);           # REQ PARAMETER BLOCK # 
        BEGIN 
        ITEM REQWD1     U(00,00,60);  # 1ST WORD #
        ITEM REQLFN     C(00,00,07);  # FILE NAME # 
        ITEM REQEC      U(00,45,06);  # ERROR CODE #
        ITEM REQCOMP    B(00,59,01);  # COMPLETE FLAG # 
        ITEM REQWD2     U(01,00,60);  # 2D WORD # 
        ITEM REQFLG55   B(01,04,01);  # QUEUE DEVICE ASSIGNMENT # 
        ITEM REQFLG20   B(01,39,01);  # NO DAYFILE MESSAGE #
        END 
  
    CONTROL ENDIF;
  
      ARRAY S(1); 
        BEGIN 
        ITEM WORD       C(00,00,10);
        ITEM WORDR2     C(00,48,02);
        END 
  
        $BEGIN
        NAME("REQQDEV");
        $END
  
      RTNFIL(LFN, TRUE);           # RETURN ANY EXISTING FILE # 
  
    CONTROL IFEQ OS$NOSBE;
      REQWD1[0]   = 0;
      REQLFN[0]   = LFN;
      REQADR[0]   = LOC(REQLFN[0]); 
      REQWD2[0]   = 0;
      REQFLG55[0] = TRUE;          # REQUEST QUEUE DEVICE # 
      REQFLG20[0] = TRUE;          # NO DAYFILE MESSAGES #
      CALLSYS (REQ);
      IF REQEC[0] NE 0
      THEN
        BEGIN 
        WORD = XCOD(REQEC[0]);
        EMSG52EC = WORDR2;
        MSGLOG(LOC(EMSG52),LEMSG52);
        ABORTQ("REQQDEV");
        END 
  
    CONTROL ENDIF;
  
    CONTROL IFEQ OS$NOS;
      IF INPDEV 
      THEN
        BEGIN 
        LFMDT = "IN"; 
        END 
  
      ELSE
        BEGIN 
        LFMDT = "OT"; 
        END 
  
      LFMLFN  = LFN;
      LFMEC   = 0;
      LFMCOMP = FALSE;
      LFMID   = LFMNID; 
      LFMCODE = LFMAIOQ;
      LFMADR = LOC(LFMLFN); 
      CALLSYS (LFM);
      IF LFMEC NE 0 
      THEN
        BEGIN 
        WORD = XCOD(LFMEC); 
        EMSG52EC = WORDR2;
        MSGLOG(LOC(EMSG52),LEMSG52);
        ABORTQ("REQQDEV");
        END 
  
    CONTROL ENDIF;
  
      END  # REQQDEV #
    TERM
