+ FGNavList::TypeFilter filter(type);
+ navlist = FGNavList::findByIdentAndFreq( pos, id, 0.0, &filter );
+
+ naRef reply = naNewVector(c);
+ for( nav_list_type::const_iterator it = navlist.begin(); it != navlist.end(); ++it ) {
+ naVec_append( reply, ghostForNavaid(c, *it) );
+ }
+ return reply;
+}
+
+static naRef f_findNavaidsWithinRange(naContext c, naRef me, int argc, naRef* args)
+{
+ int argOffset = 0;
+ SGGeod pos = globals->get_aircraft_position();
+ argOffset += geodFromArgs(args, 0, argc, pos);
+
+ if (!naIsNum(args[argOffset])) {
+ naRuntimeError(c, "findNavaidsWithinRange expected range (in nm) as arg %d", argOffset);
+ }
+
+ FGPositioned::Type type = FGPositioned::INVALID;
+ double rangeNm = args[argOffset++].num;
+ if (argOffset < argc) {
+ type = FGPositioned::typeFromName(naStr_data(args[argOffset]));
+ }
+
+ naRef r = naNewVector(c);
+ FGNavList::TypeFilter filter(type);
+ FGPositioned::List navs = FGPositioned::findWithinRange(pos, rangeNm, &filter);
+ FGPositioned::sortByRange(navs, pos);
+
+ BOOST_FOREACH(FGPositionedRef a, navs) {
+ FGNavRecord* nav = (FGNavRecord*) a.get();
+ naVec_append(r, ghostForNavaid(c, nav));
+ }
+
+ return r;
+}
+
+static naRef f_findNavaidByFrequency(naContext c, naRef me, int argc, naRef* args)
+{
+ int argOffset = 0;
+ SGGeod pos = globals->get_aircraft_position();
+ argOffset += geodFromArgs(args, 0, argc, pos);
+
+ if (!naIsNum(args[argOffset])) {
+ naRuntimeError(c, "findNavaidByFrequency expectes frequency (in Mhz) as arg %d", argOffset);
+ }
+
+ FGPositioned::Type type = FGPositioned::INVALID;
+ double freqMhz = args[argOffset++].num;
+ if (argOffset < argc) {
+ type = FGPositioned::typeFromName(naStr_data(args[argOffset]));
+ }
+
+ FGNavList::TypeFilter filter(type);
+ nav_list_type navs = FGNavList::findAllByFreq(freqMhz, pos, &filter);
+ if (navs.empty()) {
+ return naNil();
+ }
+
+ return ghostForNavaid(c, navs.front().ptr());
+}
+
+static naRef f_findNavaidsByFrequency(naContext c, naRef me, int argc, naRef* args)
+{
+ int argOffset = 0;
+ SGGeod pos = globals->get_aircraft_position();
+ argOffset += geodFromArgs(args, 0, argc, pos);
+
+ if (!naIsNum(args[argOffset])) {
+ naRuntimeError(c, "findNavaidsByFrequency expectes frequency (in Mhz) as arg %d", argOffset);
+ }
+
+ FGPositioned::Type type = FGPositioned::INVALID;
+ double freqMhz = args[argOffset++].num;
+ if (argOffset < argc) {
+ type = FGPositioned::typeFromName(naStr_data(args[argOffset]));
+ }
+
+ naRef r = naNewVector(c);
+
+ FGNavList::TypeFilter filter(type);
+ nav_list_type navs = FGNavList::findAllByFreq(freqMhz, pos, &filter);
+
+ BOOST_FOREACH(nav_rec_ptr a, navs) {
+ naVec_append(r, ghostForNavaid(c, a.ptr()));
+ }
+
+ return r;
+}
+
+static naRef f_findNavaidsByIdent(naContext c, naRef me, int argc, naRef* args)
+{
+ int argOffset = 0;
+ SGGeod pos = globals->get_aircraft_position();
+ argOffset += geodFromArgs(args, 0, argc, pos);
+
+ if (!naIsString(args[argOffset])) {
+ naRuntimeError(c, "findNavaidsByIdent expectes ident string as arg %d", argOffset);
+ }
+
+ FGPositioned::Type type = FGPositioned::INVALID;
+ string ident = naStr_data(args[argOffset++]);
+ if (argOffset < argc) {
+ type = FGPositioned::typeFromName(naStr_data(args[argOffset]));
+ }
+
+ FGNavList::TypeFilter filter(type);
+ naRef r = naNewVector(c);
+ nav_list_type navs = FGNavList::findByIdentAndFreq(pos, ident, 0.0, &filter);
+
+ BOOST_FOREACH(nav_rec_ptr a, navs) {
+ naVec_append(r, ghostForNavaid(c, a.ptr()));
+ }
+
+ return r;
+}
+
+static naRef f_findFixesByIdent(naContext c, naRef me, int argc, naRef* args)
+{
+ int argOffset = 0;
+ SGGeod pos = globals->get_aircraft_position();
+ argOffset += geodFromArgs(args, 0, argc, pos);
+
+ if (!naIsString(args[argOffset])) {
+ naRuntimeError(c, "findFixesByIdent expectes ident string as arg %d", argOffset);
+ }
+
+ string ident(naStr_data(args[argOffset]));
+ naRef r = naNewVector(c);