1 /**************************************************************************
2 * ls_interface.c -- the FG interface to the LaRCsim routines
3 * This is a heavily modified version of LaRCsim.c
4 * As a result there is much old baggage left in this file.
6 * Originally Written 921230 by Bruce Jackson
7 * Modified by Curtis Olson, started May 1997.
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License, or (at your option) any later version.
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 * (Log is kept at end of this file)
25 **************************************************************************/
27 /* Original headers follow: */
29 /***************************************************************************
33 ----------------------------------------------------------------------------
35 FUNCTION: Top level routine for LaRCSIM. Includes
36 global variable declarations.
38 ----------------------------------------------------------------------------
40 MODULE STATUS: Developmental
42 ----------------------------------------------------------------------------
44 GENEALOGY: Written 921230 by Bruce Jackson
46 ----------------------------------------------------------------------------
54 ----------------------------------------------------------------------------
60 930111 Added "progname" variable to keep name of invoking command.
62 931012 Removed altitude < 0. test to support gear development. EBJ
63 931214 Added various pressures (Impact, Dynamic, Static, etc.) EBJ
64 931215 Adopted new generic variable structure. EBJ
65 931218 Added command line options decoding. EBJ
66 940110 Changed file type of matrix file to ".m" EBJ
67 940513 Renamed this routine "LaRCsim.c" from "ls_main.c" EBJ
68 940513 Added time_stamp routine, t_stamp. EBJ
69 950225 Added options flag, 'i', to set I/O output rate. EBJ
70 950306 Added calls to ls_get_settings() and ls_put_settings() EBJ
71 950314 Options flag 'i' now reads IC file; 'o' is output rate EBJ
72 950406 Many changes: added definition of default value macros;
73 removed local variables term_update_hz, model_dt, endtime,
74 substituted sim_control_ globals for these; removed
75 initialization of sim_control_.tape_channels; moved optarg
76 to generic extern; added mod_end_time & mod_buf_size flags
77 and temporary buffer_time and data_rate locals to
78 ls_checkopts(); added additional command line switches '-s'
79 and '-b'; made psuedo-mandatory file names for data output
80 switches; considerable rewrite of logic for setting data
81 buffer length and interleave parameters; updated '-h' help
82 output message; added protection logic to calculations of
83 these parameters; added check of return value on first call
84 to ls_cockpit() so <esc> abort works from initial pause
85 state; added call to ls_unsync() immediately following
86 first ls_sync() call, if paused (to avoid alarm clock
87 timeout); moved call to ls_record() into non-paused
88 multiloop path (was filling buffer with identical data
89 during pause); put check of paused flag before calling sync
90 routine ls_pause(); and added call to exit() on termination.
94 $Original log: LaRCsim.c,v $
95 * Revision 1.4.1.7 1995/04/07 01:04:37 bjax
96 * Many changes made to support storage of sim options from run to run,
97 * as well as restructuring storage buffer sizing and some loop logic
98 * changes. See the modification log for details.
100 * Revision 1.4.1.6 1995/03/29 16:12:09 bjax
101 * Added argument to -o switch; changed run loop to pass dt=0
102 * if in paused mode. EBj
104 * Revision 1.4.1.5 1995/03/15 12:30:20 bjax
105 * Set paused flag to non-zero by default; moved 'i' I/O rate flag
106 * switch to 'o'; made 'i' an initial conditions file switch; added
107 * null string to ls_get_settings() call so that default settings
108 * file will be read. EBJ
110 * Revision 1.4.1.4 1995/03/08 12:31:34 bjax
111 * Added userid retrieval and proper termination of time & date strings.
113 * Revision 1.4.1.3 1995/03/08 12:00:21 bjax
114 * Moved setting of default options to ls_setdefopts from
115 * ls_checkopts; rearranged order of ls_get_settings() call
116 * to between ls_setdefopts and ls_checkopts, so command
117 * line options will override settings file options.
120 * Revision 1.4.1.2 1995/03/06 18:48:49 bjax
121 * Added calles to ls_get_settings() and ls_put_settings(); added
122 * passing of dt and init flags in ls_model(). EBJ
124 * Revision 1.4.1.1 1995/03/03 02:23:08 bjax
125 * Beta version for LaRCsim, version 1.4
127 * Revision 1.3.2.7 1995/02/27 20:00:21 bjax
130 * Revision 1.3.2.6 1995/02/25 16:52:31 bjax
131 * Added 'i' option to set I/O iteration rate. EBJ
133 * Revision 1.3.2.5 1995/02/06 19:33:15 bjax
136 * Revision 1.3.2.4 1995/02/06 19:30:30 bjax
137 * Oops, should really compile these before checking in. Fixed capitailzation of
138 * Initialize in ls_loop parameter.
140 * Revision 1.3.2.3 1995/02/06 19:25:44 bjax
141 * Moved main simulation loop into subroutine ls_loop. EBJ
143 * Revision 1.3.2.2 1994/05/20 21:46:45 bjax
144 * A little better logic on checking for option arguments.
146 * Revision 1.3.2.1 1994/05/20 19:29:51 bjax
147 * Added options arguments to command line.
149 * Revision 1.3.1.16 1994/05/17 15:08:45 bjax
150 * Corrected so that full name to directyr and file is saved
151 * in new global variable "fullname"; this allows symbol table
152 * to be extracted when in another default directory.
154 * Revision 1.3.1.15 1994/05/17 14:50:24 bjax
157 * Revision 1.3.1.14 1994/05/17 14:50:23 bjax
160 * Revision 1.3.1.13 1994/05/17 14:50:21 bjax
163 * Revision 1.3.1.12 1994/05/17 14:50:20 bjax
166 * Revision 1.3.1.11 1994/05/17 13:56:24 bjax
169 * Revision 1.3.1.10 1994/05/17 13:23:03 bjax
172 * Revision 1.3.1.9 1994/05/17 13:20:03 bjax
175 * Revision 1.3.1.8 1994/05/17 13:19:23 bjax
178 * Revision 1.3.1.7 1994/05/17 13:18:29 bjax
181 * Revision 1.3.1.6 1994/05/17 13:16:30 bjax
184 * Revision 1.3.1.5 1994/05/17 13:03:44 bjax
187 * Revision 1.3.1.4 1994/05/17 13:03:38 bjax
190 * Revision 1.3.1.3 1994/05/17 12:49:08 bjax
193 * Revision 1.3.1.2 1994/05/17 12:48:45 bjax
194 * *** empty log message ***
196 * Revision 1.3.1.1 1994/05/13 20:39:17 bjax
199 * Revision 1.2 1994/05/13 19:51:50 bjax
203 ----------------------------------------------------------------------------
207 ----------------------------------------------------------------------------
211 ----------------------------------------------------------------------------
215 ----------------------------------------------------------------------------
219 ----------------------------------------------------------------------------
223 --------------------------------------------------------------------------*/
225 #include <sys/types.h>
226 /* #include <sys/stat.h> */
232 #include "ls_types.h"
233 #include "ls_constants.h"
234 #include "ls_generic.h"
235 #include "ls_sim_control.h"
236 #include "ls_cockpit.h"
237 #include "ls_interface.h"
239 #include "ls_accel.h"
241 #include "ls_model.h"
243 #include <Flight/flight.h>
244 #include <Aircraft/aircraft.h>
246 /* global variable declarations */
250 SIM_CONTROL sim_control_;
255 /* #define DEFAULT_TERM_UPDATE_HZ 20 */ /* original value */
256 #define DEFAULT_TERM_UPDATE_HZ 20
257 #define DEFAULT_MODEL_HZ 120
258 #define DEFAULT_END_TIME 3600.
259 #define DEFAULT_SAVE_SPACING 8
260 #define DEFAULT_WRITE_SPACING 1
261 #define MAX_FILE_NAME_LENGTH 80
263 /* global variables */
268 /* file variables - default simulation settings */
270 static double model_dt;
271 static double speedup;
272 static char asc1name[MAX_FILE_NAME_LENGTH] = "run.asc1";
273 static char tabname[MAX_FILE_NAME_LENGTH] = "run.dat";
274 static char fltname[MAX_FILE_NAME_LENGTH] = "run.flt";
275 static char matname[MAX_FILE_NAME_LENGTH] = "run.m";
279 void ls_stamp( void ) {
280 char rcsid[] = "$Id$";
281 char revid[] = "$Revision$";
282 char dateid[] = "$Date$";
287 /* report version of LaRCsim*/
288 printf("\nLaRCsim %s, %s\n\n", revid, dateid);
290 nowtime_t = time( 0 );
291 nowtime = localtime( &nowtime_t ); /* set fields to correct time values */
292 date = (nowtime->tm_year)*10000
293 + (nowtime->tm_mon + 1)*100
294 + (nowtime->tm_mday);
295 sprintf(sim_control_.date_string, "%06d\0", date);
296 sprintf(sim_control_.time_stamp, "%02d:%02d:%02d\0",
297 nowtime->tm_hour, nowtime->tm_min, nowtime->tm_sec);
298 #ifdef COMPILE_THIS_CODE_THIS_USELESS_CODE
299 cuserid( sim_control_.userid ); /* set up user id */
300 #endif /* COMPILE_THIS_CODE_THIS_USELESS_CODE */
304 void ls_setdefopts( void ) {
305 /* set default values for most options */
307 sim_control_.debug = 0; /* change to non-zero if in dbx! */
308 sim_control_.vision = 0;
309 sim_control_.write_av = 0; /* write Agile-Vu '.flt' file */
310 sim_control_.write_mat = 0; /* write matrix-x/matlab script */
311 sim_control_.write_tab = 0; /* write tab delim. history file */
312 sim_control_.write_asc1 = 0; /* write GetData file */
313 sim_control_.save_spacing = DEFAULT_SAVE_SPACING;
314 /* interpolation on recording */
315 sim_control_.write_spacing = DEFAULT_WRITE_SPACING;
316 /* interpolation on output */
317 sim_control_.end_time = DEFAULT_END_TIME;
318 sim_control_.model_hz = DEFAULT_MODEL_HZ;
319 sim_control_.term_update_hz = DEFAULT_TERM_UPDATE_HZ;
320 sim_control_.time_slices = (long int)(DEFAULT_END_TIME * DEFAULT_MODEL_HZ /
321 DEFAULT_SAVE_SPACING);
322 sim_control_.paused = 0;
328 /* return result codes from ls_checkopts */
333 #ifdef COMPILE_THIS_CODE_THIS_USELESS_CODE
338 int ls_checkopts(argc, argv) /* check and set options flags */
344 int mod_end_time = 0;
345 int mod_buf_size = 0;
346 float buffer_time, data_rate;
348 /* set default values */
350 buffer_time = sim_control_.time_slices * sim_control_.save_spacing /
351 sim_control_.model_hz;
352 data_rate = sim_control_.model_hz / sim_control_.save_spacing;
354 while ((c = getopt(argc, argv, "Aa:b:de:f:hi:kmo:r:s:t:x:")) != EOF)
357 if (sim_control_.sim_type == GLmouse)
359 fprintf(stderr, "Cannot specify both keyboard (k) and ACES (A) cockpits option\n");
360 fprintf(stderr, "Keyboard operation assumed.\n");
363 sim_control_.sim_type = cockpit;
366 sim_control_.write_av = 1;
369 strncpy(fltname, optarg, MAX_FILE_NAME_LENGTH);
374 buffer_time = atof(optarg);
375 if (buffer_time <= 0.) opt_err = -1;
379 sim_control_.debug = 1;
382 sim_control_.end_time = atof(optarg);
386 sim_control_.model_hz = atof(optarg);
392 /* ls_get_settings( optarg ); */
395 sim_control_.sim_type = GLmouse;
398 sim_control_.vision = 1;
401 sim_control_.term_update_hz = atof(optarg);
402 if (sim_control_.term_update_hz <= 0.) opt_err = 1;
405 sim_control_.write_mat = 1;
408 strncpy(matname, optarg, MAX_FILE_NAME_LENGTH);
413 data_rate = atof(optarg);
414 if (data_rate <= 0.) opt_err = -1;
417 sim_control_.write_tab = 1;
420 strncpy(tabname, optarg, MAX_FILE_NAME_LENGTH);
425 sim_control_.write_asc1 = 1;
428 strncpy(asc1name, optarg, MAX_FILE_NAME_LENGTH);
439 fprintf(stderr, "Usage: %s [-options]\n", progname);
440 fprintf(stderr, "\n");
441 fprintf(stderr, " where [-options] is zero or more of the following:\n");
442 fprintf(stderr, "\n");
443 fprintf(stderr, " [A|k] Run mode: [A]CES cockpit [default]\n");
444 fprintf(stderr, " or [k]eyboard\n");
445 fprintf(stderr, "\n");
446 fprintf(stderr, " [i <filename>] [i]nitial conditions filename\n");
447 fprintf(stderr, "\n");
448 fprintf(stderr, " [f <value>] Iteration rate [f]requency, Hz (default is %5.2f Hz)\n",
449 sim_control_.model_hz);
450 fprintf(stderr, "\n");
451 fprintf(stderr, " [o <value>] Display [o]utput frequency, Hz (default is %5.2f Hz)\n",
452 sim_control_.term_update_hz);
453 fprintf(stderr, "\n");
454 fprintf(stderr, " [s <value>] Data storage frequency, Hz (default is %5.2f Hz)\n",
456 fprintf(stderr, "\n");
457 fprintf(stderr, " [e <value>] [e]nd time in seconds (default %5.1f seconds)\n",
458 sim_control_.end_time);
459 fprintf(stderr, "\n");
460 fprintf(stderr, " [b <value>] circular time history storage [b]uffer size, in seconds \n");
461 fprintf(stderr, " (default %5.1f seconds) (normally same as end time)\n",
462 sim_control_.time_slices*sim_control_.save_spacing/
463 sim_control_.model_hz);
464 fprintf(stderr, "\n");
465 fprintf(stderr, " [atxr [<filename>]] Output: [a]gile-vu (default name: %s )\n", fltname);
466 fprintf(stderr, " and/or [t]ab delimited ( '' name: %s )\n", tabname);
467 fprintf(stderr, " and/or [x]plot (default name: %s)\n", asc1name);
468 fprintf(stderr, " and/or mat[r]ix script ( '' name: %s )\n", matname);
469 fprintf(stderr, "\n");
473 /* calculate additional controls */
475 sim_control_.save_spacing = (int) (0.5 + sim_control_.model_hz / data_rate);
476 if (sim_control_.save_spacing < 1) sim_control_.save_spacing = 1;
478 sim_control_.time_slices = buffer_time * sim_control_.model_hz /
479 sim_control_.save_spacing;
480 if (sim_control_.time_slices < 2) sim_control_.time_slices = 2;
484 #endif /* COMPILE_THIS_CODE_THIS_USELESS_CODE */
487 void ls_loop( SCALAR dt, int initialize ) {
488 /* printf (" In ls_loop()\n"); */
489 ls_step( dt, initialize );
490 /* if (sim_control_.sim_type == cockpit ) ls_ACES(); */
492 ls_model( dt, initialize );
498 int ls_cockpit( void ) {
501 sim_control_.paused = 0;
503 c = current_aircraft.controls;
505 Lat_control = FG_Aileron;
506 Long_control = FG_Elevator;
507 Long_trim = FG_Elev_Trim;
508 Rudder_pedal = FG_Rudder;
509 Throttle_pct = FG_Throttle[0];
511 /* printf("Mach = %.2f ", Mach_number);
512 printf("%.4f,%.4f,%.2f ", Latitude, Longitude, Altitude);
513 printf("%.2f,%.2f,%.2f\n", Phi, Theta, Psi); */
519 /* Initialize the LaRCsim flight model, dt is the time increment for
520 each subsequent iteration through the EOM */
521 int fgLaRCsimInit(double dt) {
524 ls_setdefopts(); /* set default options */
526 ls_stamp(); /* ID stamp; record time and date of run */
528 if (speedup == 0.0) {
529 fprintf(stderr, "%s: Cannot run with speedup of 0.\n", progname);
533 printf("LS pre Init pos = %.2f\n", Latitude);
537 printf("LS post Init pos = %.2f\n", Latitude);
540 /* Initialize (get) cockpit (controls) settings */
548 /* Run an iteration of the EOM (equations of motion) */
549 int fgLaRCsimUpdate(int multiloop) {
556 for ( i = 0; i < multiloop; i++ ) {
557 ls_loop( model_dt, 0);
564 /* Convert from the fgFLIGHT struct to the LaRCsim generic_ struct */
565 int fgFlight_2_LaRCsim (fgFLIGHT *f) {
571 Dx_pilot = FG_Dx_pilot;
572 Dy_pilot = FG_Dy_pilot;
573 Dz_pilot = FG_Dz_pilot;
580 F_north = FG_F_north;
583 F_X_aero = FG_F_X_aero;
584 F_Y_aero = FG_F_Y_aero;
585 F_Z_aero = FG_F_Z_aero;
586 F_X_engine = FG_F_X_engine;
587 F_Y_engine = FG_F_Y_engine;
588 F_Z_engine = FG_F_Z_engine;
589 F_X_gear = FG_F_X_gear;
590 F_Y_gear = FG_F_Y_gear;
591 F_Z_gear = FG_F_Z_gear;
598 M_l_aero = FG_M_l_aero;
599 M_m_aero = FG_M_m_aero;
600 M_n_aero = FG_M_n_aero;
601 M_l_engine = FG_M_l_engine;
602 M_m_engine = FG_M_m_engine;
603 M_n_engine = FG_M_n_engine;
604 M_l_gear = FG_M_l_gear;
605 M_m_gear = FG_M_m_gear;
606 M_n_gear = FG_M_n_gear;
607 V_dot_north = FG_V_dot_north;
608 V_dot_east = FG_V_dot_east;
609 V_dot_down = FG_V_dot_down;
610 U_dot_body = FG_U_dot_body;
611 V_dot_body = FG_V_dot_body;
612 W_dot_body = FG_W_dot_body;
616 A_X_pilot = FG_A_X_pilot;
617 A_Y_pilot = FG_A_Y_pilot;
618 A_Z_pilot = FG_A_Z_pilot;
622 N_X_pilot = FG_N_X_pilot;
623 N_Y_pilot = FG_N_Y_pilot;
624 N_Z_pilot = FG_N_Z_pilot;
625 P_dot_body = FG_P_dot_body;
626 Q_dot_body = FG_Q_dot_body;
627 R_dot_body = FG_R_dot_body;
628 V_north = FG_V_north;
631 V_north_rel_ground = FG_V_north_rel_ground;
632 V_east_rel_ground = FG_V_east_rel_ground;
633 V_down_rel_ground = FG_V_down_rel_ground;
634 V_north_airmass = FG_V_north_airmass;
635 V_east_airmass = FG_V_east_airmass;
636 V_down_airmass = FG_V_down_airmass;
637 V_north_rel_airmass = FG_V_north_rel_airmass;
638 V_east_rel_airmass = FG_V_east_rel_airmass;
639 V_down_rel_airmass = FG_V_down_rel_airmass;
646 V_rel_wind = FG_V_rel_wind;
647 V_true_kts = FG_V_true_kts;
648 V_rel_ground = FG_V_rel_ground;
649 V_inertial = FG_V_inertial;
650 V_ground_speed = FG_V_ground_speed;
651 V_equiv = FG_V_equiv;
652 V_equiv_kts = FG_V_equiv_kts;
653 V_calibrated = FG_V_calibrated;
654 V_calibrated_kts = FG_V_calibrated_kts;
658 P_local = FG_P_local;
659 Q_local = FG_Q_local;
660 R_local = FG_R_local;
661 P_total = FG_P_total;
662 Q_total = FG_Q_total;
663 R_total = FG_R_total;
664 Phi_dot = FG_Phi_dot;
665 Theta_dot = FG_Theta_dot;
666 Psi_dot = FG_Psi_dot;
667 Latitude_dot = FG_Latitude_dot;
668 Longitude_dot = FG_Longitude_dot;
669 Radius_dot = FG_Radius_dot;
670 Lat_geocentric = FG_Lat_geocentric;
671 Lon_geocentric = FG_Lon_geocentric;
672 Radius_to_vehicle = FG_Radius_to_vehicle;
673 Latitude = FG_Latitude;
674 Longitude = FG_Longitude;
675 Altitude = FG_Altitude;
679 T_local_to_body_11 = FG_T_local_to_body_11;
680 T_local_to_body_12 = FG_T_local_to_body_12;
681 T_local_to_body_13 = FG_T_local_to_body_13;
682 T_local_to_body_21 = FG_T_local_to_body_21;
683 T_local_to_body_22 = FG_T_local_to_body_22;
684 T_local_to_body_23 = FG_T_local_to_body_23;
685 T_local_to_body_31 = FG_T_local_to_body_31;
686 T_local_to_body_32 = FG_T_local_to_body_32;
687 T_local_to_body_33 = FG_T_local_to_body_33;
688 Gravity = FG_Gravity;
689 Centrifugal_relief = FG_Centrifugal_relief;
692 Alpha_dot = FG_Alpha_dot;
693 Beta_dot = FG_Beta_dot;
694 Cos_alpha = FG_Cos_alpha;
695 Sin_alpha = FG_Sin_alpha;
696 Cos_beta = FG_Cos_beta;
697 Sin_beta = FG_Sin_beta;
698 Cos_phi = FG_Cos_phi;
699 Sin_phi = FG_Sin_phi;
700 Cos_theta = FG_Cos_theta;
701 Sin_theta = FG_Sin_theta;
702 Cos_psi = FG_Cos_psi;
703 Sin_psi = FG_Sin_psi;
704 Gamma_vert_rad = FG_Gamma_vert_rad;
705 Gamma_horiz_rad = FG_Gamma_horiz_rad;
707 Density = FG_Density;
708 V_sound = FG_V_sound;
709 Mach_number = FG_Mach_number;
710 Static_pressure = FG_Static_pressure;
711 Total_pressure = FG_Total_pressure;
712 Impact_pressure = FG_Impact_pressure;
713 Dynamic_pressure = FG_Dynamic_pressure;
714 Static_temperature = FG_Static_temperature;
715 Total_temperature = FG_Total_temperature;
716 Sea_level_radius = FG_Sea_level_radius;
717 Earth_position_angle = FG_Earth_position_angle;
718 Runway_altitude = FG_Runway_altitude;
719 Runway_latitude = FG_Runway_latitude;
720 Runway_longitude = FG_Runway_longitude;
721 Runway_heading = FG_Runway_heading;
722 Radius_to_rwy = FG_Radius_to_rwy;
723 D_cg_north_of_rwy = FG_D_cg_north_of_rwy;
724 D_cg_east_of_rwy = FG_D_cg_east_of_rwy;
725 D_cg_above_rwy = FG_D_cg_above_rwy;
726 X_cg_rwy = FG_X_cg_rwy;
727 Y_cg_rwy = FG_Y_cg_rwy;
728 H_cg_rwy = FG_H_cg_rwy;
729 D_pilot_north_of_rwy = FG_D_pilot_north_of_rwy;
730 D_pilot_east_of_rwy = FG_D_pilot_east_of_rwy;
731 D_pilot_above_rwy = FG_D_pilot_above_rwy;
732 X_pilot_rwy = FG_X_pilot_rwy;
733 Y_pilot_rwy = FG_Y_pilot_rwy;
734 H_pilot_rwy = FG_H_pilot_rwy;
740 /* Convert from the LaRCsim generic_ struct to the fgFLIGHT struct */
741 int fgLaRCsim_2_Flight (fgFLIGHT *f) {
747 FG_Dx_pilot = Dx_pilot;
748 FG_Dy_pilot = Dy_pilot;
749 FG_Dz_pilot = Dz_pilot;
756 FG_F_north = F_north;
759 FG_F_X_aero = F_X_aero;
760 FG_F_Y_aero = F_Y_aero;
761 FG_F_Z_aero = F_Z_aero;
762 FG_F_X_engine = F_X_engine;
763 FG_F_Y_engine = F_Y_engine;
764 FG_F_Z_engine = F_Z_engine;
765 FG_F_X_gear = F_X_gear;
766 FG_F_Y_gear = F_Y_gear;
767 FG_F_Z_gear = F_Z_gear;
774 FG_M_l_aero = M_l_aero;
775 FG_M_m_aero = M_m_aero;
776 FG_M_n_aero = M_n_aero;
777 FG_M_l_engine = M_l_engine;
778 FG_M_m_engine = M_m_engine;
779 FG_M_n_engine = M_n_engine;
780 FG_M_l_gear = M_l_gear;
781 FG_M_m_gear = M_m_gear;
782 FG_M_n_gear = M_n_gear;
783 FG_V_dot_north = V_dot_north;
784 FG_V_dot_east = V_dot_east;
785 FG_V_dot_down = V_dot_down;
786 FG_U_dot_body = U_dot_body;
787 FG_V_dot_body = V_dot_body;
788 FG_W_dot_body = W_dot_body;
792 FG_A_X_pilot = A_X_pilot;
793 FG_A_Y_pilot = A_Y_pilot;
794 FG_A_Z_pilot = A_Z_pilot;
798 FG_N_X_pilot = N_X_pilot;
799 FG_N_Y_pilot = N_Y_pilot;
800 FG_N_Z_pilot = N_Z_pilot;
801 FG_P_dot_body = P_dot_body;
802 FG_Q_dot_body = Q_dot_body;
803 FG_R_dot_body = R_dot_body;
804 FG_V_north = V_north;
807 FG_V_north_rel_ground = V_north_rel_ground;
808 FG_V_east_rel_ground = V_east_rel_ground;
809 FG_V_down_rel_ground = V_down_rel_ground;
810 FG_V_north_airmass = V_north_airmass;
811 FG_V_east_airmass = V_east_airmass;
812 FG_V_down_airmass = V_down_airmass;
813 FG_V_north_rel_airmass = V_north_rel_airmass;
814 FG_V_east_rel_airmass = V_east_rel_airmass;
815 FG_V_down_rel_airmass = V_down_rel_airmass;
822 FG_V_rel_wind = V_rel_wind;
823 FG_V_true_kts = V_true_kts;
824 FG_V_rel_ground = V_rel_ground;
825 FG_V_inertial = V_inertial;
826 FG_V_ground_speed = V_ground_speed;
827 FG_V_equiv = V_equiv;
828 FG_V_equiv_kts = V_equiv_kts;
829 FG_V_calibrated = V_calibrated;
830 FG_V_calibrated_kts = V_calibrated_kts;
834 FG_P_local = P_local;
835 FG_Q_local = Q_local;
836 FG_R_local = R_local;
837 FG_P_total = P_total;
838 FG_Q_total = Q_total;
839 FG_R_total = R_total;
840 FG_Phi_dot = Phi_dot;
841 FG_Theta_dot = Theta_dot;
842 FG_Psi_dot = Psi_dot;
843 FG_Latitude_dot = Latitude_dot;
844 FG_Longitude_dot = Longitude_dot;
845 FG_Radius_dot = Radius_dot;
846 FG_Lat_geocentric = Lat_geocentric;
847 FG_Lon_geocentric = Lon_geocentric;
848 FG_Radius_to_vehicle = Radius_to_vehicle;
849 FG_Latitude = Latitude;
850 FG_Longitude = Longitude;
851 FG_Altitude = Altitude;
855 FG_T_local_to_body_11 = T_local_to_body_11;
856 FG_T_local_to_body_12 = T_local_to_body_12;
857 FG_T_local_to_body_13 = T_local_to_body_13;
858 FG_T_local_to_body_21 = T_local_to_body_21;
859 FG_T_local_to_body_22 = T_local_to_body_22;
860 FG_T_local_to_body_23 = T_local_to_body_23;
861 FG_T_local_to_body_31 = T_local_to_body_31;
862 FG_T_local_to_body_32 = T_local_to_body_32;
863 FG_T_local_to_body_33 = T_local_to_body_33;
864 FG_Gravity = Gravity;
865 FG_Centrifugal_relief = Centrifugal_relief;
868 FG_Alpha_dot = Alpha_dot;
869 FG_Beta_dot = Beta_dot;
870 FG_Cos_alpha = Cos_alpha;
871 FG_Sin_alpha = Sin_alpha;
872 FG_Cos_beta = Cos_beta;
873 FG_Sin_beta = Sin_beta;
874 FG_Cos_phi = Cos_phi;
875 FG_Sin_phi = Sin_phi;
876 FG_Cos_theta = Cos_theta;
877 FG_Sin_theta = Sin_theta;
878 FG_Cos_psi = Cos_psi;
879 FG_Sin_psi = Sin_psi;
880 FG_Gamma_vert_rad = Gamma_vert_rad;
881 FG_Gamma_horiz_rad = Gamma_horiz_rad;
883 FG_Density = Density;
884 FG_V_sound = V_sound;
885 FG_Mach_number = Mach_number;
886 FG_Static_pressure = Static_pressure;
887 FG_Total_pressure = Total_pressure;
888 FG_Impact_pressure = Impact_pressure;
889 FG_Dynamic_pressure = Dynamic_pressure;
890 FG_Static_temperature = Static_temperature;
891 FG_Total_temperature = Total_temperature;
892 FG_Sea_level_radius = Sea_level_radius;
893 FG_Earth_position_angle = Earth_position_angle;
894 FG_Runway_altitude = Runway_altitude;
895 FG_Runway_latitude = Runway_latitude;
896 FG_Runway_longitude = Runway_longitude;
897 FG_Runway_heading = Runway_heading;
898 FG_Radius_to_rwy = Radius_to_rwy;
899 FG_D_cg_north_of_rwy = D_cg_north_of_rwy;
900 FG_D_cg_east_of_rwy = D_cg_east_of_rwy;
901 FG_D_cg_above_rwy = D_cg_above_rwy;
902 FG_X_cg_rwy = X_cg_rwy;
903 FG_Y_cg_rwy = Y_cg_rwy;
904 FG_H_cg_rwy = H_cg_rwy;
905 FG_D_pilot_north_of_rwy = D_pilot_north_of_rwy;
906 FG_D_pilot_east_of_rwy = D_pilot_east_of_rwy;
907 FG_D_pilot_above_rwy = D_pilot_above_rwy;
908 FG_X_pilot_rwy = X_pilot_rwy;
909 FG_Y_pilot_rwy = Y_pilot_rwy;
910 FG_H_pilot_rwy = H_pilot_rwy;
915 /* Flight Gear Modification Log
918 * Revision 1.16 1998/02/07 15:29:38 curt
919 * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
920 * <chotchkiss@namg.us.anritsu.com>
922 * Revision 1.15 1998/01/22 22:03:47 curt
923 * Removed #include <sys/stat.h>
925 * Revision 1.14 1998/01/19 19:27:04 curt
926 * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
927 * This should simplify things tremendously.
929 * Revision 1.13 1998/01/19 18:40:26 curt
930 * Tons of little changes to clean up the code and to remove fatal errors
931 * when building with the c++ compiler.
933 * Revision 1.12 1998/01/06 01:20:16 curt
934 * Tweaks to help building with MSVC++
936 * Revision 1.11 1998/01/05 22:19:26 curt
937 * #ifdef'd out some unused code that was problematic for MSVC++ to compile.
939 * Revision 1.10 1997/12/10 22:37:43 curt
940 * Prepended "fg" on the name of all global structures that didn't have it yet.
941 * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
943 * Revision 1.9 1997/08/27 03:30:08 curt
944 * Changed naming scheme of basic shared structures.
946 * Revision 1.8 1997/06/21 17:12:50 curt
947 * Capitalized subdirectory names.
949 * Revision 1.7 1997/05/31 19:16:28 curt
950 * Elevator trim added.
952 * Revision 1.6 1997/05/31 04:13:53 curt
955 * Continuing work on the LaRCsim flight model integration.
956 * Added some MSFS-like keyboard input handling.
958 * Revision 1.5 1997/05/30 23:26:25 curt
959 * Added elevator/aileron controls.
961 * Revision 1.4 1997/05/30 19:30:15 curt
962 * The LaRCsim flight model is starting to look like it is working.
964 * Revision 1.3 1997/05/30 03:54:12 curt
965 * Made a bit more progress towards integrating the LaRCsim flight model.
967 * Revision 1.2 1997/05/29 22:39:59 curt
968 * Working on incorporating the LaRCsim flight model.
970 * Revision 1.1 1997/05/29 00:09:57 curt
971 * Initial Flight Gear revision.