*copyc OSD$DEFAULT_PRAGMATS
MODULE iim$queue_management_utilities;
?? TITLE := 'MODULE iim$queue_management_utilities' ??

?? PUSH (LISTEXT := ON) ??
*copyc IIT$CONNECTION_DESCRIPTION
*copyc IIK$KEYPOINTS
*copyc OST$STATUS
*copyc osp$system_error
?? POP ??
*copyc IIV$INTERACTIVE_TERMINATED
*copyc IIV$CONNECTION_DESC_PTR

{ WARNING:
{    THESE ROUTINES ASSUME THAT ALL REQUIRED LOCKS HAVE BEEN SET PRIOR
{    TO THEIR INVOCATION.

?? NEWTITLE := 'PROCEDURE [XDCL] iip$add_queue_entry', EJECT ??

  PROCEDURE [XDCL] iip$add_queue_entry (queue_key: iit$queue_key;
    queue_entry_descriptor: iit$queue_entry_descriptor;
    VAR status: ost$status);

    status.normal := TRUE;

    CASE queue_key OF

    = iic$connection_description =

      IF iiv$connection_desc_ptr = NIL THEN
        queue_entry_descriptor.connection_description_ptr^.next_entry := NIL;
        queue_entry_descriptor.connection_description_ptr^.previous_entry :=
          NIL;
        iiv$connection_desc_ptr := queue_entry_descriptor.
          connection_description_ptr;
      ELSE
        queue_entry_descriptor.connection_description_ptr^.next_entry :=
          iiv$connection_desc_ptr;
        iiv$connection_desc_ptr^.previous_entry := queue_entry_descriptor.
          connection_description_ptr;
        queue_entry_descriptor.connection_description_ptr^.previous_entry :=
          NIL;
        iiv$connection_desc_ptr := queue_entry_descriptor.
          connection_description_ptr;
      IFEND;

      iiv$connection_desc_count := iiv$connection_desc_count + 1;

    = iic$open_file_description, iic$terminal_request =

      status.normal := FALSE;

    = iic$downline_queue =
      osp$system_error('Interactive failure', NIL);
    = iic$repeat_queue =
      osp$system_error('Interactive failure', NIL);
    CASEND;

  PROCEND iip$add_queue_entry;

?? OLDTITLE ??
?? NEWTITLE := 'PROCEDURE [XDCL] iip$delete_queue_entry', EJECT ??

  PROCEDURE [XDCL] iip$delete_queue_entry (queue_key: iit$queue_key;
    queue_entry_descriptor: iit$queue_entry_descriptor;
    VAR status: ost$status);

    status.normal := TRUE;

    CASE queue_key OF

    = iic$connection_description =

      IF queue_entry_descriptor.connection_description_ptr^.next_entry <> NIL
        THEN
        queue_entry_descriptor.connection_description_ptr^.next_entry^.
              previous_entry := queue_entry_descriptor.
              connection_description_ptr^.previous_entry;
      IFEND;

      IF queue_entry_descriptor.connection_description_ptr^.previous_entry <>
        NIL THEN
        queue_entry_descriptor.connection_description_ptr^.previous_entry^.
          next_entry := queue_entry_descriptor.connection_description_ptr^.
          next_entry;
      IFEND;

      IF queue_entry_descriptor.connection_description_ptr^.previous_entry =
        NIL THEN
        iiv$connection_desc_ptr := queue_entry_descriptor.
          connection_description_ptr^.next_entry;
      IFEND;


      queue_entry_descriptor.connection_description_ptr^.next_entry := NIL;
      queue_entry_descriptor.connection_description_ptr^.previous_entry := NIL;

      iiv$connection_desc_count := iiv$connection_desc_count - 1;

    = iic$open_file_description, iic$terminal_request =

      status.normal := FALSE;

    = iic$downline_queue =
      osp$system_error('Interactive failure', NIL);
    = iic$repeat_queue =
      osp$system_error('Interactive failure', NIL);
    CASEND;
  PROCEND iip$delete_queue_entry;

MODEND iim$queue_management_utilities
