module NC_templates_constants_signatures_enumeratedValues {
    //template definitions, with and without matching symbols, good and bad
    template TypeA m_templateB := {
        field1 := ?, 
        field2 := "a", 
        field3 := true
    }

    template TypeA mw_templateC := {
        field1 := 1, 
        field2 := pattern "a", 
        field3 := true
    }

    template TypeA m_templateA := {
        field1 := 1, 
        field2 := "a", 
        field3 := true
    }

	//derived templates
    template (value) TypeA md_templateAd modifies m_templateA := {
        field1 := 2
    }

    template TypeA mdw_templateCd modifies m_templateC := {
        field2 := pattern "a", 
        field3 := true
    }


    template TypeB m_templateBA := {
        field1 := 1, 
        field2 := "a", 
        field3 := true,
        //field4 := m_templateA  
        field4 := {
            field1 := 1, 
            field2 := "a", 
            field3 := true
        }
    }

    template integer m_i1 := (1, 2);

    template integer m_i2 := ?;

	template GrantMngtSubHeader m_grantMngtUgsSi0 := {
		schSvcUgs := {
			si := '0'B ,
			pm := ? ,
			reserved14 := c_14ZeroBits
		}
	}


	//enumerated values, good and bad,
	//also data types, good and bad
	type enumerated Enum {
		e_a, e_b, e_c
	}

	type enumerated enum {
		a, b, c
	}

	//signatures, goot and bad
	//also formal parameters, good and bad
    signature s_lookup1(in charstring p_key) return charstring exception (e_NotFound);

    signature sx_lookup1(in charstring key) return charstring exception (e_NotFound);

	//constants and external constants, good and bad
    const integer c_a1 := 2;

    const integer c_1 := 2 , c_2 :=3;

	external const integer cx_a0;
    external const integer ecx_a0, cx_1;
	
	function f_00(){
		const type_00 const_00 := 1;
	}
	
	altstep a_00(){
		const type_00 const_00 := 1;
	}
	
	testcase ts_00() runs on component_00 {
		const type_00 cl_onst_00 := 1;
	}

    const integer cl_a1 := 2;
	
	control{
		const type_00 cl_onst_00 := 1;
	}
	

}