?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE SCL Interpreter : Set Working Catalog Path' ??
MODULE clm$working_catalog_manager;

{
{ PURPOSE:
{   This module contains the procedure that stores the working catalog.
{

?? NEWTITLE := 'Global Declarations', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc amt$local_file_name
*copyc clt$environment_object_contents
*copyc clt$environment_object_size
*copyc clt$env_object_pop_reason
*copyc clt$env_object_push_reason
*copyc clt$working_catalog
*copyc fst$evaluated_file_reference
*copyc ost$status
?? POP ??
*copyc clp$find_working_catalog
*copyc osv$task_shared_heap
?? OLDTITLE ??
?? NEWTITLE := 'clp$eo_size_working_catalog', EJECT ??

  FUNCTION [XDCL] clp$eo_size_working_catalog: clt$environment_object_size;

    TYPE
      working_catalog_env_object = ^clt$working_catalog;


    clp$eo_size_working_catalog := #SIZE (working_catalog_env_object);

  FUNCEND clp$eo_size_working_catalog;
?? OLDTITLE ??
?? NEWTITLE := 'clp$eo_init_working_catalog', EJECT ??

  PROCEDURE [XDCL] clp$eo_init_working_catalog
    (    object: ^clt$environment_object_contents);

    VAR
      working_catalog: ^^clt$working_catalog;


    working_catalog := object;

    working_catalog^ := NIL;

  PROCEND clp$eo_init_working_catalog;
?? OLDTITLE ??
?? NEWTITLE := 'clp$eo_push_working_catalog', EJECT ??

  PROCEDURE [XDCL] clp$eo_push_working_catalog
    (    push_reason: clt$env_object_push_reason;
         new_object: ^clt$environment_object_contents;
         new_object_in_current_task: boolean;
         pushed_object_in_current_task: boolean;
         pushed_object: ^clt$environment_object_contents;
     VAR status: ost$status);

    VAR
      new_working_catalog: ^^clt$working_catalog,
      old_working_catalog: ^^clt$working_catalog;


    status.normal := TRUE;

    new_working_catalog := new_object;
    old_working_catalog := pushed_object;

    IF old_working_catalog^ = NIL THEN
      new_working_catalog^ := NIL;
    ELSE
      ALLOCATE new_working_catalog^ IN osv$task_shared_heap^;
      new_working_catalog^^ := old_working_catalog^^;
    IFEND;

  PROCEND clp$eo_push_working_catalog;
?? OLDTITLE ??
?? NEWTITLE := 'clp$eo_pop_working_catalog', EJECT ??

  PROCEDURE [XDCL] clp$eo_pop_working_catalog
    (    pop_reason: clt$env_object_pop_reason;
         object: ^clt$environment_object_contents;
         object_in_current_task: boolean;
         pushed_object_in_current_task: boolean;
         pushed_object: ^clt$environment_object_contents;
     VAR status: ost$status);

    VAR
      working_catalog: ^^clt$working_catalog;


    status.normal := TRUE;

    working_catalog := object;

    IF working_catalog^ <> NIL THEN
      FREE working_catalog^ IN osv$task_shared_heap^;
    IFEND;

  PROCEND clp$eo_pop_working_catalog;
?? OLDTITLE ??
?? NEWTITLE := 'clp$set_working_catalog_path', EJECT ??

  PROCEDURE [XDCL, #GATE] clp$set_working_catalog_path
    (    working_catalog_path_handle: amt$local_file_name;
         evaluated_file_reference: fst$evaluated_file_reference);

    VAR
      working_catalog: ^^clt$working_catalog;


    clp$find_working_catalog (working_catalog);

    IF working_catalog^ = NIL THEN
      ALLOCATE working_catalog^ IN osv$task_shared_heap^;
    IFEND;

    working_catalog^^.handle := working_catalog_path_handle;
    working_catalog^^.evaluated_file_reference := evaluated_file_reference;

  PROCEND clp$set_working_catalog_path;
?? OLDTITLE ??

MODEND clm$working_catalog_manager;
