?? NEWTITLE := 'pfp$add_to_project_info', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc avt$account_name
*copyc avt$project_name
?? POP ??

{ PURPOSE
{   This procedure is used to add account/project information for a user to a linked list of information
{   records.  This list is processed and cleared out each time a new master catalog (user) is processed.  The
{   information in this list is used for emitting membership statistics and for writing account, project and
{   membership limit information into the limit information sequence.

    PROCEDURE pfp$add_to_project_info
      (    info_type: project_info_type;
           account_name: avt$account_name;
           project_name: avt$project_name;
           online_eoi_size: integer;
           offline_eoi_size: integer;
           offline_total_eoi_size: integer;
           allocated_size: integer;
       VAR first_project_info {input, output} : ^project_information);

      VAR
        current_project_info: ^project_information,
        next_project_info: ^project_information,
        previous_project_info: ^project_information;

      next_project_info := NIL;
      previous_project_info := NIL;
      current_project_info := first_project_info;

    /project_search/
      WHILE current_project_info <> NIL DO
        IF (current_project_info^.info_type = info_type) AND
              (current_project_info^.account_name = account_name) AND
              (current_project_info^.project_name = project_name) THEN
          EXIT /project_search/;
        ELSEIF (current_project_info^.info_type = info_type) AND
              ((current_project_info^.account_name > account_name) OR
              ((current_project_info^.account_name = account_name) AND
              (current_project_info^.project_name > project_name))) THEN
          IF current_project_info = first_project_info THEN
            first_project_info := NIL;
          IFEND;
          next_project_info := current_project_info;
          current_project_info := NIL;
          EXIT /project_search/;
        ELSE
          previous_project_info := current_project_info;
          current_project_info := current_project_info^.next_project_info;
        IFEND;
      WHILEND /project_search/;

      IF current_project_info = NIL THEN
        NEXT current_project_info IN project_info_p;
        IF first_project_info = NIL THEN
          first_project_info := current_project_info;
        IFEND;
        IF previous_project_info <> NIL THEN
          previous_project_info^.next_project_info := current_project_info;
        IFEND;
        current_project_info^.next_project_info := next_project_info;
        current_project_info^.info_type := info_type;
        current_project_info^.account_name := account_name;
        current_project_info^.project_name := project_name;
        current_project_info^.allocated_size := 0;
        current_project_info^.online_eoi_size := 0;
        current_project_info^.offline_eoi_size := 0;
        current_project_info^.offline_total_eoi_size := 0;
        current_project_info^.count := 0;
      IFEND;

      current_project_info^.allocated_size := current_project_info^.allocated_size + allocated_size;
      current_project_info^.online_eoi_size := current_project_info^.online_eoi_size + online_eoi_size;
      current_project_info^.offline_eoi_size := current_project_info^.offline_eoi_size + offline_eoi_size;
      current_project_info^.offline_total_eoi_size := current_project_info^.offline_total_eoi_size +
            offline_total_eoi_size;
      current_project_info^.count := current_project_info^.count + 1;

    PROCEND pfp$add_to_project_info;
?? OLDTITLE ??
