MODULE iom$queue_pp_request;
?? RIGHT := 110 ??
?? NEWTITLE := 'Global Declarations Referenced By This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc oss$mainframe_wired_literal
*copyc osd$default_pragmats
*copyc ioe$st_errors
*copyc iot$disk_request
*copyc iot$io_request
*copyc iot$lockword
*copyc iot$pp_interface_table
*copyc syt$monitor_request_code
?? POP ??
*copyc iop$clear_queue_lockword
*copyc iop$set_queue_lockword
*copyc mtp$error_stop

  VAR
    iov$reject_interlock_set: [XREF] integer;

?? OLDTITLE ??
?? NEWTITLE := 'IOP$QUEUE_PP_REQUEST', EJECT ??

  PROCEDURE [XDCL] iop$queue_pp_request
    (    ppit_p: ^iot$pp_interface_table;
         request_p: ^iot$io_request;
     VAR status: syt$monitor_status);

    VAR
      first: boolean,
      lock_set: boolean,
      next_io_request: ^iot$io_request,
      pp_request_p: ^iot$link,
      previous_io_request: ^iot$io_request,
      previous_request: ^iot$link,
      rma: integer,
      search_test: boolean;


    status.normal := TRUE;

{Set pp queue lockword.}
    iop$set_queue_lockword (ppit_p^.lockword, lock_set);

    IF NOT lock_set THEN
      IF iov$reject_interlock_set < 0ffffffffffff(16) THEN
        iov$reject_interlock_set := iov$reject_interlock_set + 1;
      IFEND;
      status.normal := FALSE;
      status.condition := ioc$pp_interlock_set;
      RETURN; {----->
    IFEND;


{Insert request in queue.}

    next_io_request := ppit_p^.pp_request_queue;
    pp_request_p := request_p^.pp_request_p;
    #real_memory_address (#LOC (pp_request_p^), rma);
    pp_request_p^.next_pp_request := NIL;
    pp_request_p^.next_pp_request_rma := 0;
    search_test := TRUE;
    first := TRUE;

  /loop4/
    WHILE search_test DO
      IF next_io_request = NIL THEN
        IF first THEN
          ppit_p^.pp_request_queue := request_p;
          ppit_p^.pp_request_queue_rma := rma;
        ELSE
          previous_request^.next_pp_request := request_p;
          previous_request^.next_pp_request_rma := rma;
        IFEND;
        search_test := FALSE;
        EXIT /loop4/; {----->
      IFEND;

      previous_io_request := next_io_request;
      previous_request := previous_io_request^.pp_request_p;
      next_io_request := previous_request^.next_pp_request;
      first := FALSE;
    WHILEND /loop4/;

{Clear pp queue lockword.}
    iop$clear_queue_lockword (ppit_p^.lockword);

  PROCEND iop$queue_pp_request;
?? OLDTITLE ??
MODEND iom$queue_pp_request;
