?? RIGHT := 110 ??
?? NEWTITLE := 'NOS/VE File Server : Common Routines' ??
MODULE dfm$common_routines;

{ PURPOSE:
{   This module contains routines that are of common use to the file server code.

?? NEWTITLE := 'Global Declarations Referenced by This Module', EJECT ??
?? PUSH (LISTEXT := ON) ??
*copyc dfe$error_condition_codes
*copyc dft$connection_parameters
*copyc jmc$system_family
?? POP ??
*copyc clp$get_value
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc pmp$convert_mainframe_to_binary
*copyc pmp$get_user_identification
?? EJECT ??
*copyc dfv$p_queue_interface_directory
*copyc osv$system_family_name
?? OLDTITLE ??
?? NEWTITLE := 'dfp$check_if_valid', EJECT ??

{ PURPOSE:
{   This procedure determines if the DEFINE_SERVER/DEFINE_CLIENT command is valid.

  PROCEDURE [XDCL] dfp$check_if_valid
    (    connection_parameters: dft$connection_parameters;
     VAR status: ost$status);

    VAR
      index: dft$queue_directory_index;

    status.normal := TRUE;
    IF dfv$p_queue_interface_directory = NIL THEN
      RETURN;
    IFEND;

    FOR index := 1 TO UPPERBOUND (dfv$p_queue_interface_directory^) DO
      IF dfv$p_queue_interface_directory^ [index].connection_type = dfc$esm_connection THEN
        IF dfv$p_queue_interface_directory^ [index].element_name =
              connection_parameters.esm_parameters.element_name THEN

          IF dfv$p_queue_interface_directory^ [index].send_pp.pp_status.activated OR
                dfv$p_queue_interface_directory^ [index].receive_pp.pp_status.activated THEN
            osp$set_status_abnormal (dfc$file_server_id, dfe$pp_active_during_define, '', status);
            RETURN;
          IFEND;

          IF dfv$p_queue_interface_directory^ [index].send_channel <>
                connection_parameters.esm_parameters.send_channel THEN
            osp$set_status_abnormal (dfc$file_server_id, dfe$stornet_channel_mismatch, 'SEND', status);
            RETURN;
          IFEND;

          IF dfv$p_queue_interface_directory^ [index].receive_channel <>
                connection_parameters.esm_parameters.receive_channel THEN
            osp$set_status_abnormal (dfc$file_server_id, dfe$stornet_channel_mismatch, 'RECEIVE', status);
            RETURN;
          IFEND;

          RETURN;
        IFEND;
      IFEND;
    FOREND;

  PROCEND dfp$check_if_valid;
?? OLDTITLE ??
?? NEWTITLE := 'dfp$crack_mainframe_id ', EJECT ??

{ PURPOSE:
{   This cracks an 'old types' parameter of the form $SYSTEM_MMMM_NNNN, where MMMM is the model number, and
{   NNNN is the serial number.

  PROCEDURE [XDCL, #GATE] dfp$crack_mainframe_id
    (    parameter_name: string ( * <= osc$max_name_size);
     VAR mainframe_id: pmt$mainframe_id;
     VAR binary_mainframe_id: pmt$binary_mainframe_id;
     VAR status: ost$status);

    VAR
      value: clt$value;

    status.normal := TRUE;
    clp$get_value (parameter_name, 1, 1, clc$low, value, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    mainframe_id := value.name.value;

    pmp$convert_mainframe_to_binary (mainframe_id, binary_mainframe_id, status);
    IF NOT status.normal THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$improper_mainframe_id, mainframe_id, status);
      RETURN;
    IFEND;

    IF binary_mainframe_id.model_number = osc$cyber_180_model_unknown THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$unknown_model_number,
            mainframe_id (9, pmc$processor_model_number_size), status);
      osp$append_status_parameter (osc$status_parameter_delimiter, mainframe_id, status);
      RETURN;
    IFEND;

  PROCEND dfp$crack_mainframe_id;
?? OLDTITLE ??
?? NEWTITLE := 'dfp$new_crack_mainframe_id ', EJECT ??

{ PURPOSE:
{   This cracks a 'new types' parameter of the form $SYSTEM_MMMM_NNNN, where MMMM is the model number, and
{   NNNN is the serial number.

  PROCEDURE [XDCL, #GATE] dfp$new_crack_mainframe_id
    (    mainframe_id: pmt$mainframe_id;
     VAR binary_mainframe_id: pmt$binary_mainframe_id;
     VAR status: ost$status);

    status.normal := TRUE;
    pmp$convert_mainframe_to_binary (mainframe_id, binary_mainframe_id, status);
    IF NOT status.normal THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$improper_mainframe_id, mainframe_id, status);
      RETURN;
    IFEND;

    IF binary_mainframe_id.model_number = osc$cyber_180_model_unknown THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$unknown_model_number,
            mainframe_id (9, pmc$processor_model_number_size), status);
      osp$append_status_parameter (osc$status_parameter_delimiter, mainframe_id, status);
      RETURN;
    IFEND;

  PROCEND dfp$new_crack_mainframe_id;
?? OLDTITLE ??
?? NEWTITLE := 'dfp$verify_system_administrator', EJECT ??

  PROCEDURE [XDCL, #GATE] dfp$verify_system_administrator
    (    request_name: string ( * <= osc$max_name_size);
     VAR status: ost$status);

    VAR
      user_id: ost$user_identification;

    pmp$get_user_identification (user_id, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    IF NOT ((user_id.family = osv$system_family_name) AND (user_id.user = jmc$system_user)) THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$not_system_administrator, request_name, status);
    IFEND;

  PROCEND dfp$verify_system_administrator;
?? OLDTITLE ??
MODEND dfm$common_routines;
