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

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

?? PUSH (LISTEXT := ON) ??
*copyc IIT$CONNECTION_DESCRIPTION
*copyc IIK$KEYPOINTS
*copyc OST$STATUS
*copyc osp$system_error
*copyc iiv$interactive_terminated
*copyc OSV$JOB_PAGEABLE_HEAP
*copyc OSV$TASK_PRIVATE_HEAP
*copyc OSV$TASK_SHARED_HEAP
?? POP ??

?? NEWTITLE := 'PROCEDURE [XDCL, #GATE] iip$allocate_queue_entry' ??
?? EJECT ??

  PROCEDURE [XDCL, #GATE] iip$allocate_queue_entry (queue_key: iit$queue_key;
    VAR queue_entry_descriptor: iit$queue_entry_descriptor;
    VAR status: ost$status);


    status.normal := TRUE;
    queue_entry_descriptor.queue_key := queue_key;

    CASE queue_key OF

    = iic$connection_description =

      ALLOCATE queue_entry_descriptor.connection_description_ptr:
        [iiv$network_identifier] IN osv$task_shared_heap^;
      IF queue_entry_descriptor.connection_description_ptr = NIL THEN
      osp$system_error('Interactive failure', NIL);
      IFEND;

    = iic$terminal_request =
      ALLOCATE queue_entry_descriptor.terminal_request_ptr IN
        osv$task_shared_heap^;

    = iic$open_file_description =
      ALLOCATE queue_entry_descriptor.open_file_description_ptr IN
        osv$task_private_heap^;

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

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

    ELSE
      status.normal := FALSE;

    CASEND;

  PROCEND iip$allocate_queue_entry;

?? OLDTITLE ??
?? NEWTITLE := 'PROCEDURE [XDCL, #GATE] iip$st_allocate_queue_entry' ??
?? EJECT ??

  PROCEDURE [XDCL, #GATE] iip$st_allocate_queue_entry (queue_key: iit$queue_key;
    VAR queue_entry_descriptor: iit$st_queue_entry_descriptor;
    VAR status: ost$status);


    status.normal := TRUE;
    queue_entry_descriptor.queue_key := queue_key;

    CASE queue_key OF

    = iic$connection_description =


      ALLOCATE queue_entry_descriptor.connection_description_ptr:
        [iiv$network_identifier] IN osv$job_pageable_heap^;
      IF queue_entry_descriptor.connection_description_ptr = NIL THEN
      osp$system_error('Interactive failure', NIL);
      IFEND;

    = iic$open_file_description =
      ALLOCATE queue_entry_descriptor.open_file_description_ptr IN
        osv$task_private_heap^;

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

    ELSE
      status.normal := FALSE;

    CASEND;

  PROCEND iip$st_allocate_queue_entry;

?? OLDTITLE ??
?? NEWTITLE := ' PROCEDURE [XDCL, #GATE] iip$free_queue_entry' ??
?? EJECT ??

  PROCEDURE [XDCL, #GATE] iip$free_queue_entry (queue_key: iit$queue_key;
    VAR 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 <> NIL THEN
        FREE queue_entry_descriptor.connection_description_ptr IN
          osv$job_pageable_heap^;
      IFEND;

    = iic$terminal_request =
      IF queue_entry_descriptor.terminal_request_ptr <> NIL THEN
        FREE queue_entry_descriptor.terminal_request_ptr IN
          osv$task_shared_heap^;
      IFEND;

    = iic$open_file_description =
      IF queue_entry_descriptor.open_file_description_ptr <> NIL THEN
        FREE queue_entry_descriptor.open_file_description_ptr IN
          osv$task_private_heap^;
      IFEND;

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

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

    ELSE
      status.normal := FALSE;

    CASEND;

  PROCEND iip$free_queue_entry;
?? OLDTITLE ??
?? NEWTITLE := ' PROCEDURE [XDCL, #GATE] iip$st_free_queue_entry' ??
?? EJECT ??

  PROCEDURE [XDCL, #GATE] iip$st_free_queue_entry (queue_key: iit$queue_key;
    VAR queue_entry_descriptor: iit$st_queue_entry_descriptor;
    VAR status: ost$status);

    status.normal := TRUE;

    CASE queue_key OF

    = iic$connection_description =
      IF queue_entry_descriptor.connection_description_ptr <> NIL THEN
        FREE queue_entry_descriptor.connection_description_ptr IN
          osv$job_pageable_heap^;
      IFEND;

    = iic$open_file_description =
      IF queue_entry_descriptor.open_file_description_ptr <> NIL THEN
        FREE queue_entry_descriptor.open_file_description_ptr IN
          osv$task_private_heap^;
      IFEND;

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

    ELSE
      status.normal := FALSE;

    CASEND;

  PROCEND iip$st_free_queue_entry;
MODEND iim$allocate_or_free_space;
