module functions {
//full function body with multiple parameters, including passing modes, runs on clause and return value
function f_sample2 ( 
  template R3Msg p_radiusAccntReq, 
  out template R3Msg p_radiusAccntRsp ) 
runs on R3Comp 
return FncRetCode {
  var FncRetCode v_ret := e_success;

  alt {
    [] r3Port.receive ( m_r3MonitorInd ( p_radiusAccntReq ) ) {
      v_ret := e_success;
    }
    [] r3Port.receive ( m_r3MonitorInd ( 
                          e_RadiusAccountingRequest,
                          p_radiusAccntReq ) ) {
      v_ret := e_success;
    }
    [] r3Port.receive ( m_r3MonitorInd (
                          e_RadiusAccountingRequest,
                          m_radiusAccntReq_any ) ) {
      return e_error;
    }
  } 
  return v_ret;
}   
//function skeleton with a single parameter, including a passing mode, with a runs on clause
function f_sample1 (in template R3Msg p_radiusAccntReq) 
	runs on R3Comp {
}

//function skeleton with a single parameter, with a runs on clause 
function f_sample11 (template R3Msg p_radiusAccntReq) 
	runs on R3Comp {
}

//function skeleton without parameters, with a return value
function f_sample () 
	return r {
}

//full function body with multiple parameters, including passing modes, no further clauses
function f_sample21( template R3Msg p_radiusAccntReq, out template R3Msg p_radiusAccntRsp ) {

  var integer v_var1 := 0;
  var integer v_var2 := 10;
  
  while (v_var1 < v_var2){
  	v_var1:=v_var1+1;
  }
  
}
	
}