! ******************************************************************************************************************************** ! Created: 12-JUN-2006 19:50:29 by OpenVMS SDL EV1-69 ! Source: 13-FEB-1997 16:43:12 $2$DUA315:[OSAK.V30_AXP_BUILDS.VT.TEMP.SRC]OSAK ! ******************************************************************************************************************************** !*** MODULE OSAK_DEFINITIONS IDENT V3-00 *** ! ! Copyright Digital Equipment Corporation 1985,1995. All rights reserved. ! ! Restricted Rights: Use, duplication, or disclosure by the U.S. Government ! is subject to restrictions as set forth in subparagraph (c) (1) (ii) of ! DFARS 252.227-7013, or in FAR 52.227-19, or in FAR 52.227-14 Alt. III, as ! applicable. ! ! This software is proprietary to and embodies the confidential technology ! of Digital Equipment Corporation. Possession, use, or copying of this ! software and media is authorized only pursuant to a valid written license ! from Digital or an authorised sublicensor. ! ! ++ ! ! FACILITY: OSI Applications Kernel (OSAK) ! ! ABSTRACT: This file defines the common data structures ! used by the OSAK User Interfaces. ! ! -- ! Copyright Digital Equipment Corporation 1985,1995. All rights reserved. ! ! Restricted Rights: Use, duplication, or disclosure by the U.S. Government ! is subject to restrictions as set forth in subparagraph (c) (1) (ii) of ! DFARS 252.227-7013, or in FAR 52.227-19, or in FAR 52.227-14 Alt. III, as ! applicable. ! ! This software is proprietary to and embodies the confidential technology ! of Digital Equipment Corporation. Possession, use, or copying of this ! software and media is authorized only pursuant to a valid written license ! from Digital or an authorised sublicensor. ! FIELD osak_mem_descriptor_FIELDSET = SET size = [0,0,32,0], ! length of string in bytes pointer = [4,0,32,0] ! reference to string TES; literal s_osak_mem_descriptor = 8; MACRO osak_mem_descriptor = BLOCK [s_osak_mem_descriptor,byte] FIELD (osak_mem_descriptor_FIELDSET) %; ! NSAP definition literal s_id = 8; FIELD osak_nsap_FIELDSET = SET next = [0,0,32,0], ! Next nsap id = [4,0,64,0], ! Address type = [12,0,32,1] ! N-protocol in OSAK encoded form TES; literal s_osak_nsap = 16; MACRO osak_nsap = BLOCK [s_osak_nsap,byte] FIELD (osak_nsap_FIELDSET) %; ! Copyright Digital Equipment Corporation 1985,1995. All rights reserved. ! ! Restricted Rights: Use, duplication, or disclosure by the U.S. Government ! is subject to restrictions as set forth in subparagraph (c) (1) (ii) of ! DFARS 252.227-7013, or in FAR 52.227-19, or in FAR 52.227-14 Alt. III, as ! applicable. ! ! This software is proprietary to and embodies the confidential technology ! of Digital Equipment Corporation. Possession, use, or copying of this ! software and media is authorized only pursuant to a valid written license ! from Digital or an authorised sublicensor. ! ! ! OSAK status block ! FIELD osak_status_block_FIELDSET = SET osak_status_1 = [0,0,32,0], ! OSAK status osak_status_2 = [4,0,32,0], ! Secondary OSAK status transport_status_1 = [8,0,32,0], ! Transport Provider status transport_status_2 = [12,0,32,0] ! Secondary transport provider status TES; literal s_osak_status_block = 16; MACRO osak_status_block = BLOCK [s_osak_status_block,byte] FIELD (osak_status_block_FIELDSET) %; ! ! Common service parameter types ! macro osak_port = 0,0,32,0 %; ! OSAK connection port macro osak_rtn = 0,0,32,0 %; macro osak_process_id = 0,0,32,0 %; macro osak_channels = 0,0,32,0 %; ! OSAK channels ! ! OSAK port list ! macro osak_port_list = 0,0,32,0 %; ! ! OSAK handle ! FIELD osak_handle_FIELDSET = SET id = [0,0,32,0], ! handle id request_mask = [4,0,8,0], ! request event mask returned_mask = [5,0,8,0], ! returned event mask filler = [6,0,16,0] TES; literal s_osak_handle = 8; MACRO osak_handle = BLOCK [s_osak_handle,byte] FIELD (osak_handle_FIELDSET) %; macro osak_handle_count = 0,0,32,0 %; ! ! OSAK time ! macro osak_time = 0,0,32,0 %; ! ! RFC1006 port ! macro osak_rfc1006_port = 0,0,32,0 %; ! ! Transport template names ! literal s_name = 8; FIELD osak_transport_templates_FIELDSET = SET next = [0,0,32,0], ! Next element in the list name = [4,0,64,0] ! Transport template name TES; literal s_osak_transport_templates = 12; MACRO osak_transport_templates = BLOCK [s_osak_transport_templates,byte] FIELD (osak_transport_templates_FIELDSET) %; ! ! Presentation address ! literal s_psel = 8; literal s_ssel = 8; literal s_tsel = 8; literal s_nsap = 16; FIELD osak_paddress_FIELDSET = SET psel = [0,0,64,0], ! P SELECTOR ssel = [8,0,64,0], ! S SELECTOR tsel = [16,0,64,0], ! T SELECTOR nsap = [24,0,0,0] ! NSAP TES; literal s_osak_paddress = 40; MACRO osak_paddress = BLOCK [s_osak_paddress,byte] FIELD (osak_paddress_FIELDSET) %; ! ! Application Entity Invocation Identifier ! literal s_apiid = 8; literal s_aeiid = 8; FIELD osak_aeiid_FIELDSET = SET apiid = [0,0,64,0], ! AP Inv ID, TLV for ASN.1 INT aeiid = [8,0,64,0] ! AE Inv ID, TLV for ASN.1 INT TES; literal s_osak_aeiid = 16; MACRO osak_aeiid = BLOCK [s_osak_aeiid,byte] FIELD (osak_aeiid_FIELDSET) %; ! ! Application Entity Title ! literal s_aptitle = 8; literal s_ae_qualifier = 8; FIELD osak_ae_title_FIELDSET = SET aptitle = [0,0,64,0], ! AP-Title, TLV for ASN.1 OBJ ID ae_qualifier = [8,0,64,0] ! AE-Qualifier,TLV for ASN.1 INT TES; literal s_osak_ae_title = 16; MACRO osak_ae_title = BLOCK [s_osak_ae_title,byte] FIELD (osak_ae_title_FIELDSET) %; ! ! Application Entity Invocation ! literal s_paddress = 40; literal s_aetitle = 16; literal s_aeiid = 16; FIELD osak_aei_FIELDSET = SET paddress = [0,0,0,0], ! presentation address aetitle = [40,0,0,0], ! App Entity Title aeiid = [56,0,0,0] ! App Entity Invocation ID TES; literal s_osak_aei = 72; MACRO osak_aei = BLOCK [s_osak_aei,byte] FIELD (osak_aei_FIELDSET) %; ! ! ACSE Protocol version ! literal acsev_m_version1 = 1; literal acsev_m_reserved = 254; FIELD osak_acse_version_FIELDSET = SET version1 = [0,0,1,0], ! ACSE version 1 reserved = [0,1,7,0] ! reserved for future use TES; literal s_osak_acse_version = 1; MACRO osak_acse_version = BLOCK [s_osak_acse_version,byte] FIELD (osak_acse_version_FIELDSET) %; ! ! Presentation Protocol version ! literal pv_m_version1 = 1; literal pv_m_reserved = 254; FIELD osak_pversion_FIELDSET = SET version1 = [0,0,1,0], ! Presentation version 1 reserved = [0,1,7,0] ! reserved for future use TES; literal s_osak_pversion = 1; MACRO osak_pversion = BLOCK [s_osak_pversion,byte] FIELD (osak_pversion_FIELDSET) %; ! ! Session Protocol version ! literal sv_m_version1 = 1; literal sv_m_version2 = 2; literal sv_m_reserved = 252; FIELD osak_sversion_FIELDSET = SET version1 = [0,0,1,0], ! Session version 1 version2 = [0,1,1,0], ! Session version 2 reserved = [0,2,6,0] ! reserved for future use TES; literal s_osak_sversion = 1; MACRO osak_sversion = BLOCK [s_osak_sversion,byte] FIELD (osak_sversion_FIELDSET) %; ! ! Upper Layer Protocol versions (for use in A-ASSOCIATE) ! FIELD osak_protocol_versions_FIELDSET = SET acse_version = [0,0,8,0], ! ACSE versions pversion = [1,0,8,0], ! Presentation versions sversion = [2,0,8,0], ! Session versions filler = [3,0,8,0] TES; literal s_osak_protocol_versions = 4; MACRO osak_protocol_versions = BLOCK [s_osak_protocol_versions,byte] FIELD (osak_protocol_versions_FIELDSET) %; ! ! Transport provider information ! ! ! Send and Receive Buffer ! literal s_reserved = 16; FIELD osak_buffer_FIELDSET = SET next = [0,0,32,0], ! next element in list buffer_ptr = [4,0,32,0], ! start of actual buffer buffer_length = [8,0,32,0], ! size of actual buffer data_ptr = [12,0,32,0], ! start of user data data_length = [16,0,32,0], ! length of user data reserved = [20,0,0,0] ! reserved TES; literal s_osak_buffer = 36; MACRO osak_buffer = BLOCK [s_osak_buffer,byte] FIELD (osak_buffer_FIELDSET) %; ! ! Session Functional units ! literal fus_m_half_duplex = 1; literal fus_m_duplex = 2; literal fus_m_expedited = 4; literal fus_m_syncminor = 8; literal fus_m_syncmajor = 16; literal fus_m_resynchronize = 32; literal fus_m_activities = 64; literal fus_m_negotiated_release = 128; literal fus_m_capability_data = 256; literal fus_m_exceptions = 512; literal fus_m_typed_data = 1024; literal fus_m_data_separation = 2048; literal fus_m_reserved1 = 61440; literal fus_m_context_management = 65536; literal fus_m_reserved2 = 131072; literal fus_m_reserved3 = -262144; FIELD osak_fus_FIELDSET = SET half_duplex = [0,0,1,0], ! Start of Session FUs duplex = [0,1,1,0], expedited = [0,2,1,0], syncminor = [0,3,1,0], syncmajor = [0,4,1,0], resynchronize = [0,5,1,0], activities = [0,6,1,0], negotiated_release = [0,7,1,0], capability_data = [0,8,1,0], exceptions = [0,9,1,0], typed_data = [0,10,1,0], data_separation = [0,11,1,0], reserved1 = [0,12,4,0], ! for future use context_management = [0,16,1,0], ! Start of Presentation Fus reserved2 = [0,17,1,0], ! contextrestoration for future use reserved3 = [0,18,14,0] ! reserved for future use TES; literal s_osak_fus = 4; MACRO osak_fus = BLOCK [s_osak_fus,byte] FIELD (osak_fus_FIELDSET) %; ! ! Rejection types ! macro osak_reject_reason = 0,0,32,0 %; ! association reject reason ! ! Synchronization types ! macro osak_sync_point = 0,0,32,0 %; ! Sync Point serial number macro osak_sync_confirm = 0,0,32,1 %; ! Sync point confirmation type macro osak_resync_type = 0,0,32,0 %; ! Resync type macro osak_data_separation = 0,0,32,0 %; ! Data separation ! ! Token types ! literal toks_m_data = 3; literal toks_m_sync_minor = 12; literal toks_m_major_activity = 48; literal toks_m_release = 192; FIELD osak_token_setting_FIELDSET = SET data = [0,0,2,0], ! data token sync_minor = [0,2,2,0], ! Sync minor token major_activity = [0,4,2,0], ! Sync major/activity token release = [0,6,2,0] ! release token TES; literal s_osak_token_setting = 1; MACRO osak_token_setting = BLOCK [s_osak_token_setting,byte] FIELD (osak_token_setting_FIELDSET) %; ! ! Exception type ! macro osak_exception_reason = 0,0,32,0 %; ! exception reason ! ! Event type ! macro osak_event = 0,0,32,0 %; ! event code ! ! Activity types ! macro osak_activity_reason = 0,0,32,0 %; ! Activity Reason macro osak_activity_id = 0,0,48,0 %; literal s_osak_activity_id = 6; ! Activity Identifier ! ! Abort Reason ! macro osak_abort_reason = 0,0,32,0 %; ! ! Abort PPDU for event identifier in P-P-Abort ! macro osak_abort_ppdu = 0,0,32,0 %; ! ! Release types ! macro osak_release_reason = 0,0,32,0 %; ! Release reason macro osak_release_resp_reason = 0,0,32,0 %; ! Release Response reason macro osak_action_result = 0,0,32,0 %; ! Action result ! ! Session segmentation ! FIELD osak_segmentation_FIELDSET = SET init_resp = [0,0,16,0], ! direction initiator->responder resp_init = [2,0,16,0] ! direction responder->initiator TES; literal s_osak_segmentation = 4; MACRO osak_segmentation = BLOCK [s_osak_segmentation,byte] FIELD (osak_segmentation_FIELDSET) %; ! ! Session Connect Identification ! literal s_ss_user_ref = 8; literal s_common_ref = 8; literal s_add_ref_info = 8; FIELD osak_sconnect_id_FIELDSET = SET ss_user_ref = [0,0,64,0], ! SS User reference common_ref = [8,0,64,0], ! Common reference add_ref_info = [16,0,64,0] ! Additional reference info TES; literal s_osak_sconnect_id = 24; MACRO osak_sconnect_id = BLOCK [s_osak_sconnect_id,byte] FIELD (osak_sconnect_id_FIELDSET) %; ! ! Session Connection Identification ! literal s_called_ss_user_ref = 8; literal s_calling_ss_user_ref = 8; literal s_common_ref = 8; literal s_add_ref_info = 8; FIELD osak_sconnection_id_FIELDSET = SET called_ss_user_ref = [0,0,64,0], ! Called SS User ref calling_ss_user_ref = [8,0,64,0], ! Calling SS User ref common_ref = [16,0,64,0], ! Common reference add_ref_info = [24,0,64,0] ! Additional reference info TES; literal s_osak_sconnection_id = 32; MACRO osak_sconnection_id = BLOCK [s_osak_sconnection_id,byte] FIELD (osak_sconnection_id_FIELDSET) %; ! ! Presentation Context Information ! ! Transfer Syntax Name List ! literal s_ts_name = 8; FIELD osak_ts_list_FIELDSET = SET next = [0,0,32,0], ! pointer to next element ts_name = [4,0,64,0] ! xfer syntax, TLV for ASN.1 OBJ ID TES; literal s_osak_ts_list = 12; MACRO osak_ts_list = BLOCK [s_osak_ts_list,byte] FIELD (osak_ts_list_FIELDSET) %; ! ! Presentation Context ! literal s_pcontext_id = 8; literal s_ts_name = 8; literal s_as_name = 8; FIELD osak_pcontext_FIELDSET = SET next = [0,0,32,0], ! pointer to next element pcontext_id = [4,0,64,0], ! TLV for ASN.1 INTEGER ts_name = [12,0,64,0], ! TLV for ASN.1 OBJ ID as_name = [20,0,64,0] ! TLV for ASN.1 OBJ ID TES; literal s_osak_pcontext = 28; MACRO osak_pcontext = BLOCK [s_osak_pcontext,byte] FIELD (osak_pcontext_FIELDSET) %; ! ! Presentation Context Proposal List ! literal s_pcontext_id = 8; literal s_as_name = 8; FIELD osak_pcontext_proposal_FIELDSET = SET next = [0,0,32,0], ! next element pcontext_id = [4,0,64,0], ! TLV for ASN.1 INTEGER ts_list = [12,0,32,0], ! list of xfer syntax names filler_3 = [16,0,32,0], ! filler as_name = [20,0,64,0] ! TLV for ASN.1 OBJ ID TES; literal s_osak_pcontext_proposal = 28; MACRO osak_pcontext_proposal = BLOCK [s_osak_pcontext_proposal,byte] FIELD (osak_pcontext_proposal_FIELDSET) %; ! ! Default context definition ! literal s_ts_name = 8; literal s_as_name = 8; FIELD osak_default_context_FIELDSET = SET ts_name = [0,0,64,0], ! TLV for ASN.1 OBJ ID as_name = [8,0,64,0] ! TLV for ASN.1 OBJ ID TES; literal s_osak_default_context = 16; MACRO osak_default_context = BLOCK [s_osak_default_context,byte] FIELD (osak_default_context_FIELDSET) %; ! ! Presentation Context Identifier List ! literal s_pcontext_id = 8; literal s_ts_name = 8; FIELD osak_pcontext_id_FIELDSET = SET next = [0,0,32,0], ! next element pcontext_id = [4,0,64,0], ! TLV for ASN.1 INTEGER ts_name = [12,0,64,0] ! TLV for ASN.1 OBJ ID TES; literal s_osak_pcontext_id = 20; MACRO osak_pcontext_id = BLOCK [s_osak_pcontext_id,byte] FIELD (osak_pcontext_id_FIELDSET) %; ! ! Presentation Context Deletion list ! literal s_pcontext_id = 8; FIELD osak_pcontext_deletion_FIELDSET = SET next = [0,0,32,0], ! next element pcontext_id = [4,0,64,0] ! TLV for ASN.1 INTEGER TES; literal s_osak_pcontext_deletion = 12; MACRO osak_pcontext_deletion = BLOCK [s_osak_pcontext_deletion,byte] FIELD (osak_pcontext_deletion_FIELDSET) %; literal s_ts_name = 8; FIELD osak_pcontext_proposal_result_FIELDSET = SET next = [0,0,32,0], ! next element ts_name = [4,0,64,0], ! TLV for ASN.1 OBJ ID result = [12,0,32,0], ! Result value reason = [16,0,32,0] ! provider reason TES; literal s_osak_pcontext_proposal_result = 20; MACRO osak_pcontext_proposal_result = BLOCK [s_osak_pcontext_proposal_result,byte] FIELD (osak_pcontext_proposal_result_FIELDSET) %; ! ! Presentation Context Deletion Result List ! FIELD osak_pcontext_deletion_result_FIELDSET = SET next = [0,0,32,0], ! next element result = [4,0,32,0] ! deletion result value TES; literal s_osak_pcontext_deletion_result = 8; MACRO osak_pcontext_deletion_result = BLOCK [s_osak_pcontext_deletion_result,byte] FIELD (osak_pcontext_deletion_result_FIELDSET) %; ! ! Presentation default context result ! macro osak_default_context_result = 0,0,32,0 %; ! ! State information for osak_status function call ! FIELD osak_state_FIELDSET = SET initiator = [0,0,32,1], ! TRUE if initiator,FALSE if responder pm_state = [4,0,8,0], ! State of association filler1 = [5,0,8,0], filler2 = [6,0,16,0] TES; literal s_osak_state = 8; MACRO osak_state = BLOCK [s_osak_state,byte] FIELD (osak_state_FIELDSET) %; literal po_m_extended = 1; literal po_m_reserved = 254; FIELD osak_protocol_options_FIELDSET = SET extended = [0,0,1,0], ! extended concatenation(not supported) reserved = [0,1,7,0], ! reserved for future use filler1 = [1,0,8,0], filler2 = [2,0,16,0] TES; literal s_osak_protocol_options = 4; MACRO osak_protocol_options = BLOCK [s_osak_protocol_options,byte] FIELD (osak_protocol_options_FIELDSET) %; ! ! Presentation DCS for use by trace ! literal s_pcontext_id = 8; literal s_as_name = 8; literal s_ts_name = 8; FIELD osak_dcs_pcontext_FIELDSET = SET next = [0,0,32,0], ! pointer to next element pcontext_id = [4,0,64,0], ! TLV for ASN.1 INTEGER as_name = [12,0,64,0], ! TLV for ASN.1 OBJ ID ts_name = [20,0,64,0] ! TLV for ASN.1 OBJ ID TES; literal s_osak_dcs_pcontext = 28; MACRO osak_dcs_pcontext = BLOCK [s_osak_dcs_pcontext,byte] FIELD (osak_dcs_pcontext_FIELDSET) %; ! ! Transport Characteristics ! macro osak_transport_class = 0,0,8,0 %; FIELD osak_trans_characteristics_FIELDSET = SET class = [0,0,8,0], ! Transport class alternate_class = [1,0,8,0], ! Alternate transport class expedited_flag = [2,0,32,0], ! Use transport expedited checksums_flag = [6,0,32,0] ! Use checksums TES; literal s_osak_trans_characteristics = 10; MACRO osak_trans_characteristics = BLOCK [s_osak_trans_characteristics,byte] FIELD (osak_trans_characteristics_FIELDSET) %; literal RESERVED_AREA = 40; literal s_status_block = 16; literal s_activity_id = 8; literal s_old_activity_id = 8; literal s_redirect_state = 8; FIELD osak_parameter_block_FIELDSET = SET pb_length = [0,0,32,0], ws_length = [4,0,32,0], func = [8,0,32,0], tsdu_ptr = [12,0,32,0], next_pb = [16,0,32,0], port_id = [20,0,32,0], event_type = [24,0,32,0], more_flag = [28,0,32,1], data_length = [32,0,32,0], user_data = [36,0,32,0], peer_data = [40,0,32,0], acse_pci_eoc = [44,0,32,0], pres_pci_eoc = [48,0,32,0], status_block = [52,0,0,0], local_aei = [68,0,32,0], actual_aeiid = [72,0,32,0], acontext = [76,0,32,0], calling_aei = [80,0,32,0], called_aei = [84,0,32,0], transport_template = [88,0,32,0], protocol_versions = [92,0,32,0], sconnect_id = [96,0,32,0], protocol_options = [100,0,32,0], segmentation = [104,0,32,0], initial_serial_number = [108,0,32,0], initial_tokens = [112,0,32,0], functional_units = [116,0,32,0], pcontext_list = [120,0,32,0], pdefault_context = [124,0,32,0], responding_aei = [128,0,32,0], pcontext_res_list = [132,0,32,0], pdefault_context_res = [136,0,32,0], reject_reason = [140,0,32,0], request_tokens = [144,0,32,0], pcontext_del_list = [148,0,32,0], pcontext_del_res_list = [152,0,32,0], token_item = [156,0,32,0], sync_confirm = [160,0,32,1], sync_point = [164,0,32,0], resync_type = [168,0,32,0], pcontext_id_list = [172,0,32,0], tokens = [176,0,32,0], exception_reason = [180,0,32,0], activity_id = [184,0,64,0], old_activity_id = [192,0,64,0], old_sconnection_id = [200,0,32,0], activity_reason = [204,0,32,0], abort_reason = [208,0,32,0], abort_ppdu = [212,0,32,0], local_abort = [216,0,32,1], release_reason = [220,0,32,0], release_resp_reason = [224,0,32,0], action_result = [228,0,32,0], redirect_state = [232,0,64,0], process_id = [240,0,32,0], process_name = [244,0,32,0], pcontext_redirect_list = [248,0,32,0], rcv_data_list = [252,0,32,0], local_data = [256,0,32,0], alloc_rtn = [260,0,32,0], dealloc_rtn = [264,0,32,0], alloc_param = [268,0,32,0], completion_rtn = [272,0,32,0], completion_param = [276,0,32,0], trans_characteristics = [280,0,32,0], api_version = [284,0,32,0], user_context = [288,0,32,0], data_separation = [292,0,32,0], rfc1006_port = [296,0,32,0] TES; literal s_osak_parameter_block = 300; MACRO osak_parameter_block = BLOCK [s_osak_parameter_block,byte] FIELD (osak_parameter_block_FIELDSET) %; literal V20_API_PB_SIZE = 280; literal V30_API_PB_SIZE = 300; literal API_PB_SIZE = 300; ! ! Define ROSE API structures. [021] ! macro osak_rose_reason = 0,0,32,0 %; macro osak_rose_problem = 0,0,32,0 %; literal s_invoke_id = 8; literal s_linked_id = 8; literal s_local_value = 8; literal s_global_value = 8; literal s_status_block = 16; FIELD osak_rose_pb_FIELDSET = SET pdu_type = [0,0,32,0], ! ROSE PDU type pb_length = [4,0,32,0], ! Parameter block length ws_length = [8,0,32,0], ! Working space length invoke_id = [12,0,64,0], ! Invoke identification linked_id = [20,0,64,0], ! Linked identification local_value = [28,0,64,0], ! Local operation value global_value = [36,0,64,0], ! Global operation value reason = [44,0,32,0], ! ROSE REJECT reason problem = [48,0,32,0], ! ROSE REJECT problem status_block = [52,0,0,0], ! ROSE status block arg_length = [68,0,32,0], ! Argument length buffer = [72,0,32,0] ! ROSE output buffer TES; literal s_osak_rose_pb = 76; MACRO osak_rose_pb = BLOCK [s_osak_rose_pb,byte] FIELD (osak_rose_pb_FIELDSET) %; literal ROSE_PB_SIZE = 76; literal WS_REASON_OFFSET = 0; literal WS_PROBLEM_OFFSET = 4; literal ROSE_WS_SIZE = 8;