FreeCalypso > hg > fc-magnetite
view cdg211/cdginc/m_rr_com.h @ 107:267cefdca4b6
src/g23m-gsm/l1/l1_pei.c: tweaked to match TCS211 binary object
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 05 Oct 2016 22:41:43 +0000 |
parents | 56abf6cf8a0b |
children |
line wrap: on
line source
/* +--------------------------------------------------------------------------+ | PROJECT : PROTOCOL STACK | | FILE : m_rr_com.h | | SOURCE : "__out__\g23m_dfile\msg\rr_com.mdf" | | LastModified : "2002-11-18" | | IdAndVersion : "8443.250.02.008" | | SrcFileTime : "Mon Nov 24 15:49:38 2003" | | Generated by CCDGEN_2.5.5 on Fri Jun 08 13:59:14 2007 | | !!DO NOT MODIFY!!DO NOT MODIFY!!DO NOT MODIFY!! | +--------------------------------------------------------------------------+ */ /* PRAGMAS * PREFIX : NONE * COMPATIBILITY_DEFINES : NO (require PREFIX) * ALWAYS_ENUM_IN_VAL_FILE: NO * ENABLE_GROUP: NO * CAPITALIZE_TYPENAME: NO */ #ifndef M_RR_COM_H #define M_RR_COM_H #define CDG_ENTER__M_RR_COM_H #define CDG_ENTER__FILENAME _M_RR_COM_H #define CDG_ENTER__M_RR_COM_H__FILE_TYPE CDGINC #define CDG_ENTER__M_RR_COM_H__LAST_MODIFIED _2002_11_18 #define CDG_ENTER__M_RR_COM_H__ID_AND_VERSION _8443_250_02_008 #define CDG_ENTER__M_RR_COM_H__SRC_FILE_TIME _Mon_Nov_24_15_49_38_2003 #include "CDG_ENTER.h" #undef CDG_ENTER__M_RR_COM_H #undef CDG_ENTER__FILENAME #include "m_rr_com.val" #ifndef __T_mob_class_1__ #define __T_mob_class_1__ /* * Mobile Station Classmark 1 * CCDGEN:WriteStruct_Count==1 */ typedef struct { U8 rev_lev; /*< 0: 1> Revision Level */ U8 es_ind; /*< 1: 1> Early Classmark Sending; 'controlled early classmark sending' option is implemented (1) or not (0) in the MS */ U8 a5_1; /*< 2: 1> A5/1; Encryption algorithm A5/1. Note inverse logic for the A5/1 encryption algorithm between classmark 1 and 2 on the one hand (available=0 or not=1) and radio access capability on the other hand (available=1 or not=0). */ U8 rf_pow_cap; /*< 3: 1> RF power capability */ } T_mob_class_1; #endif #ifndef __T_mob_class_2__ #define __T_mob_class_2__ /* * Mobile Station Classmark 2 * CCDGEN:WriteStruct_Count==2 */ typedef struct { U8 rev_lev; /*< 0: 1> Revision Level */ U8 es_ind; /*< 1: 1> Early Classmark Sending; 'controlled early classmark sending' option is implemented (1) or not (0) in the MS */ U8 a5_1; /*< 2: 1> A5/1; Encryption algorithm A5/1. Note inverse logic for the A5/1 encryption algorithm between classmark 1 and 2 on the one hand (available=0 or not=1) and radio access capability on the other hand (available=1 or not=0). */ U8 rf_pow_cap; /*< 3: 1> RF power capability */ U8 ps; /*< 4: 1> Pseudo Synchronisation capability; Pseudo synchronisation capabilty is present (1) or not (0) */ U8 ss_screen; /*< 5: 1> SS Screening Indicator */ U8 mt_pp_sms; /*< 6: 1> Short Message capability; MS does supports (1) MT point to point SMS or not (0) */ U8 vbs; /*< 7: 1> Voice Broadcast Service; VBS capability and notification wanted (1) or not (0) */ U8 vgcs; /*< 8: 1> Voice Group Call Service; VGCS capability and notification wanted (1) or not (0) */ U8 egsm; /*< 9: 1> Frequency capability */ U8 class3; /*< 10: 1> Classmark 3; The MS supports options that are indicated in classmark 3 (1) or it does not support any classmark 3 options (0) */ U8 lcsva; /*< 11: 1> LCSVA capability; LCS value added location request notification supported (1) or not (0) */ U8 ucs2_treat; /*< 12: 1> UCS2 treatment */ U8 solsa; /*< 13: 1> SoLSA Supported; MS does supports SoLSA (1) or not (0) */ U8 cmsp; /*< 14: 1> CMSP Supported; MS does supports (1) CM service Prompt (network initiated MO CM connection request) or not (0) */ U8 a5_3; /*< 15: 1> A5/3; Encryption algorithm A5/3 available (1) or not (0) */ U8 a5_2; /*< 16: 1> A5/2; Encryption algorithm A5/2 available (1) or not (0) */ U8 _align0; /*< 17: 1> alignment */ U8 _align1; /*< 18: 1> alignment */ U8 _align2; /*< 19: 1> alignment */ } T_mob_class_2; #endif #ifndef __T_gsm400_struct__ #define __T_gsm400_struct__ /* * GSM 400 Bands Supported Structure * CCDGEN:WriteStruct_Count==3 */ typedef struct { U8 gsm400_supp; /*< 0: 1> GSM 400 Bands Supported */ U8 gsm400_cap; /*< 1: 1> GSM 400 Associated Radio Capability */ U8 _align0; /*< 2: 1> alignment */ U8 _align1; /*< 3: 1> alignment */ } T_gsm400_struct; #endif #ifndef __T_measurement__ #define __T_measurement__ /* * Measurement Capability * CCDGEN:WriteStruct_Count==4 */ typedef struct { U8 sms_val; /*< 0: 1> Switch-Measure-Switch-Value */ U8 sm_val; /*< 1: 1> Switch-Measure-Value */ U8 _align0; /*< 2: 1> alignment */ U8 _align1; /*< 3: 1> alignment */ } T_measurement; #endif #ifndef __T_pos_method__ #define __T_pos_method__ /* * MS Positioning Method * CCDGEN:WriteStruct_Count==5 */ typedef struct { U8 assist_eotd; /*< 0: 1> MS assisted E-OTD; MS does supports assisted E-OTD (1) or not (0) */ U8 based_eotd; /*< 1: 1> MS based E-OTD; MS does supports based E-OTD (1) or not (0) */ U8 assist_gps; /*< 2: 1> MS assisted GPS; MS does supports assisted GPS (1) or not (0) */ U8 based_gps; /*< 3: 1> MS based GPS; MS does supports based GPS (1) or not (0) */ U8 conv_gps; /*< 4: 1> MS conventional GPS; MS does supports conventional GPS (1) or not (0) */ U8 _align0; /*< 5: 1> alignment */ U8 _align1; /*< 6: 1> alignment */ U8 _align2; /*< 7: 1> alignment */ } T_pos_method; #endif #ifndef __T_egde_struct__ #define __T_egde_struct__ /* * EGDE Structure * CCDGEN:WriteStruct_Count==6 */ typedef struct { U8 mod; /*< 0: 1> Modulation Capability; MS does supports 8-PSK modulation for uplink and downlink (1) or only for downlink (0) in addition to GSMK */ U8 v_egde_pow1; /*< 1: 1> valid-flag */ U8 egde_pow1; /*< 2: 1> EGDE RF Power Capability 1 */ U8 v_egde_pow2; /*< 3: 1> valid-flag */ U8 egde_pow2; /*< 4: 1> EGDE RF Power Capability 2 */ U8 _align0; /*< 5: 1> alignment */ U8 _align1; /*< 6: 1> alignment */ U8 _align2; /*< 7: 1> alignment */ } T_egde_struct; #endif #ifndef __T_dtm_ms__ #define __T_dtm_ms__ /* * DTM Multislot Structure * CCDGEN:WriteStruct_Count==7 */ typedef struct { U8 dtm_g_ms_class; /*< 0: 1> DTM GPRS Multi Slot Sub-Class */ U8 mac_support; /*< 1: 1> MAC Mode support; MS does supports dynamice and fixed allocation (1) or only exclusive allocation (0) */ U8 v_dtm_e_ms_class; /*< 2: 1> valid-flag */ U8 dtm_e_ms_class; /*< 3: 1> DTM EGPRS Multi Slot Sub-Class; only if the MS supports EGPRS DTM */ } T_dtm_ms; #endif #ifndef __T_mob_class_3__ #define __T_mob_class_3__ /* * Mobile Station Classmark 3 * CCDGEN:WriteStruct_Count==8 */ typedef struct { U8 mb_value; /*< 0: 1> Multiband Support */ U8 a5_7; /*< 1: 1> A5/7; Encryption algorithm A5/7 available (1) or not (0) */ U8 a5_6; /*< 2: 1> A5/6; Encryption algorithm A5/6 available (1) or not (0) */ U8 a5_5; /*< 3: 1> A5/5; Encryption algorithm A5/5 available (1) or not (0) */ U8 a5_4; /*< 4: 1> A5/4; Encryption algorithm A5/4 available (1) or not (0) */ U8 v_radio_cap_2; /*< 5: 1> valid-flag */ U8 radio_cap_2; /*< 6: 1> Associated Radio Capability 2 */ U8 v_radio_cap_1; /*< 7: 1> valid-flag */ U8 radio_cap_1; /*< 8: 1> Associated Radio Capability 1 */ U8 v_rgsm_class; /*< 9: 1> valid-flag */ U8 rgsm_class; /*< 10: 1> R Support (R-GSM Class) */ U8 v_ms_class; /*< 11: 1> valid-flag */ U8 ms_class; /*< 12: 1> Multi Slot Class */ U8 ucs2_treat; /*< 13: 1> UCS2 treatment */ U8 ext_meas; /*< 14: 1> Extended Measurement Capability; MS does supports 'extended measurements`(1) or not (0) */ U8 v_measurement; /*< 15: 1> valid-flag */ T_measurement measurement; /*< 16: 4> Measurement Capability */ U8 _align0; /*< 20: 1> alignment */ U8 _align1; /*< 21: 1> alignment */ U8 _align2; /*< 22: 1> alignment */ U8 v_pos_method; /*< 23: 1> valid-flag */ T_pos_method pos_method; /*< 24: 8> MS Positioning Method */ U8 v_edge_ms_class; /*< 32: 1> valid-flag */ U8 edge_ms_class; /*< 33: 1> EDGE Multi Slot Class */ U8 _align3; /*< 34: 1> alignment */ U8 v_egde_struct; /*< 35: 1> valid-flag */ T_egde_struct egde_struct; /*< 36: 8> EGDE Structure */ U8 _align4; /*< 44: 1> alignment */ U8 _align5; /*< 45: 1> alignment */ U8 _align6; /*< 46: 1> alignment */ U8 v_gsm400_struct; /*< 47: 1> valid-flag */ T_gsm400_struct gsm400_struct; /*< 48: 4> GSM 400 Bands Supported Structure */ U8 v_gsm850_cap; /*< 52: 1> valid-flag */ U8 gsm850_cap; /*< 53: 1> GSM 850 Associated Radio Capability */ U8 v_pcs1900_cap; /*< 54: 1> valid-flag */ U8 pcs1900_cap; /*< 55: 1> PCS 1900 Associated Radio Cap. */ U8 umts_fdd; /*< 56: 1> UMTS FDD Radio Access Technology; MS does supports UMTS FDD (1) or not (0) */ U8 umts_tdd; /*< 57: 1> UMTS TDD Radio Access Technology; MS does supports UMTS TDD (1) or not (0) */ U8 cdma2000; /*< 58: 1> CDMA 2000 Radio Access Technology; MS does supports CDMA 2000 (1) or not (0) */ U8 v_dtm_ms; /*< 59: 1> valid-flag */ T_dtm_ms dtm_ms; /*< 60: 4> DTM Multislot Structure */ U8 v_single_band; /*< 64: 1> valid-flag */ U8 single_band; /*< 65: 1> Single GSM Band Support */ U8 _align7; /*< 66: 1> alignment */ U8 _align8; /*< 67: 1> alignment */ } T_mob_class_3; #endif #ifndef __T_a5_bits__ #define __T_a5_bits__ /* * A5 bits * CCDGEN:WriteStruct_Count==9 */ typedef struct { U8 a5_1; /*< 0: 1> A5/1; Encryption algorithm A5/1. Note inverse logic for the A5/1 encryption algorithm between classmark 1 and 2 on the one hand (available=0 or not=1) and radio access capability on the other hand (available=1 or not=0). */ U8 a5_2; /*< 1: 1> A5/2; Encryption algorithm A5/2 available (1) or not (0) */ U8 a5_3; /*< 2: 1> A5/3; Encryption algorithm A5/3 available (1) or not (0) */ U8 a5_4; /*< 3: 1> A5/4; Encryption algorithm A5/4 available (1) or not (0) */ U8 a5_5; /*< 4: 1> A5/5; Encryption algorithm A5/5 available (1) or not (0) */ U8 a5_6; /*< 5: 1> A5/6; Encryption algorithm A5/6 available (1) or not (0) */ U8 a5_7; /*< 6: 1> A5/7; Encryption algorithm A5/7 available (1) or not (0) */ U8 _align0; /*< 7: 1> alignment */ } T_a5_bits; #endif #ifndef __T_sms_sm_value__ #define __T_sms_sm_value__ /* * MS Measurement Capability * CCDGEN:WriteStruct_Count==10 */ typedef struct { U8 sms_val; /*< 0: 1> Switch-Measure-Switch-Value */ U8 sm_val; /*< 1: 1> Switch-Measure-Value */ U8 _align0; /*< 2: 1> alignment */ U8 _align1; /*< 3: 1> alignment */ } T_sms_sm_value; #endif #ifndef __T_gprs_struct__ #define __T_gprs_struct__ /* * GPRS Multislot Class and Extended Dynamic Allocation Capability * CCDGEN:WriteStruct_Count==11 */ typedef struct { U8 gprs_ms_class; /*< 0: 1> GPRS Multi Slot Class */ U8 gprs_eda; /*< 1: 1> GPRS Extended Dynamic Allocation Capability; MS does supports dynamice and fixed allocation (1) or only exclusive allocation (0) */ U8 _align0; /*< 2: 1> alignment */ U8 _align1; /*< 3: 1> alignment */ } T_gprs_struct; #endif #ifndef __T_ms_struct__ #define __T_ms_struct__ /* * Multislot Capability Struct * CCDGEN:WriteStruct_Count==12 */ typedef struct { U8 v_hscsd_ms_class; /*< 0: 1> valid-flag */ U8 hscsd_ms_class; /*< 1: 1> HSCSD Multi Slot Class */ U8 _align0; /*< 2: 1> alignment */ U8 v_gprs_struct; /*< 3: 1> valid-flag */ T_gprs_struct gprs_struct; /*< 4: 4> GPRS Multislot Class and Extended Dynamic Allocation Capability */ U8 _align1; /*< 8: 1> alignment */ U8 _align2; /*< 9: 1> alignment */ U8 _align3; /*< 10: 1> alignment */ U8 v_sms_sm_value; /*< 11: 1> valid-flag */ T_sms_sm_value sms_sm_value; /*< 12: 4> MS Measurement Capability */ } T_ms_struct; #endif #ifndef __T_acc_cap__ #define __T_acc_cap__ /* * Access capabilities * CCDGEN:WriteStruct_Count==13 */ typedef struct { U8 pow_class; /*< 0: 1> RF Power Capability */ U8 _align0; /*< 1: 1> alignment */ U8 _align1; /*< 2: 1> alignment */ U8 v_a5_bits; /*< 3: 1> valid-flag */ T_a5_bits a5_bits; /*< 4: 8> A5 bits */ U8 es_ind; /*< 12: 1> Early Classmark Sending; 'controlled early classmark sending' option is implemented (1) or not (0) in the MS */ U8 ps; /*< 13: 1> Pseudo Synchronisation capability; Pseudo synchronisation capabilty is present (1) or not (0) */ U8 vgcs; /*< 14: 1> Voice Group Call Service; VGCS capability and notification wanted (1) or not (0) */ U8 vbs; /*< 15: 1> Voice Broadcast Service; VBS capability and notification wanted (1) or not (0) */ U8 _align2; /*< 16: 1> alignment */ U8 _align3; /*< 17: 1> alignment */ U8 _align4; /*< 18: 1> alignment */ U8 v_ms_struct; /*< 19: 1> valid-flag */ T_ms_struct ms_struct; /*< 20: 16> Multislot Capability Struct */ } T_acc_cap; #endif #ifndef __T_ra_cap2__ #define __T_ra_cap2__ /* * MS RA capability value part * CCDGEN:WriteStruct_Count==14 */ typedef struct { U8 acc_tech_typ; /*< 0: 1> Access Technology Type */ U8 _align0; /*< 1: 1> alignment */ U8 _align1; /*< 2: 1> alignment */ U8 _align2; /*< 3: 1> alignment */ T_acc_cap acc_cap; /*< 4: 36> Access capabilities */ } T_ra_cap2; #endif #ifndef __T_ra_cap__ #define __T_ra_cap__ /* * MS RA capability value part * CCDGEN:WriteStruct_Count==15 */ typedef struct { U8 acc_tech_typ; /*< 0: 1> Access Technology Type */ U8 _align0; /*< 1: 1> alignment */ U8 _align1; /*< 2: 1> alignment */ U8 _align2; /*< 3: 1> alignment */ T_acc_cap acc_cap; /*< 4: 36> Access capabilities */ U8 flag_ra_cap2; /*< 40: 1> Valid flag for MS RA capability value part II; Second part of MS RA capability is available (1) or not (1) */ U8 _align3; /*< 41: 1> alignment */ U8 _align4; /*< 42: 1> alignment */ U8 v_ra_cap2; /*< 43: 1> valid-flag */ T_ra_cap2 ra_cap2; /*< 44: 40> MS RA capability value part */ } T_ra_cap; #endif #ifndef __T_pow_class4__ #define __T_pow_class4__ /* * RF Power Capability (4 bits); Power Class of GSM 400, GSM 850, GSM 900, DCS 1800, PCS 1900 * CCDGEN:WriteStruct_Count==16 */ typedef struct { U8 pow_class; /*< 0: 1> RF Power Capability */ U8 _align0; /*< 1: 1> alignment */ U8 _align1; /*< 2: 1> alignment */ U8 _align2; /*< 3: 1> alignment */ } T_pow_class4; #endif #ifndef __T_rf_power__ #define __T_rf_power__ /* * MS RF Power Classes * CCDGEN:WriteStruct_Count==17 */ typedef struct { T_pow_class4 pow_class4[5]; /*< 0: 20> RF Power Capability (4 bits); Power Class of GSM 400, GSM 850, GSM 900, DCS 1800, PCS 1900 */ U8 egde_pow1; /*< 20: 1> EGDE RF Power Capability 1 */ U8 egde_pow2; /*< 21: 1> EGDE RF Power Capability 2 */ U8 _align0; /*< 22: 1> alignment */ U8 _align1; /*< 23: 1> alignment */ } T_rf_power; #endif #ifndef __T_rf_ms__ #define __T_rf_ms__ /* * MS RF Multi Slot Capability * CCDGEN:WriteStruct_Count==18 */ typedef struct { U8 gsm_ms_class; /*< 0: 1> GSM Multi Slot Class */ U8 edge_ms_class; /*< 1: 1> EDGE Multi Slot Class */ U8 hscsd_ms_class; /*< 2: 1> HSCSD Multi Slot Class */ U8 gprs_ms_class; /*< 3: 1> GPRS Multi Slot Class */ U8 dtm_g; /*< 4: 1> DTM GPRS Multi Slot Capability; GPRS MS does supports dual transfer mode (DTM) */ U8 dtm_g_ms_class; /*< 5: 1> DTM GPRS Multi Slot Sub-Class */ U8 ecsd_ms_class; /*< 6: 1> ECSD Multi Slot Class */ U8 egprs_ms_class; /*< 7: 1> EGPRS Multi Slot Class */ U8 dtm_e; /*< 8: 1> DTM EGPRS Multi Slot Capability; EGPRS MS does supports dual transfer mode (DTM) */ U8 dtm_e_ms_class; /*< 9: 1> DTM EGPRS Multi Slot Sub-Class; only if the MS supports EGPRS DTM */ U8 _align0; /*< 10: 1> alignment */ U8 _align1; /*< 11: 1> alignment */ } T_rf_ms; #endif #ifndef __T_rf_cap__ #define __T_rf_cap__ /* * MS RF Capability * CCDGEN:WriteStruct_Count==19 */ typedef struct { U8 setbands; /*< 0: 1> Set Frequency Bands; bitmask of set frequency bands */ U8 bands; /*< 1: 1> Supported Frequency Bands; bitmask of all available frequency bands */ U8 _align0; /*< 2: 1> alignment */ U8 _align1; /*< 3: 1> alignment */ T_rf_power rf_power; /*< 4: 24> MS RF Power Classes */ T_rf_ms rf_ms; /*< 28: 12> MS RF Multi Slot Capability */ U8 es_ind; /*< 40: 1> Early Classmark Sending; 'controlled early classmark sending' option is implemented (1) or not (0) in the MS */ U8 ps; /*< 41: 1> Pseudo Synchronisation capability; Pseudo synchronisation capabilty is present (1) or not (0) */ U8 mt_pp_sms; /*< 42: 1> Short Message capability; MS does supports (1) MT point to point SMS or not (0) */ U8 lcsva; /*< 43: 1> LCSVA capability; LCS value added location request notification supported (1) or not (0) */ U8 solsa; /*< 44: 1> SoLSA Supported; MS does supports SoLSA (1) or not (0) */ U8 cmsp; /*< 45: 1> CMSP Supported; MS does supports (1) CM service Prompt (network initiated MO CM connection request) or not (0) */ U8 mod; /*< 46: 1> Modulation Capability; MS does supports 8-PSK modulation for uplink and downlink (1) or only for downlink (0) in addition to GSMK */ U8 mac_support; /*< 47: 1> MAC Mode support; MS does supports dynamice and fixed allocation (1) or only exclusive allocation (0) */ U8 meas; /*< 48: 1> Measurement Capability; Indicates whether the IE contains any value about the measurement capabilities or not */ U8 ext_meas; /*< 49: 1> Extended Measurement Capability; MS does supports 'extended measurements`(1) or not (0) */ U8 compact; /*< 50: 1> COMPACT Interference Measurement Capability; COMPACT Interference Measurement Capability is implemented (1) or not (0) */ U8 vbs; /*< 51: 1> Voice Broadcast Service; VBS capability and notification wanted (1) or not (0) */ U8 vgcs; /*< 52: 1> Voice Group Call Service; VGCS capability and notification wanted (1) or not (0) */ U8 ucs2_treat; /*< 53: 1> UCS2 treatment */ U8 ss_screen; /*< 54: 1> SS Screening Indicator */ U8 sms_val; /*< 55: 1> Switch-Measure-Switch-Value */ U8 sm_val; /*< 56: 1> Switch-Measure-Value */ U8 _align2; /*< 57: 1> alignment */ U8 _align3; /*< 58: 1> alignment */ U8 _align4; /*< 59: 1> alignment */ T_a5_bits a5_bits; /*< 60: 8> A5 bits */ U8 assist_eotd; /*< 68: 1> MS assisted E-OTD; MS does supports assisted E-OTD (1) or not (0) */ U8 based_eotd; /*< 69: 1> MS based E-OTD; MS does supports based E-OTD (1) or not (0) */ U8 assist_gps; /*< 70: 1> MS assisted GPS; MS does supports assisted GPS (1) or not (0) */ U8 based_gps; /*< 71: 1> MS based GPS; MS does supports based GPS (1) or not (0) */ U8 conv_gps; /*< 72: 1> MS conventional GPS; MS does supports conventional GPS (1) or not (0) */ U8 gprs_eda; /*< 73: 1> GPRS Extended Dynamic Allocation Capability; MS does supports dynamice and fixed allocation (1) or only exclusive allocation (0) */ U8 egprs_eda; /*< 74: 1> EGPRS Extended Dynamic Allocation Capability; MS does supports dynamice and fixed allocation (1) or only exclusive allocation (0) */ U8 _align5; /*< 75: 1> alignment */ } T_rf_cap; #endif /* * End of substructure section, begin of message definition section */ #ifndef __T_MS_RF_CAPABILITY__ #define __T_MS_RF_CAPABILITY__ /* * * CCDGEN:WriteStruct_Count==20 */ typedef struct { U8 msg_type; /*< 0: 1> Message Type */ U8 _align0; /*< 1: 1> alignment */ U8 _align1; /*< 2: 1> alignment */ U8 _align2; /*< 3: 1> alignment */ T_rf_cap rf_cap; /*< 4: 76> MS RF Capability */ } T_MS_RF_CAPABILITY; #endif #include "CDG_LEAVE.h" #endif