{ This common deck contains the description of the application file layout.
{ The application file is setup as follows:
{      .File header
{      .Array of server names and relocatable pointers. The relocatable pointer
{       points to the start of the server definition.
{      .Array of client names and relocatable pointers. The relocatable pointer
{       points to the start of the client definition.
{      .Array of tcpip names and relocatable pointers. The relocatable pointer
{       points to the start of the tcpip definition.
{      .Server definitions. Note that each server definition is followed by the
{       titles selected for that server.
{      .Array of client addresses.
{      .Client definitions.
{      .Tcpip definitions.

  CONST
    nac$application_file_version = 'V1.2',
    nac$v10_appl_file_version = 'V1.0',
    nac$v11_appl_file_version = 'V1.1',
    nac$max_titles = 0ff(16);

  TYPE
    nat$application_file_header = record
      version: string(4),
      creation_date_time: ost$date_time,
      modification_date_time: ost$date_time,
      server_count: 0 .. 0ffff(16),
      client_count: 0 .. 0ffff(16),
      tcpip_count: 0 .. 0ffff(16),
    recend,

    nat$v10_v11_file_header = record
      version: string(4),
      creation_date_time: ost$date_time,
      modification_date_time: ost$date_time,
      server_count: 0 .. 0ffff(16),
      client_count: 0 .. 0ffff(16),
    recend,

    nat$application_file = SEQ(*),
    nat$server_pointers = array [1..*] of nat$server_pointer,
    nat$server_pointer = record
      server: nat$application_name,
      pointer: REL(nat$application_file)^nat$complete_server_definition,
    recend,

    nat$client_pointers = array [1..*] of nat$client_pointer,
    nat$client_pointer = record
      client: nat$application_name,
      pointer: REL(nat$application_file)^nat$complete_client_definition,
    recend,

    nat$tcpip_pointers = array [1..*] of nat$tcpip_pointer,
    nat$tcpip_pointer = record
      application: nat$application_name,
      pointer: REL(nat$application_file)^nat$complete_tcpip_definition,
    recend,

    nat$complete_server_definition = seq(*),
    nat$server_definition = record
      server: nat$application_name,
      server_status: nat$application_status,
      max_connections: nat$number_of_connections,
      title_count: 0 .. nac$max_titles,
      selected_titles: REL(nat$complete_server_definition) ^nat$selected_titles_list,
      server_managed_title_count: 0 .. nac$max_titles,
      server_managed_titles: REL(nat$complete_server_definition) ^nat$title_pattern_list,
{ Sever validation.
      server_capability: ost$name,
      server_ring: ost$ring,
      server_system_privilege: boolean,
{ Other attributes.
      accept_connection: boolean,
      client_validation_capability: ost$name,
      client_info_source: nat$client_info_source,
      client_address_count: 0 .. 0ffff(16),
      client_addresses: REL(nat$complete_server_definition)^array [1..*] OF nat$client_address,
      reserved_application_id: boolean,
      application_id: nat$internet_sap_identifier,
      protocol: nat$protocol,
      message_priority: nat$network_message_priority,
      flags: packed record
        nam_accounting: boolean,
      recend,
      nam_initiated_server: boolean,
      server_job_validation_source: nat$server_validation_source,
      server_job_max_connections: nat$number_of_connections,
      service_file_defined: boolean,
    recend,

    nat$v10_server_definition = record
      server: nat$application_name,
      server_status: nat$application_status,
      max_connections: nat$number_of_connections,
      title_count: 0 .. nac$max_titles,
      selected_titles: REL(nat$complete_server_definition) ^nat$v10_selected_titles_list,
{ Sever validation.
      server_capability: ost$name,
      server_ring: ost$ring,
      server_system_privilege: boolean,
{ Other attributes.
      accept_connection: boolean,
      client_validation_capability: ost$name,
      client_info_source: nat$client_info_source,
      client_address_count: 0 .. 0ffff(16),
      client_addresses: REL(nat$complete_server_definition)^array [1..*] OF nat$v10_client_address,
      reserved_application_id: boolean,
      application_id: nat$internet_sap_identifier,
      protocol: nat$protocol,
      nam_initiated_server: boolean,
      server_job_validation_source: nat$server_validation_source,
      server_job_max_connections: nat$number_of_connections,
      service_file_defined: boolean,
    recend,

    nat$v10_selected_titles_list = array [1..*] of nat$v10_selected_title,
    nat$v10_selected_title = record
      title: string (nac$max_title_length),
      distribute_title: boolean,
    recend,

    nat$v10_client_address = record
      network_id: nat$network_identifier,
      system_id: nat$system_identifier,
      reserved_application_id: boolean,
      application_id: nat$internet_sap_identifier,
    recend,

    nat$complete_client_definition = seq (*),
    nat$client_definition = record
      client: nat$application_name,
      client_status: nat$application_status,
      protocol: nat$protocol,
      reserved_application_id: boolean,
      application_id: nat$internet_sap_identifier,
      max_connections: nat$number_of_connections,
      client_capability: ost$name,
      client_ring: ost$ring,
      client_system_privilege: boolean,
      message_priority: nat$network_message_priority,
      flags: packed record
        nam_accounting: boolean,
      recend,
    recend,

    nat$v10_client_definition = record
      client: nat$application_name,
      client_status: nat$application_status,
      protocol: nat$protocol,
      reserved_application_id: boolean,
      application_id: nat$internet_sap_identifier,
      max_connections: nat$number_of_connections,
      client_capability: ost$name,
      client_ring: ost$ring,
      client_system_privilege: boolean,
    recend,

    nat$complete_tcpip_definition = seq(*),
    nat$tcpip_definition = record
      tcpip_application: nat$application_name,
      tcpip_status: nat$application_status,
      maximum_sockets: nat$number_of_sockets,
{ Application validation.
      tcpip_capability: ost$name,
      tcpip_ring: ost$ring,
      tcpip_system_privilege: boolean,
{ Other attributes.
      protocol: nat$protocol,
      flags: packed record
        nam_accounting: boolean,
      recend,
      nam_initiated_server: boolean,
{ The following attributes are not supported at this time but are included to allow supporting
{ future enhancements without requiring a change in the application file format.
      accept_connection: boolean,
      reserved_application_id: boolean,
      application_id: nat$sk_port_number,
      client_validation_capability: ost$name,
      client_info_source: nat$client_info_source,
      title_count: 0 .. nac$max_titles,
      selected_titles: REL(nat$complete_tcpip_definition) ^nat$selected_titles_list,
      tcpip_managed_title_count: 0 .. nac$max_titles,
      tcpip_managed_titles: REL(nat$complete_tcpip_definition) ^nat$title_pattern_list,
      tcpip_listen: boolean,
      tcpip_client_address_count: 0 .. 0ffff(16),
      tcpip_client_addresses: REL(nat$complete_tcpip_definition)^array [1..*] OF nat$tcpip_address,
      tcpip_job_validation_source: nat$server_validation_source,
      tcpip_job_max_sockets: nat$number_of_sockets,
      service_file_defined: boolean,
    recend;

  CONST
    nac$v10_cdna_session = 0,
    nac$v10_cdna_virtual_terminal = 2;

*copyc nat$application_name
*copyc nat$directory_data
*copyc nat$directory_entry_identifier
*copyc nat$directory_priority
*copyc nat$internet_sap_identifier
*copyc nat$network_address
*copyc nat$network_message_priority
*copyc nat$number_of_connections
*copyc nat$number_of_sockets
*copyc nat$protocol
*copyc nat$server_attributes
*copyc nat$tcpip_address
*copyc nat$tcpip_attributes
*copyc nat$title_pattern_list
*copyc osd$virtual_address
*copyc ost$date_time
*copyc ost$name

