Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

FlyLegacy.h

Go to the documentation of this file.
00001 /*
00002  * FlyLegacy.h
00003  *
00004  * Part of Fly! Legacy project
00005  *
00006  * Copyright 2003 Chris Wallace
00007  *
00008  * Fly! Legacy is free software; you can redistribute it and/or modify
00009  *   it under the terms of the GNU General Public License as published by
00010  *   the Free Software Foundation; either version 2 of the License, or
00011  *   (at your option) any later version.
00012  *
00013  * Fly! Legacy is distributed in the hope that it will be useful,
00014  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  *   GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  *   along with Fly! Legacy; if not, write to the Free Software
00020  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021  *
00022  */
00023 
00028 /*
00029  * Doxygen documentation style
00030  *
00031  * Code documentation is generated automatically by Doxygen.  Special comments
00032  *   should be provided for all classes and methods, standalone functions and
00033  *   all files.
00034  * 
00035  * Note on standardized documentation styles for this project:
00036  *
00037  * - All comment blocks should use Qt style notation (
00046 #ifndef FLYLEGACY_H
00047 #define FLYLEGACY_H
00048 
00049 // Disable MS Visual C++ warnings
00050 #ifdef _MSC_VER
00051 #pragma warning (disable:4100)    // Formal parameter unused
00052 #pragma warning (disable:4505)    // Unreferenced local function
00053 #pragma warning (disable:4710)    // Function not inlined
00054 #ifdef _DEBUG
00055 #pragma warning (disable:4786)    // Browse file name truncation warnings
00056 #endif
00057 #endif
00058 
00059 #ifdef _WIN32
00060 #define WIN32_LEAN_AND_MEAN
00061 #include <windows.h>
00062 #endif
00063 
00064 //
00065 // Function portability
00066 //
00067 #ifndef HAVE_STRICMP
00068 #ifdef HAVE_STRCASECMP
00069 #define stricmp strcasecmp
00070 #else
00071 #error No case-independent string comparison (stricmp, strcasecmp) available.
00072 #endif
00073 #endif
00074 
00075 #ifdef NEED_GLUT_DISABLE_ATEXIT_HACK
00076 #define GLUT_DISABLE_ATEXIT_HACK
00077 #endif // NEED_GLUT_DISABLE_ATEXIT_HACK
00078 
00079 #include <GL/gl.h>
00080 #include <GL/glut.h>
00081 #include <GL/glu.h>
00082 #include <plib/ssg.h>
00083 #include "Version.h"
00084 #include "Pod.h"
00085 #include "../Ssg/ssgLocal.h"
00086 
00087 extern "C" {
00088 #include <jpeglib.h>
00089 }
00090 #include <setjmp.h>
00091 
00092 #if defined(_DEBUG) && defined(HAVE_CRTDBG_H)
00093 #include <crtdbg.h>
00094 #endif
00095 
00096 //
00097 // Absolute maximum path + filename + extension for a file name
00098 //
00099 #ifndef PATH_MAX
00100 #ifdef _PATH_MAX
00101 #define PATH_MAX _PATH_MAX
00102 #else
00103 #define PATH_MAX 512
00104 #endif
00105 #endif // PATH_MAX
00106 
00107 
00108 
00110 //
00111 //  Constants/enums
00112 //
00114 
00115 //
00116 // Overall application state
00117 //
00118 typedef enum {
00119   APP_SPLASH_SCREEN,
00120   APP_INIT,
00121   APP_GENERATE_SITUATION,
00122   APP_LOADING_SCREEN,
00123   APP_LOAD_SITUATION,
00124   APP_PREPARE,
00125   APP_SIMULATION,
00126   APP_EXIT_SCREEN,
00127   APP_EXIT
00128 } EAppState;
00129 
00130 
00131 enum EMessageDataType
00132 {
00133   TYPE_NONE = '    ',
00134   TYPE_CHAR = 'char',
00135   TYPE_CHARPTR = 'cptr',
00136   TYPE_INT = 'int ',
00137   TYPE_INTPTR = 'iptr',
00138   TYPE_REAL = 'real',
00139   TYPE_REALPTR = 'rptr',
00140   TYPE_VOID = 'void',
00141 };
00142 
00143 enum EMessageResult
00144 {
00145   MSG_IGNORED = 0,  // message was passed over
00146   MSG_PROCESSED = 1,  // message was processed (set/get) and should stop broadcast
00147   MSG_USED = 2    // message was used indirectly, but should continue to other objects
00148 };
00149 
00150 enum EMessageRequest
00151 {
00152   MSG_UNKNOWN = 'none',
00153   MSG_GETDATA = 'getd',
00154   MSG_SETDATA = 'setd',
00155   MSG_DATACHANGED = 'chan',
00156   MSG_REFERENCE = 'refr',
00157   MSG_TRIGGER = 'trig',
00158   MSG_OBJECTDYING = 'die ',
00159   MSG_CAMERA = 'aCam'
00160 };
00161 
00162 enum EMessageHWType
00163 {
00164   HW_UNKNOWN  = 0,
00165   HW_BUS    = 1,
00166   HW_SWITCH = 2,
00167   HW_LIGHT  = 3,
00168   HW_FUSE   = 4,
00169   HW_STATE  = 5,
00170   HW_GAUGE  = 6,
00171   HW_OTHER  = 7,
00172   HW_CIRCUIT  = 8,
00173   HW_RADIO  = 9,
00174   HW_FLAP   = 10,
00175   HW_HILIFT = 11,
00176   HW_GEAR   = 12,
00177   HW_BATTERY  = 13,
00178   HW_ALTERNATOR = 14,
00179   HW_ANNUNCIATOR  = 15,
00180   HW_GENERATOR  = 16,
00181   HW_CONTACTOR  = 17,
00182   HW_SOUNDFX  = 18,
00183   HW_FLASHER  = 19,
00184   HW_INVERTER = 20,
00185   HW_UNITLESS = 101,
00186   HW_UNBENT = 102,
00187   HW_SCALE  = 103
00188 };
00189 
00190 //
00191 // The following enum lists all allowable object types that can be
00192 //   instantiated by a third-party DLL module.
00193 //
00194 enum EDLLObjectType
00195 {
00196   TYPE_DLL_GAUGE    = 'gage',
00197   TYPE_DLL_SYSTEM   = 'subs',
00198   TYPE_DLL_WORLDOBJECT  = 'wobj',
00199   TYPE_DLL_WINDOW   = 'wind',
00200   TYPE_DLL_CAMERA   = 'came',
00201   TYPE_DLL_CONTROL  = 'cont',
00202   TYPE_DLL_VIEW   = 'view'
00203 };
00204 
00205 //
00206 // All possible types of <wobj> objects
00207 //
00208 enum EFlyObjectType
00209 {
00210   TYPE_FLY_UNKNOWN      = 0,
00211   TYPE_FLY_WORLDOBJECT    = 'wobj',
00212   TYPE_FLY_MODELOBJECT    = 'mobj',
00213   TYPE_FLY_SIMULATEDOBJECT  = 'sobj',
00214   TYPE_FLY_VEHICLE      = 'vehi',
00215   TYPE_FLY_GROUNDVEHICLE    = 'gveh',
00216   TYPE_FLY_AIRPLANE     = 'plan',
00217   TYPE_FLY_HELICOPTER     = 'heli'
00218 };
00219 
00220 enum EBitmapType
00221 {
00222   TYPE_SINGLE = 'pbm ',
00223   TYPE_FRAMES = 'pbg ',
00224   TYPE_INVALID  = '    '
00225 };
00226 
00227 enum EStreamTagResult 
00228 {
00229   TAG_IGNORED = 0,
00230   TAG_READ = 1
00231 };
00232 
00233 enum EClickResult
00234 {
00235   MOUSE_TRACKING_OFF = 0,
00236   MOUSE_TRACKING_ON = 1
00237 };
00238 
00239 enum ECursorResult
00240 {
00241   CURSOR_NOT_CHANGED = 0,
00242   CURSOR_WAS_CHANGED = 1
00243 };
00244 
00245 enum ECameraType
00246 {
00247   CAMERA_INVALID    = 0,
00248   CAMERA_COCKPIT    = 'cock',
00249   CAMERA_SPOT       = 'spot',
00250   CAMERA_OBSERVER   = 'obsr',
00251   CAMERA_FLYBY      = 'flyb',
00252   CAMERA_TOWER      = 'towr',
00253   CAMERA_OVERHEAD   = 'over'
00254 };
00255 
00256 //
00257 // Type of pitot-static port, used in CPitotStaticPort (Subsystems)
00258 //
00259 typedef enum {
00260   PORT_PITOT,
00261   PORT_STATIC
00262 } EPortType;
00263 
00264 //
00265 // Facing of pitot-static port, used in CPitotStaticPort (Subsystems)
00266 //
00267 typedef enum {
00268   PORT_LEFT,
00269   PORT_RIGHT
00270 } EPortFace;
00271 
00272 
00273 /*
00274  * Database enumerated types
00275  *
00276  * The following enumerated types are all related to the default
00277  *   databases of airports, runways, navigational aids, etc.
00278  *
00279  * Many have their origins in original DAFIF data from which the
00280  *   databases were constructed.
00281  */
00282 
00283 enum ENavaidTypes
00284 {
00285   NAVAID_TYPE_UNKNOWN   = 0,
00286   NAVAID_TYPE_VOR     = (1 << 0),
00287   NAVAID_TYPE_TACAN   = (1 << 2),
00288   NAVAID_TYPE_NDB     = (1 << 3),
00289   NAVAID_TYPE_DME     = (1 << 4),
00290   NAVAID_TYPE_LOCATOR   = (1 << 5),
00291   NAVAID_TYPE_LOCALIZER   = (1 << 6),
00292   NAVAID_TYPE_GS      = (1 << 7),
00293   NAVAID_TYPE_BACKCOURSE    = (1 << 8),
00294   NAVAID_TYPE_INNERMARKER   = (1 << 9),
00295   NAVAID_TYPE_MIDDLEMARKER  = (1 << 10),
00296   NAVAID_TYPE_OUTERMARKER   = (1 << 11),
00297   NAVAID_TYPE_WAYPOINT    = (1 << 12),
00298   NAVAID_TYPE_VOT     = (1 << 13),
00299   NAVAID_TYPE_VORTAC    = (NAVAID_TYPE_VOR | NAVAID_TYPE_TACAN),
00300   NAVAID_TYPE_VORDME    = (NAVAID_TYPE_VOR | NAVAID_TYPE_DME),
00301   NAVAID_TYPE_NDBDME    = (NAVAID_TYPE_NDB | NAVAID_TYPE_DME),
00302   NAVAID_TYPE_ILSDME    = (NAVAID_TYPE_LOCALIZER | NAVAID_TYPE_DME)
00303 };
00304 
00305 enum ENavaidClasses
00306 {
00307   NAVAID_CLASS_UNKNOWN    = 0,
00308   NAVAID_CLASS_HIGH   = 1,
00309   NAVAID_CLASS_LOW    = 2,
00310   NAVAID_CLASS_TERMINAL   = 3,
00311   NAVAID_CLASS_MEDIUMHOMING = 4,
00312   NAVAID_CLASS_HIGHHOMING   = 5,
00313   NAVAID_CLASS_ANTICIPATED  = 6
00314 };
00315 
00316 enum ENavaidUsage 
00317 {
00318   NAVAID_USAGE_UNKNOWN  = 0,
00319   NAVAID_USAGE_HIGH = 1,
00320   NAVAID_USAGE_LOW  = 2,
00321   NAVAID_USAGE_BOTH = 3,
00322   NAVAID_USAGE_TERMINAL = 4,
00323   NAVAID_USAGE_RNAV = 5
00324 };
00325 
00326 enum ECommTypes
00327 {
00328   COMM_UNKNOWN= 0,
00329   COMM_TOWER = (1 << 0),
00330   COMM_CLEARANCEDELIVERY = (1 << 1),
00331   COMM_GROUNDCONTROL = (1 << 2),
00332   COMM_APPROACHCONTROL = (1 << 3),
00333   COMM_DEPARTURECONTROL = (1 << 4),
00334   COMM_FLIGHTSERVICESTATION = (1 << 5),
00335   COMM_CENTER = (1 << 6),
00336   COMM_ATIS = (1 << 7),
00337   COMM_CTAF = (1 << 8),
00338   COMM_MULTICOM = (1 << 9),
00339   COMM_EMERGENCY = (1 << 10)
00340 };
00341 
00342 enum ENavWaypointUsage 
00343 {
00344   WAYPOINT_USAGE_UNKNOWN = 0,
00345   WAYPOINT_USAGE_HIGH = 1,
00346   WAYPOINT_USAGE_LOW = 2,
00347   WAYPOINT_USAGE_BOTH = 3,
00348   WAYPOINT_USAGE_TERMINAL = 4,
00349   WAYPOINT_USAGE_HIGHALTRNAV = 5
00350 };
00351 
00352 enum ENavWaypointTypes
00353 {
00354   WAYPOINT_TYPE_UNNAMED = (1 << 0),
00355   WAYPOINT_TYPE_NDB = (1 << 1),
00356   WAYPOINT_TYPE_NAMED = (1 << 2),
00357   WAYPOINT_TYPE_OFFROUTE = (1 << 3)
00358 };
00359 
00360 enum ETunedTypes
00361 {
00362   TUNED_NONE = 0,
00363   TUNED_NAVAID = (1 << 0),
00364   TUNED_ILS = (1 << 1),
00365   TUNED_COMM = (1 << 2),
00366 };
00367 
00368 enum EAirportTypes
00369 {
00370   AIRPORT_TYPE_UNKNOWN = 0,
00371   AIRPORT_TYPE_AIRPORT = (1 << 1),
00372   AIRPORT_TYPE_HELIPORT = (1 << 2),
00373   AIRPORT_TYPE_SEAPLANEBASE = (1 << 3),
00374   AIRPORT_TYPE_BALLOONPORT = (1 << 4),
00375   AIRPORT_TYPE_GLIDERPORT = (1 << 5),
00376   AIRPORT_TYPE_STOLPORT = (1 << 6),
00377   AIRPORT_TYPE_ULTRALIGHT = (1 << 7)
00378 };
00379 
00380 enum EAirportOwnership
00381 {
00382   AIRPORT_OWNERSHIP_UNKNOWN = 0,
00383   AIRPORT_OWNERSHIP_PUBLIC = 1,
00384   AIRPORT_OWNERSHIP_PRIVATE = 2,
00385   AIRPORT_OWNERSHIP_AIRFORCE = 3,
00386   AIRPORT_OWNERSHIP_NAVY = 4,
00387   AIRPORT_OWNERSHIP_ARMY = 5
00388 };
00389 
00390 enum EAirportUsage
00391 {
00392   AIRPORT_USAGE_UNKNOWN = 0,
00393   AIRPORT_USAGE_PUBLIC = 1,
00394   AIRPORT_USAGE_PRIVATE = 2
00395 };
00396 
00397 enum EAirportFrameService
00398 {
00399   AIRPORT_FRAMESERVICE_UNKNOWN = 0,
00400   AIRPORT_FRAMESERVICE_NONE = 1,
00401   AIRPORT_FRAMESERVICE_MINOR = 2,
00402   AIRPORT_FRAMESERVICE_MAJOR = 3
00403 };
00404 
00405 enum EAirportEngineService
00406 {
00407   AIRPORT_ENGINESERVICE_UNKNOWN = 0,
00408   AIRPORT_ENGINESERVICE_NONE = 0,
00409   AIRPORT_ENGINESERVICE_MINOR = 1,
00410   AIRPORT_ENGINESERVICE_MAJOR = 2
00411 };
00412 
00413 enum EAirportOxygen
00414 {
00415   AIRPORT_OXYGEN_UNKNOWN = 0,
00416   AIRPORT_OXYGEN_NONE = 1,
00417   AIRPORT_OXYGEN_LOW = 2,
00418   AIRPORT_OXYGEN_HIGH = 3,
00419   AIRPORT_OXYGEN_HIGHLOW = 4
00420 };
00421 
00422 enum EAirportLensColor
00423 {
00424   AIRPORT_BEACON_UNKNOWN = 0,
00425   AIRPORT_BEACON_NONE = 1,
00426   AIRPORT_BEACON_CLEARGREEN = 2,
00427   AIRPORT_BEACON_CLEARYELLOW = 3,
00428   AIRPORT_BEACON_CLEARGREENYELLOW = 4,
00429   AIRPORT_BEACON_SPLITCLEARGREEN = 5,
00430   AIRPORT_BEACON_YELLOW = 6,
00431   AIRPORT_BEACON_GREEN = 7
00432 };
00433 
00434 enum EAirportRegions
00435 {
00436   AIRPORT_REGION_UNKNOWN = 0,
00437   AIRPORT_REGION_FAAALASKA = 1,
00438   AIRPORT_REGION_FAACENTRAL = 2,
00439   AIRPORT_REGION_FAAEASTERN = 3,
00440   AIRPORT_REGION_FAAGREATLAKES = 4,
00441   AIRPORT_REGION_FAAINTERNATIONAL = 5,
00442   AIRPORT_REGION_FAANEWENGLAND = 6,
00443   AIRPORT_REGION_FAANORTHWESTMOUNTAIN = 7,
00444   AIRPORT_REGION_FAASOUTHERN = 8,
00445   AIRPORT_REGION_FAASOUTHWEST = 9,
00446   AIRPORT_REGION_FAAWESTERNPACIFIC = 10
00447 };
00448 
00449 enum EAirportFuelTypes
00450 {
00451   AIRPORT_FUEL_80 = (1 << 1),
00452   AIRPORT_FUEL_100 = (1 << 2),
00453   AIRPORT_FUEL_100LL = (1 << 3),
00454   AIRPORT_FUEL_115 = (1 << 4),
00455   AIRPORT_FUEL_JETA = (1 << 5),
00456   AIRPORT_FUEL_JETA1 = (1 << 6),
00457   AIRPORT_FUEL_JETA1PLUS = (1 << 7),
00458   AIRPORT_FUEL_JETB = (1 << 8),
00459   AIRPORT_FUEL_JETBPLUS = (1 << 9),
00460   AIRPORT_FUEL_AUTOMOTIVE = (1 << 10)
00461 };
00462 
00463 enum EAirportBasedAircraft
00464 {
00465   AIRPORT_AIRCRAFT_SINGLEENGINE = (1 << 1),
00466   AIRPORT_AIRCRAFT_MULTIENGINE = (1 << 2),
00467   AIRPORT_AIRCRAFT_JETENGINE = (1 << 3),
00468   AIRPORT_AIRCRAFT_HELICOPTER = (1 << 4),
00469   AIRPORT_AIRCRAFT_GLIDERS = (1 << 5),
00470   AIRPORT_AIRCRAFT_MILITARY = (1 << 6),
00471   AIRPORT_AIRCRAFT_ULTRALIGHT = (1 << 7)
00472 };
00473 
00474 enum EAirportScheduleMonth
00475 {
00476   AIRPORT_MONTH_JANUARY = (1 << 1),
00477   AIRPORT_MONTH_FEBRUARY = ( 1 << 2),
00478   AIRPORT_MONTH_MARCH = (1 << 3),
00479   AIRPORT_MONTH_APRIL = (1 << 4),
00480   AIRPORT_MONTH_MAY = (1 << 5),
00481   AIRPORT_MONTH_JUNE = (1 << 6),
00482   AIRPORT_MONTH_JULY = (1 << 7),
00483   AIRPORT_MONTH_AUGUST = (1 << 8),
00484   AIRPORT_MONTH_SEPTEMBER = (1 << 9),
00485   AIRPORT_MONTH_OCTOBER = (1 << 10),
00486   AIRPORT_MONTH_NOVEMBER = (1 << 11),
00487   AIRPORT_MONTH_DECEMBER = (1 << 12)
00488 };
00489 
00490 enum EAirportScheduleDay
00491 {
00492   AIRPORT_DAY_SUNDAY = (1 << 16),
00493   AIRPORT_DAY_MONDAY = (1 << 17),
00494   AIRPORT_DAY_TUESDAY = (1 << 18),
00495   AIRPORT_DAY_WEDNESDAY = (1 << 19),
00496   AIRPORT_DAY_THURSDAY = (1 << 20),
00497   AIRPORT_DAY_FRIDAY = (1 << 21),
00498   AIRPORT_DAY_SATURDAY = (1 << 22)
00499 };
00500 
00501 enum EAirportScheduleRange
00502 {
00503   AIRPORT_SCHEDULE_ALLDAY = (1 << 28),
00504   AIRPORT_SCHEDULE_SPECIFICTIME = (1 << 29),
00505   AIRPORT_SCHEDULE_SUNRISE = (1 << 30),
00506   AIRPORT_SCHEDULE_SUNSET = (1 << 31)
00507 };
00508 
00509 enum EAirportLightingControl
00510 {
00511   AIRPORT_LIGHTING_24HOURS = (1 << 1),
00512   AIRPORT_LIGHTING_ATCCONTROLLED = (1 << 2),
00513   AIRPORT_LIGHTING_RADIOCONTROLLED = (1 << 3),
00514   AIRPORT_LIGHTING_RADIOREQUIRED = (1 << 4),
00515   AIRPORT_LIGHTING_PHONEREQUIRED = (1 << 5)
00516 };
00517 
00518 enum EAirportAirspace
00519 {
00520   AIRPORT_AIRSPACE_A = 1,
00521   AIRPORT_AIRSPACE_B = 2,
00522   AIRPORT_AIRSPACE_C = 3,
00523   AIRPORT_AIRSPACE_D = 4,
00524   AIRPORT_AIRSPACE_E = 5,
00525   AIRPORT_AIRSPACE_G = 6
00526 };
00527 
00528 /*
00529  * User Interface enumerated types
00530  *
00531  * ??? Will these still be appropriate for an implementation using
00532  *       PLIB?
00533  */
00534 
00535 enum EMouseCursorStyle
00536 {
00537   CURSOR_ARROW = 0,
00538   CURSOR_CROSS = 1,
00539   CURSOR_FINGER = 2,
00540   CURSOR_HAND = 3,
00541   CURSOR_MOVE = 4,
00542   CURSOR_SIZE_H = 5,
00543   CURSOR_SIZE_HV = 6,
00544   CURSOR_SIZE_V = 7,
00545   CURSOR_FLIP_DOWN = 8,
00546   CURSOR_FLIP_UP = 9,
00547   CURSOR_FLIP_LEFT = 10,
00548   CURSOR_FLIP_RIGHT = 11,
00549   CURSOR_TURN_LEFT = 12,
00550   CURSOR_TURN_RIGHT = 13,
00551   CURSOR_SLIDE = 14
00552 };
00553 
00554 enum EMouseButton
00555 {
00556   MOUSE_BUTTON_LEFT = (1 << 0),
00557   MOUSE_BUTTON_RIGHT  = (1 << 1),
00558   MOUSE_BUTTON_MIDDLE = (1 << 2)
00559 };
00560 
00561 enum EWindowRegion
00562 { 
00563   IN_WINDOW_CONTENT     = 1, 
00564   IN_WINDOW_DRAG        = 2, 
00565   IN_WINDOW_CLOSE       = 3, 
00566   IN_WINDOW_SIZE        = 4, 
00567   IN_WINDOW_SIZE_RIGHT  = 5, 
00568   IN_WINDOW_SIZE_LEFT   = 6, 
00569   IN_WINDOW_SIZE_BOTTOM = 7,
00570   IN_WINDOW_HIDE        = 8
00571 };
00572 
00573 enum EWindowFlags
00574 {
00575   WINDOW_HAS_TITLEBAR = (1 << 0),
00576   WINDOW_HAS_CLOSEBOX = (1 << 1),
00577   WINDOW_HAS_SIZEBOX  = (1 << 2),
00578   WINDOW_HAS_BORDER = (1 << 3),
00579   WINDOW_IS_MOVEABLE  = (1 << 4),
00580   WINDOW_IS_RESIZEABLE  = (1 << 5)
00581 };
00582 
00583 enum EWindowType
00584 {
00585   WINDOW_CAMERA   = 1,
00586   WINDOW_RASTER_MAP = 2,
00587   WINDOW_VECTOR_MAP = 3,
00588   WINDOW_CHECKLIST  = 4,
00589   WINDOW_GPS    = 5,
00590   WINDOW_MINIPANEL  = 6,
00591   WINDOW_AXIS   = 7
00592 }; 
00593 
00594 enum EFPEntryType
00595 {
00596   ENTRY_AIRPORT = 1,
00597   ENTRY_NAVAID  = 2,
00598   ENTRY_WAYPOINT  = 3,
00599   ENTRY_USER  = 4
00600 };
00601 
00602 enum ETimeOfDay
00603 {
00604   TIME_DAWN = 1,
00605   TIME_DAYTIME  = 2,
00606   TIME_DUSK = 3,
00607   TIME_NIGHTTIME  = 4
00608 };
00609 
00610 enum EJoystickAxis
00611 {
00612   X_AXIS_INDEX    = 0,
00613   Y_AXIS_INDEX    = 1,
00614   RUDDER_AXIS_INDEX = 2,
00615   TRIM_AXIS_INDEX   = 3,
00616   RBRAKE_AXIS_INDEX = 4,
00617   LBRAKE_AXIS_INDEX = 5,
00618   THROTTLE_AXIS_INDEX = 6,
00619   THROTTLE1_AXIS_INDEX  = THROTTLE_AXIS_INDEX,
00620   THROTTLE2_AXIS_INDEX  = 7,
00621   THROTTLE3_AXIS_INDEX  = 8,
00622   THROTTLE4_AXIS_INDEX  = 9,
00623   MIXTURE_AXIS_INDEX  = 10,
00624   MIXTURE1_AXIS_INDEX = MIXTURE_AXIS_INDEX,
00625   MIXTURE2_AXIS_INDEX = 11,
00626   MIXTURE3_AXIS_INDEX = 12,
00627   MIXTURE4_AXIS_INDEX = 13,
00628   PROP_AXIS_INDEX   = 14,
00629   PROP1_AXIS_INDEX  = PROP_AXIS_INDEX,
00630   PROP2_AXIS_INDEX  = 15,
00631   PROP3_AXIS_INDEX  = 16,
00632   PROP4_AXIS_INDEX  = 17
00633 };
00634 
00635 enum ERadioType
00636 {
00637   RADIO_COM = (1 << 0),
00638   RADIO_NAV = (1 << 1),
00639   RADIO_DME = (1 << 2),
00640   RADIO_XPDR  = (1 << 3),
00641   RADIO_AP  = (1 << 4),
00642   RADIO_GPS = (1 << 5),
00643   RADIO_ADF = (1 << 6),
00644   RADIO_AUDIO = (1 << 7),
00645   RADIO_HF  = (1 << 8)
00646 };
00647 
00648 enum EFreqType
00649 {
00650   FREQ_ACTIVE = 0,
00651   FREQ_STANDBY  = 1
00652 };
00653 
00654 enum 
00655 { RAY_COLLIDE_GROUND  = 0x01, 
00656   RAY_COLLIDE_MODELS  = 0x02, 
00657   RAY_COLLIDE_CLOUDS  = 0x04,
00658   RAY_COLLIDE_ALL   = 0xFF, 
00659   RAY_COLLIDE_SOLID_OBJECTS = (RAY_COLLIDE_ALL & ~RAY_COLLIDE_CLOUDS)
00660 };
00661 
00662 enum EFileSearchLocation
00663 {
00664   SEARCH_PODS = (1 << 0),
00665   SEARCH_DISK = (1 << 1),
00666   SEARCH_ALL  = SEARCH_PODS | SEARCH_DISK
00667 };
00668 
00669 enum EKeyboardKeys
00670 {
00671   KB_KEY_ESC      = 1,
00672   KB_KEY_1      = 2,
00673   KB_KEY_2      = 3,
00674   KB_KEY_3      = 4,
00675   KB_KEY_4      = 5,
00676   KB_KEY_5      = 6,
00677   KB_KEY_6      = 7,
00678   KB_KEY_7      = 8,
00679   KB_KEY_8      = 9,
00680   KB_KEY_9      = 10,
00681   KB_KEY_0      = 11,
00682   KB_KEY_MINUS      = 12,
00683   KB_KEY_EQUALS     = 13,
00684   KB_KEY_BACKSPACE    = 14,
00685   KB_KEY_TAB      = 15,
00686   KB_KEY_Q      = 16,
00687   KB_KEY_W      = 17,
00688   KB_KEY_E      = 18,
00689   KB_KEY_R      = 19,
00690   KB_KEY_T      = 20,
00691   KB_KEY_Y      = 21,
00692   KB_KEY_U      = 22,
00693   KB_KEY_I      = 23,
00694   KB_KEY_O      = 24,
00695   KB_KEY_P      = 25,
00696   KB_KEY_FORWARD_BRACKET    = 26,
00697   KB_KEY_REVERSE_BRACKET    = 27,
00698   KB_KEY_ENTER      = 28,
00699   KB_KEY_LCTRL      = 29,
00700   KB_KEY_A      = 30,
00701   KB_KEY_S      = 31,
00702   KB_KEY_D      = 32,
00703   KB_KEY_F      = 33,
00704   KB_KEY_G      = 34,
00705   KB_KEY_H      = 35,
00706   KB_KEY_J      = 36,
00707   KB_KEY_K      = 37,
00708   KB_KEY_L      = 38,
00709   KB_KEY_SEMI_COLON   = 39,
00710   KB_KEY_SINGLE_QUOTE   = 40,
00711   KB_KEY_REVERSE_SINGLE_QUOTE = 41,
00712   KB_KEY_LSHIFT     = 42,
00713   KB_KEY_BACKSLASH    = 43,
00714   KB_KEY_Z      = 44,
00715   KB_KEY_X      = 45,
00716   KB_KEY_C      = 46,
00717   KB_KEY_V      = 47,
00718   KB_KEY_B      = 48,
00719   KB_KEY_N      = 49,
00720   KB_KEY_M      = 50,
00721   KB_KEY_COMMA      = 51,
00722   KB_KEY_PERIOD     = 52,
00723   KB_KEY_SLASH      = 53,
00724   KB_KEY_RSHIFT     = 54,
00725   KB_KEY_STAR     = 55,
00726   KB_KEY_LALT     = 56,
00727   KB_KEY_SPACE      = 57,
00728   KB_KEY_CAPSLOCK     = 58,
00729   KB_KEY_F1     = 59,
00730   KB_KEY_F2     = 60,
00731   KB_KEY_F3     = 61,
00732   KB_KEY_F4     = 62,
00733   KB_KEY_F5     = 63,
00734   KB_KEY_F6     = 64,
00735   KB_KEY_F7     = 65,
00736   KB_KEY_F8     = 66,
00737   KB_KEY_F9     = 67,
00738   KB_KEY_F10      = 68,
00739   KB_KEY_NUMLOCK      = 69,
00740   KB_KEY_SCROLLLOCK   = 70,
00741   KB_KEY_HOME     = 71,
00742   KB_KEY_UP     = 72,
00743   KB_KEY_PGUP     = 73,
00744   KB_KEY_KEYPAD_MINUS   = 74,
00745   KB_KEY_LEFT     = 75,
00746   KB_KEY_CENTER     = 76,
00747   KB_KEY_RIGHT      = 77,
00748   KB_KEY_KEYPAD_PLUS    = 78,
00749   KB_KEY_END      = 79,
00750   KB_KEY_DOWN     = 80,
00751   KB_KEY_PGDN     = 81,
00752   KB_KEY_INSERT     = 82,
00753   KB_KEY_DEL      = 83,
00754   KB_KEY_F11      = 87,
00755   KB_KEY_F12      = 88,
00756   KB_KEY_KEYPAD_ENTER   = 284,
00757   KB_KEY_RCTRL      = 285,
00758   KB_KEY_KEYPAD_SLASH   = 309,
00759   KB_KEY_RALT     = 312,
00760   KB_KEY_EXT_NUMLOCK    = 325,
00761   KB_KEY_GRAY_HOME    = 327,
00762   KB_KEY_GRAY_UP      = 328,
00763   KB_KEY_GRAY_PGUP    = 329,
00764   KB_KEY_GRAY_LEFT    = 331,
00765   KB_KEY_GRAY_RIGHT   = 333,
00766   KB_KEY_GRAY_END     = 335,
00767   KB_KEY_GRAY_DOWN    = 336,
00768   KB_KEY_GRAY_PGDN    = 337,
00769   KB_KEY_GRAY_INS     = 338,
00770   KB_KEY_GRAY_DEL     = 339,
00771   KB_KEY_META     = 340
00772 };
00773 
00774 enum EKeyboardModifiers
00775 {
00776   KB_MODIFIER_NONE    = (0 << 0),
00777   KB_MODIFIER_CTRL    = (1 << 0),
00778   KB_MODIFIER_ALT     = (1 << 1),
00779   KB_MODIFIER_SHIFT   = (1 << 2),
00780   KB_MODIFIER_META    = (1 << 3)
00781 };
00782 
00783 enum EGaugeHilite
00784 {
00785   GAUGE_HILITE_NONE = 0,
00786   GAUGE_HILITE_ARROW  = (1 << 0),
00787   GAUGE_HILITE_BOX  = (1 << 1),
00788   GAUGE_HILITE_CIRCLE = (1 << 2),
00789   GAUGE_HILITE_BLINK  = (1 << 8)
00790 };
00791 
00792 enum EWeatherObstructionTypes
00793 {
00794   WEATHER_INTENSITY_VICINITY        = 0x00000001, // Weather intensity (bits 0-3)
00795   WEATHER_INTENSITY_LIGHT     = 0x00000002,
00796   WEATHER_INTENSITY_MODERATE    = 0x00000004,
00797   WEATHER_INTENSITY_HEAVY     = 0x00000008,
00798   WEATHER_DESCRIPTOR_SHALLOW    = 0x00000010, // Weather description (4-11)
00799   WEATHER_DESCRIPTOR_PARTIAL    = 0x00000020,
00800   WEATHER_DESCRIPTOR_PATCHES    = 0x00000040,
00801   WEATHER_DESCRIPTOR_LOW_DRIFTING   = 0x00000080,
00802   WEATHER_DESCRIPTOR_BLOWING    = 0x00000100,
00803   WEATHER_DESCRIPTOR_SHOWERS    = 0x00000200,
00804   WEATHER_DESCRIPTOR_THUNDERSTORMS  = 0x00000400,
00805   WEATHER_DESCRIPTOR_FREEZING   = 0x00000800,
00806   WEATHER_PHENOMENA_DRIZZLE   = 0x00001000, // Weather phenomena (bits 12-31)
00807   WEATHER_PHENOMENA_RAIN      = 0x00002000,
00808   WEATHER_PHENOMENA_SNOW      = 0x00004000,
00809   WEATHER_PHENOMENA_SNOW_GRAINS   = 0x00008000,
00810   WEATHER_PHENOMENA_ICE_CRYSTALS    = 0x00010000,
00811   WEATHER_PHENOMENA_ICE_PELLETS   = 0x00020000,
00812   WEATHER_PHENOMENA_HAIL      = 0x00040000,
00813   WEATHER_PHENOMENA_SMALL_HAIL_OR_SNOW  = 0x00080000,
00814   WEATHER_PHENOMENA_FOG     = 0x00100000,
00815   WEATHER_PHENOMENA_UNIDENTIFIED    = 0x00200000,
00816   WEATHER_PHENOMENA_VOLCANIC_ASH    = 0x00400000,
00817   WEATHER_PHENOMENA_SQUALL    = 0x00800000,
00818   WEATHER_PHENOMENA_WIDESPREAD_DUST = 0x01000000,
00819   WEATHER_PHENOMENA_SPRAY     = 0x02000000,
00820   WEATHER_PHENOMENA_SAND      = 0x04000000,
00821   WEATHER_PHENOMENA_DUST_SAND_WHIRLS  = 0x08000000,
00822   WEATHER_PHENOMENA_FUNNEL_CLOUD    = 0x10000000,
00823   WEATHER_PHENOMENA_SAND_STORM    = 0x20000000,
00824   WEATHER_PHENOMENA_DUST_STORM    = 0x40000000
00825 };
00826 
00827 enum EWindsAloftLayer
00828 {
00829   WEATHER_WINDS_ALOFT_3000 = 0,
00830   WEATHER_WINDS_ALOFT_6000 = 1,
00831   WEATHER_WINDS_ALOFT_9000 = 2,
00832   WEATHER_WINDS_ALOFT_12000 = 3,
00833   WEATHER_WINDS_ALOFT_15000 = 4,
00834   WEATHER_WINDS_ALOFT_18000 = 5,
00835   WEATHER_WINDS_ALOFT_FL18 = WEATHER_WINDS_ALOFT_18000,
00836   WEATHER_WINDS_ALOFT_21000 = 6,
00837   WEATHER_WINDS_ALOFT_FL21 = WEATHER_WINDS_ALOFT_21000,
00838   WEATHER_WINDS_ALOFT_24000 = 7,
00839   WEATHER_WINDS_ALOFT_FL24 = WEATHER_WINDS_ALOFT_24000,
00840   WEATHER_WINDS_ALOFT_27000 = 8,
00841   WEATHER_WINDS_ALOFT_FL27 = WEATHER_WINDS_ALOFT_27000,
00842   WEATHER_WINDS_ALOFT_30000 = 9,
00843   WEATHER_WINDS_ALOFT_FL30 = WEATHER_WINDS_ALOFT_30000,
00844   WEATHER_WINDS_ALOFT_33000 = 10,
00845   WEATHER_WINDS_ALOFT_FL33 = WEATHER_WINDS_ALOFT_33000,
00846   WEATHER_WINDS_ALOFT_36000 = 11,
00847   WEATHER_WINDS_ALOFT_FL36 = WEATHER_WINDS_ALOFT_36000,
00848   WEATHER_WINDS_ALOFT_39000 = 12,
00849   WEATHER_WINDS_ALOFT_FL39 = WEATHER_WINDS_ALOFT_39000,
00850   WEATHER_WINDS_ALOFT_42000 = 13,
00851   WEATHER_WINDS_ALOFT_FL42 = WEATHER_WINDS_ALOFT_42000,
00852   WEATHER_WINDS_ALOFT_60000 = 14,
00853   WEATHER_WINDS_ALOFT_FL60 = WEATHER_WINDS_ALOFT_60000,
00854   WEATHER_WINDS_ALOFT_MAX
00855 };
00856 
00857 enum EWeatherSkyTypes
00858 {
00859   WEATHER_SKY_UNKNOWN = 0,
00860   WEATHER_SKY_CLEAR = 1,
00861   WEATHER_SKY_FEW = 2,
00862   WEATHER_SKY_SCATTERED = 3,
00863   WEATHER_SKY_BROKEN = 4,
00864   WEATHER_SKY_OVERCAST = 5,
00865   WEATHER_SKY_FOG = 6
00866 };
00867 
00868 enum EWheelStatus
00869 {
00870   WHEELS_NOTONGROUND = 0,
00871   WHEELS_SOMEONGROUND = 1,
00872   WHEELS_ALLONGROUND = 2,
00873   WHEELS_ONEONGROUND = 3,
00874   WHEELS_INWATER = 4
00875 };
00876 
00877 enum EGroundTypes 
00878 {
00879   GROUND_CONCRETE = 1,
00880   GROUND_ASPHALT = 2,
00881   GROUND_TURF = 3,
00882   GROUND_DIRT = 4,
00883   GROUND_GRAVEL = 5,
00884   GROUND_METAL = 6,
00885   GROUND_SAND = 7,
00886   GROUND_WOOD = 8,
00887   GROUND_WATER = 9,
00888   GROUND_MATS = 10,
00889   GROUND_SNOW = 11,
00890   GROUND_ICE = 12,
00891   GROUND_GROOVED = 13,
00892   GROUND_TREATED = 14
00893 };
00894 
00895 enum ETerrainType
00896 {
00897   TERRAIN_WATER_OCEAN = 12,
00898   TERRAIN_ICE_CRACKED_GLACIERS = 13,
00899   TERRAIN_SNOW = 59,
00900   TERRAIN_MOUNTAIN_FOREST_CALIFORNIA = 60,
00901   TERRAIN_TOWNS_MIDEAST = 61,
00902   TERRAIN_CITY_USA = 101,
00903   TERRAIN_GRASS_SCRUB_LIGHT = 102,
00904   TERRAIN_FOREST_MIXED_SCRUB = 104,
00905   TERRAIN_FOREST_MIXED = 105,
00906   TERRAIN_MOUNTAIN_FOREST_GREEN = 106,
00907   TERRAIN_GRASS_SCRUB_LIGHT_2 = 107,
00908   TERRAIN_DESERT_BARREN = 108,
00909   TERRAIN_TUNDRA_UPLAND = 109,
00910   TERRAIN_GRASS_SCRUB_LIGHT_3 = 110,
00911   TERRAIN_DESERT_SCRUB_LIGHT = 111,
00912   TERRAIN_SNOW_HARD_PACKED = 112,
00913   TERRAIN_EURO_CITY_ENGLAND_HEAVY = 113,
00914   TERRAIN_SHRUB_EVERGREEN = 116,
00915   TERRAIN_SHRUB_DECIDUOUS = 117,
00916   TERRAIN_CITY_HEAVY_ASIAN = 118,
00917   TERRAIN_FOREST_EVERGREEN_W_DARK_FIELDS = 119,
00918   TERRAIN_RAINFOREST_TROPICAL_MIXED = 120,
00919   TERRAIN_CONIFER_BOREAL_FOREST = 121,
00920   TERRAIN_COOL_CONIFER_FOREST = 122,
00921   TERRAIN_EURO_FOREST_TOWNS = 123,
00922   TERRAIN_FOREST_RIDGES_MIXED = 124,
00923   TERRAIN_EURO_FOREST_DARK_TOWNS = 125,
00924   TERRAIN_SUBURB_USA_BROWN = 126,
00925   TERRAIN_CONIFER_FOREST = 127,
00926   TERRAIN_FOREST_YELLOWED_AFRICAN = 128,
00927   TERRAIN_SEASONAL_RAINFOREST = 129,
00928   TERRAIN_COOL_CROPS = 130,
00929   TERRAIN_CROPS_TOWN = 131,
00930   TERRAIN_DRY_TROPICAL_WOODS = 132,
00931   TERRAIN_RAINFOREST_TROPICAL = 133,
00932   TERRAIN_RAINFOREST_DEGRADED = 134,
00933   TERRAIN_FARM_USA_GREEN = 135,
00934   TERRAIN_RICE_PADDIES = 136,
00935   TERRAIN_HOT_CROPS = 137,
00936   TERRAIN_FARM_USA_MIXED = 138,
00937   TERRAIN_EURO_FARM_FULL_MIXED = 139,
00938   TERRAIN_COOL_GRASSES_W_SHRUBS = 140,
00939   TERRAIN_HOT_GRASSES_W_SHRUBS = 141,
00940   TERRAIN_COLD_GRASSLAND = 142,
00941   TERRAIN_SAVANNA_WOODS = 143,
00942   TERRAIN_SWAMP_BOG = 144,
00943   TERRAIN_MARSH_WETLAND = 145,
00944   TERRAIN_MEDITERRANEAN_SCRUB = 146,
00945   TERRAIN_DRY_WOODY_SCRUB = 147,
00946   TERRAIN_DRY_EVERGREEN_WOODS = 148,
00947   TERRAIN_SUBURB_USA = 149,
00948   TERRAIN_DESERT_SAND_DUNES = 150,
00949   TERRAIN_SEMI_DESERT_SHRUB = 151,
00950   TERRAIN_SEMI_DESERT_SAGE = 152,
00951   TERRAIN_MOUNTAIN_ROCKY_TUNDRA_SNOW = 153,
00952   TERRAIN_MIXED_RAINFOREST = 154,
00953   TERRAIN_COOL_FIELDS_AND_WOODS = 155,
00954   TERRAIN_FOREST_AND_FIELD = 156,
00955   TERRAIN_COOL_FOREST_AND_FIELD = 157,
00956   TERRAIN_FIELDS_AND_WOODY_SAVANNA = 158,
00957   TERRAIN_THORN_SCRUB = 159,
00958   TERRAIN_SMALL_LEAF_MIXED_FOREST = 160,
00959   TERRAIN_MIXED_BOREAL_FOREST = 161,
00960   TERRAIN_NARROW_CONIFERS = 162,
00961   TERRAIN_WOODED_TUNDRA = 163,
00962   TERRAIN_HEATH_SCRUB = 164,
00963   TERRAIN_EURO_FULL_GREEN_3 = 165,
00964   TERRAIN_AUSTRALIAN_CITY = 166,
00965   TERRAIN_CITY_HEAVY_BRAZIL = 167,
00966   TERRAIN_CITY_HEAVY_USA = 168,
00967   TERRAIN_POLAR_DESERT = 169,
00968   TERRAIN_EURO_TOWNS = 170,
00969   TERRAIN_CITY_MIDDLE_EASTERN_HEAVY = 171,
00970   TERRAIN_TUNDRA_BOG = 172,
00971   TERRAIN_EURO_FARM_FULL_MIXED_2 = 176,
00972   TERRAIN_TOWNS_ASIAN = 177,
00973   TERRAIN_ICE_CRACKED_SNOW = 178,
00974   TERRAIN_EURO_FARM_FOREST = 179,
00975   TERRAIN_FARM_USA_BROWN = 180,
00976   TERRAIN_FARM_MIDDLE_EASTERN_W_FOREST = 181,
00977   TERRAIN_DESERT_BRUSH_REDDISH = 182,
00978   TERRAIN_FARM_MIDDLE_EASTERN = 183,
00979   TERRAIN_EURO_FARM_FULL_MIXED_3 = 184,
00980   TERRAIN_EURO_FARM_FULL_GREEN_2 = 185,
00981   TERRAIN_MOUNTAIN_ROCKY_SNOW = 186,
00982   TERRAIN_MOUNTAIN_FOREST_LIGHT = 187,
00983   TERRAIN_GRASS_MEADOW = 188,
00984   TERRAIN_MOIST_EUCALYPTUS = 189,
00985   TERRAIN_RAINFOREST_HAWAIIAN = 190,
00986   TERRAIN_WOODY_SAVANNA = 191,
00987   TERRAIN_BROADLEAF_CROPS = 192,
00988   TERRAIN_GRASS_CROPS = 193,
00989   TERRAIN_CROPS_GRASS_SHRUBS = 194,
00990   TERRAIN_GRASSLAND = 225,
00991   TERRAIN_DESERT_SAVANAH_AFRICAN = 255
00992 };
00993 
00994 enum EGestaltFlags
00995 {
00996   GESTALT_OBJECT_NEEDS_TO_DRAW  = (1 << 0),
00997   GESTALT_OBJECT_NEEDS_TIME_SLICE = (1 << 1),
00998   GESTALT_OBJECT_HAS_MODEL  = (1 << 2),
00999   GESTALT_OBJECT_HAS_CAMERA = (1 << 3),
01000   GESTALT_OBJECT_CAN_ACTIVATE = (1 << 4),
01001   GESTALT_OBJECT_HAS_CONTROLS = (1 << 5),
01002   GESTALT_OBJECT_UNDER_USER_CONTROL = (1 << 6), // set by Fly!; don't modify!
01003   GESTALT_PRIMARY_USER_OBJECT = (1 << 7), // set by Fly!; don't modify
01004   GESTALT_STATIC_SCENERY_OBJECT = (1 << 8), // objects saved to scenery database
01005   GESTALT_DYNAMIC_SCENERY_OBJECT  = (1 << 9), // objects NOT saved to scenery database
01006   GESTALT_DRAW_OBJECT_NAME  = (1 << 10),  // draw popup name when pointed at with mouse
01007   GESTALT_OBJECT_IS_CLOUD   = (1 << 11),
01008   GESTALT_DO_NOT_AUTO_SNAP  = (1 << 12),  // snap object to the ground automatically 
01009   GESTALT_OBJECT_IS_TOWER   = (1 << 13),  // used to designate for tower camera
01010   GESTALT_OBJECT_ANIMATED   = (1 << 14),  // animated scenery (cars, trucks, boats, etc.)
01011   GESTALT_OBJECT_COLLISIONS = (1 << 15),  // collision detection with this object (default ON)
01012   GESTALT_DISTANCE_HIDING   = (1 << 16),  // object hidden when eye past a threshold distance
01013   GESTALT_SINK_UNDERGROUND  = (1 << 17),  // sink model by 8-10 feet underground (for raised sidewalks)
01014   GESTALT_DRAW_NIGHT_LIGHTS = (1 << 18),  // force night lights on models
01015   GESTALT_DRAW_SHADOW   = (1 << 19),  // draw shadows for this object??
01016   GESTALT_OBJECT_GENERATED  = (1 << 20),  // object was generated by an automated external source (DLL)
01017   GESTALT_NO_Z_BUFFER   = (1 << 21),  // object doesn't use Z-buffer, draws after taxiways and runways, but before models (ground striping)
01018   GESTALT_Z_SORTED    = (1 << 22),  // object must sort in Z before drawing (back to front)
01019   GESTALT_NO_Z_BUFFER_UNDERLAY  = (1 << 23) // object doesn't use Z-buffer, draws before taxiways and runways (ground underlay)
01020 };
01021 
01022 
01024 //
01025 //  Structures/Typedefs
01026 //
01028 
01029 typedef struct SDLLCopyright
01030 {
01031   char  product[128];
01032   char  company[128];
01033   char  programmer[128];
01034   char  dateTimeVersion[128];
01035   char  email[128];
01036   int internalVersion;
01037 } SDLLCopyright;
01038 
01039 typedef struct SDLLRegisterTypeList
01040 {
01041   EDLLObjectType  type;
01042   long    signature;
01043   SDLLRegisterTypeList  *next;
01044 } SDLLRegisterTypeList;
01045 
01046 typedef void* DLLObjectRef;
01047 typedef void* DLLFileRef;
01048 
01049 typedef struct SFlyObjectRef
01050 {
01051   void  *objectPtr;
01052   void  *superSig;
01053   void  *classSig;
01054 } SFlyObjectRef;
01055 
01056 typedef struct SFlyObjectList
01057 {
01058   SFlyObjectRef ref;
01059   SFlyObjectList  *prev;
01060   SFlyObjectList  *next;
01061 } SFlyObjectList;
01062 
01063 typedef struct SDLLObject
01064 {
01065   //
01066   //  public; set this to any value you want to uniquely
01067   //  identify an "instance" of your object on the .DLL
01068   //  side.  this can be a gauge, system, or other 
01069   //  component.
01070   //
01071 
01072   DLLObjectRef  dllObject;  // set by .DLL; can be any value you want
01073 
01074   //
01075   //  private; do not use or modify the following members
01076   //
01077 
01078   DLLFileRef  dllFile;  // set by Fly!; do NOT modify this value!!!
01079   SFlyObjectRef flyObject;  // set by Fly!; do NOT modify this value!!!
01080 } SDLLObject;
01081 
01082 typedef struct SMessage
01083 {
01084   unsigned int  id;       // message ID
01085   unsigned int  group;        // target group ID
01086   EMessageDataType  dataType;   // result data type
01087   unsigned int  result;       // message result code
01088 
01089   DLLObjectRef  sender;
01090   DLLObjectRef  receiver;
01091 
01092   union 
01093   {
01094     char  charData;
01095     char  *charPtrData;
01096     int intData;
01097     int *intPtrData;
01098     double  realData;
01099     double  *realPtrData;
01100     void  *voidData;
01101   };
01102       
01103   union
01104   {
01105     unsigned int  userData[8];
01106     struct 
01107     {
01108       unsigned int  unit;   // unit number
01109       unsigned int  hw;   // hardware type
01110       unsigned int  engine;   // engine number
01111       unsigned int  tank;   // tank number
01112       unsigned int  gear;   // gear number
01113       unsigned int  unused;   // unused
01114       unsigned int  datatag;  // data tag
01115       unsigned int  sw;   // switch position
01116     } u;
01117   } user;
01118 
01119   unsigned int  action;
01120 } SMessage;
01121 
01122 typedef struct SSurface
01123 {
01124   unsigned int  *drawBuffer;    // surface buffer
01125   unsigned int  xSize, ySize;   // surface dimensions
01126   unsigned int  xSpan;      // width in pixels of each line span (aligned)
01127   int   xScreen, yScreen; // screen coordinates for upper-left corner
01128 } SSurface;
01129 
01130 typedef struct SFont
01131 {
01132   char  fontName[64];   // -> passed to APILoadFont; name of font family image file
01133   void  *font;      // <- returned from APILoadFont; do NOT alter!!!
01134 } SFont;
01135 
01136 typedef struct SBitmap
01137 {
01138   char    bitmapName[64]; // -> passed to APILoadBitmap
01139   void    *bitmap;  // <- returned from APILoadBitmap; do NOT alter!!!
01140   EBitmapType type;   // <- returned from APILoadBitmap; do NOT alter!!!
01141 } SBitmap;
01142 
01143 typedef struct {
01144   unsigned long   magic;    // Magic code of 'PBM '
01145   unsigned long   width;
01146   unsigned long   height;
01147   unsigned long   x1, y1, x2, y2;
01148 } SPBMHeader;
01149 
01150 
01151 typedef struct {
01152   GLubyte r, g, b;
01153 } RGB;
01154 
01155 
01156 //
01157 // SStream represents a stream text file, see Stream.h and Stream.cpp for details
01158 //
01159 
01160 typedef struct SStream
01161 {
01162   char  filename[64];
01163   char  mode[3];
01164   void  *stream;
01165 } SStream;
01166 
01167 
01168 //
01169 // SVector represents a vector in either Cartesian (x,y,z) or Polar (p,h,r)
01170 //   coordinates
01171 //
01172 
01173 typedef struct SVector
01174 {
01175   union {
01176     double  x;
01177     double  p;  // when used as a polar, pitch (in radians)
01178   };
01179 
01180   union {
01181     double  y;
01182     double  h;  // when used as a polar, heading (in radians)
01183   };
01184 
01185   union {
01186     double  z;
01187     double  r;  // when used as a polar, radius (in feet)
01188   };
01189 } SVector;
01190 
01191 
01192 //
01193 // SPosition represents a geographical position on the earth.  The "zero" reference
01194 //   point is 0 deg latitude, 0 deg longitude, 0 feet MSL.
01195 //
01196 // 'lat' is the latitude, in arcseconds north (+) or south (-) of the equator
01197 // 'lon' is the longitude, in arcseconds west of the Prime Meridian
01198 // 'alt' is the altitude in feed above MSL
01199 //
01200 typedef struct SPosition
01201 {
01202   double  lat;
01203   double  lon;
01204   double  alt;
01205 } SPosition;
01206 
01207 typedef struct SPositionList
01208 {
01209   SPosition pos;    // points should be stored clockwise
01210   SPositionList *next;
01211 } SPositionList;
01212 
01213 typedef struct SCollision
01214 {
01215   char    collided; // 0 or 1
01216   SPosition pos;    // collision position
01217   SFlyObjectRef object;   // collision object
01218 } SCollision;
01219 
01220 typedef struct SMovie
01221 {
01222   void  *gc;
01223   void  *movie;
01224   SSurface  surface;
01225 } SMovie;
01226 
01227 typedef struct SNavaid
01228 {
01229   char    name[40];
01230   char    id[8];
01231 
01232   int   type;
01233   int   classification;
01234   int   usage;
01235 
01236   SPosition pos;
01237   float   freq;
01238   float   range;
01239   float   magneticVariation;
01240   float   slavedVariation;
01241 
01242   SNavaid   *prev;  // double-linked list
01243   SNavaid   *next;  // double-linked list
01244 } SNavaid;
01245 
01246 typedef struct SILS
01247 {
01248   char    airportKey[10];
01249   char    runwayID[5];
01250 
01251   int   type;
01252   int   classification;
01253   SPosition pos;
01254   float   range;
01255   float   magneticVariation;
01256 
01257   float   glideslopeAngle;
01258   float   approachBearing;
01259   char    backCourseAvailable;
01260 
01261   SILS    *prev;  // double-linked list
01262   SILS    *next;  // double-linked list
01263 
01264   //  version 2.0 additions
01265 
01266   float   freq;
01267 } SILS;
01268 
01269 typedef struct SComm
01270 {
01271   char    airportKey[10];
01272 
01273   char    name[20];
01274   int   type;
01275   float   freq[5];
01276   SPosition pos;
01277 
01278   SComm   *prev;  // double-linked list
01279   SComm   *next;  // double-linked list
01280 } SComm;
01281 
01282 typedef struct SWaypoint
01283 {
01284   char    name[26];
01285   char    colocated;  // 0 or 1
01286   int   type;
01287   int   usage;
01288   float   bearingToNavaid;
01289   float   distanceToNavaid;
01290   SPosition pos;
01291   char    navaid[10];
01292 
01293   SWaypoint *prev;
01294   SWaypoint *next;
01295 } SWaypoint;
01296 
01297 typedef struct SRunwayEnd
01298 {
01299   char    id[4];        // painted end marking
01300   float   trueHeading;      // in degrees
01301   float   magneticHeading;    // in degrees
01302   int   markings;     // numbers only, PIR, STOL, etc.
01303   SPosition pos;        // lat/lon position of center of runway end
01304   int   thresholdCrossingHeight;  // in feet
01305   int   displacedThreshold;   // in feet
01306   int   rvr;        // touchdown, midfield, rollout
01307   char    rvv;        // 0..1
01308   char    edgeLights;     // 0..1
01309   char    endLights;      // 0..1
01310   char    centerlineLights;   // 0..1
01311   char    touchdownLights;    // 0..1
01312   char    alignLights;      // 0..1
01313   char    thresholdLights;    // 0..1
01314   char    sequenceFlashing;   // 0..1
01315   int   numLightSystems;    // 0..1
01316   int   lightSystems[8];    // 0..1
01317   char    edgeLightIntensity;   // 0..1
01318   int   glideslopeType;     // 0..1
01319   int   glideslopePlacement;    // 0..1
01320   int   glideslopeConfiguration;  // 0..1
01321 
01322   SILS    *glideslope;      // associated GS
01323   SILS    *localizer;     // associated LOC
01324 } SRunwayEnd;
01325 
01326 typedef struct SRunway
01327 {
01328   char    airportKey[10];
01329 
01330   float   length;     // in feet
01331   float   width;      // in feet
01332   int   surfaceType;    // surface material (asphalt, concrete, etc.)
01333   int   surfaceCondition; // condition (good, fair, poor)
01334   char    pavementType;   // rigid or flexible
01335   int   pcn;      // pavement classification number (FAA)
01336   int   subgradeStrength; // high, medium, low, very low
01337   int   tirePressure;   // high, medium, low, very low
01338   char    closed;     // 0..1
01339   char    pcl;      // 0..1
01340   char    pattern;    // left or right
01341   float   elevation;    // in feet
01342 
01343   SRunwayEnd  base;     // base end data
01344   SRunwayEnd  recip;      // reciprocal end data
01345 
01346   SRunway   *prev;      // double-linked list
01347   SRunway   *next;      // double-linked list
01348 } SRunway;
01349 
01350 typedef struct SAirport
01351 {
01352   char    airportKey[10];
01353   char    faaID[5];
01354   char    icaoID[5];
01355   int   type;
01356   char    name[40];
01357   char    country[3];
01358   char    state[3];
01359   char    county[40];
01360   char    city[40];
01361   float   elevation;
01362   int   ownership;
01363   int   usage;
01364   float   magneticVariation;
01365   float   trafficAltitude;
01366   char    fssAvailable;   // 0..1
01367   char    notamAvailable;   // 0..1
01368   char    atcAvailable;   // 0..1
01369   char    segmentedCircle;  // 0..1
01370   char    landingFeesCharged; // 0..1
01371   char    jointUseAirport;  // 0..1
01372   char    militaryLandingRights;  // 0..1
01373   char    customsEntryPoint;  // 0..1
01374   int   fuelTypes;
01375   int   frameService;
01376   int   engineService;
01377   int   bottledOxygen;
01378   int   bulkOxygen;
01379   int   beaconLensColor;
01380   int   basedAircraft;
01381   int   annualCommercialOps;
01382   int   annualGeneralAvOps;
01383   int   annualMilitaryOps;
01384   int   attendanceFlags;
01385   int   lightingFlags;
01386   SPosition pos;
01387       
01388   SRunway   *runways;   // list of runways
01389   SComm   *comms;     // list of radio comms
01390     
01391   SAirport  *prev;      // double-linked list
01392   SAirport  *next;      // double-linked list
01393 } SAirport;
01394 
01395 typedef struct SGeneric
01396 {
01397   void  *data;
01398 
01399   SGeneric  *prev;
01400   SGeneric  *next;
01401 } SGeneric;
01402 
01403 typedef struct SWeatherInfo
01404 {
01405   //
01406   //  weather data
01407   //
01408 
01409   double  visibility;   // in nautical miles (10.0 = 10 nautical miles)
01410   int surfaceTemp;    // degrees F
01411   int dewPointTemp;   // degrees F
01412   double  altimeter;    // inches Hg
01413   int windSpeed;    // knots
01414   int gustSpeed;    // knots
01415   int windHeading;    // degrees
01416   char  windFluctuates;   // 0=no fluctuation, 1=fluctuates
01417   int precipIntensity;  // valid values are:
01418           //  2=Light
01419           //  4=Medium
01420           //  8=Heavy (Thunderstorms if precipType is rain)
01421   int precipType;   // valid values are:
01422           //  0x2000=Rain (8192 decimal)
01423           //  0x4000=Snow (16384 decimal)
01424 
01425   //
01426   //  cloud layers
01427   //
01428 
01429   int layer1Active;   // 0 if no cloud layer, 1 if active
01430   int layer1Altitude;   // in feet
01431   int layer1Type;   // valid values are:
01432           //  2=Few
01433           //  3=Scattered
01434           //  4=Broken
01435           //  5=Overcast
01436           //  6=Fog
01437   int layer1Height;   // in feet
01438 
01439   int layer2Active;   // 0 if no cloud layer, 1 if active
01440   int layer2Altitude;   // in feet
01441   int layer2Type;   // valid values are:
01442           //  2=Few
01443           //  3=Scattered
01444           //  4=Broken
01445           //  5=Overcast
01446           //  6=Fog
01447   int layer2Height;   // in feet
01448 
01449   int layer3Active;   // 0 if no cloud layer, 1 if active
01450   int layer3Altitude;   // in feet
01451   int layer3Type;   // valid values are:
01452           //  2=Few
01453           //  3=Scattered
01454           //  4=Broken
01455           //  5=Overcast
01456           //  6=Fog
01457   int layer3Height;   // in feet
01458 } SWeatherInfo;
01459 
01460 typedef struct SWindsAloft
01461 {
01462   int windHeading;    // in degrees
01463   int windSpeed;    // in knots
01464   int gustSpeed;    // in knots
01465   char  windFluctuates;   // non-zero if TRUE, zero if FALSE
01466 } SWindsAloft;
01467 
01468 //
01469 // This structure represents a calendar date, with field definitions as follows:
01470 //  month = 1..12, for January..December
01471 //  day   = 1..31, for the calendar date in each month
01472 //  year  = Gregorian year (positive is AD)
01473 //
01474 typedef struct SDate
01475 {
01476   unsigned int  month;
01477   unsigned int  day;
01478   unsigned int  year;
01479 } SDate;
01480 
01481 //
01482 // This structure represents a time of day, with field definitions as follows:
01483 //  hour  = number of whole hours since midnight
01484 //  minute  = number of whole minutes since the start of the last hour
01485 //  second  = number of seconds since the start of the last minute
01486 //  msecs = number of milliseconds since the start of the last second
01487 //
01488 typedef struct STime
01489 {
01490   unsigned int  hour;
01491   unsigned int  minute;
01492   unsigned int  second;
01493   unsigned int  msecs;
01494 } STime;
01495 
01496 //
01497 // This structure simply combines the SDate and STime structs into a single
01498 //   entity for convenience
01499 //
01500 typedef struct SDateTime
01501 {
01502   SDate date;
01503   STime time;
01504 } SDateTime;
01505 
01506 //
01507 // The following structure represents a date/time difference.  Note that since
01508 //   all fields are unsigned, this can only represent a positive difference
01509 //   in time.
01510 //
01511 typedef struct SDateTimeDelta
01512 {
01513   unsigned int  dYears;
01514   unsigned int  dMonths;
01515   unsigned int  dDays;
01516   unsigned int  dHours;
01517   unsigned int  dMinutes;
01518   unsigned int  dSeconds;
01519   unsigned int  dMillisecs;
01520 } SDateTimeDelta;
01521 
01522 
01523 typedef struct SFPAirport
01524 {
01525   char    landHere; // 0 or 1
01526   SDateTimeDelta  layover;
01527   SAirport  data;
01528   char    depRunwayEnd[4];  // runway end ID
01529   char    arrRunwayEnd[4];  // runway end ID
01530 } SFPAirport;
01531 
01532 typedef struct SFPNavaid
01533 {
01534   SNavaid   data;
01535 } SFPNavaid;
01536 
01537 typedef struct SFPWaypoint
01538 {
01539   SWaypoint data;
01540 } SFPWaypoint;
01541 
01542 typedef struct SFPUser
01543 {
01544   char  name[40];
01545 } SFPUser;
01546 
01547 typedef struct SFPEntry
01548 {
01549   EFPEntryType  type;
01550   SPosition pos;
01551   SDateTime arrival;
01552   SDateTime departure;
01553   SDateTimeDelta  extend;
01554   float   distance;
01555   float   bearing;
01556   float   speed;
01557   float   altitude;
01558   float   effectiveSpeed;
01559   float   effectiveAltitude;
01560   float   magneticVariation;
01561 
01562   union   // 'type' determines which struct is populated
01563   {
01564     SFPAirport  a;
01565     SFPNavaid n;
01566     SFPWaypoint w;
01567     SFPUser   u;
01568   };
01569 } SFPEntry;
01570 
01571 typedef struct SFlightPlan
01572 {
01573   SFPEntry  entry;
01574   SFlightPlan *prev;
01575   SFlightPlan *next;
01576 } SFlightPlan;
01577 
01578 
01579 
01580 
01582 //
01583 // Basic object classes
01584 //
01585 
01586 //
01587 // 
01588 //
01589 typedef unsigned long Tag;
01590 
01591 //
01592 // CObject is the most basic object type and is the root ancestor of all
01593 //   object classes
01594 //
01595 class CObject {
01596 public:
01597 
01598 protected:
01599 };
01600 
01601 
01602 //
01603 // A CStreamObject is one which can be loaded and saved from/to a stream
01604 //   file.  See Stream\Stream.h for more details and the API for stream
01605 //   files
01606 //
01607 class CStreamObject : public CObject {
01608 public:
01609   virtual ~CStreamObject (void) {}
01610 
01611   virtual int   Read (SStream *stream, Tag tag) {return TAG_IGNORED;}
01612   virtual void  ReadFinished (void) {}
01613   virtual void  Write (SStream *stream) {}
01614 };
01615 
01616 
01617 /*
01618  * Stream functions implemented in Stream.cpp
01619  */
01620 
01621 int   DoesFileExist(const char *filename, EFileSearchLocation where);
01622 int   DoesPodVolumeExist(const char *volumeName);
01623 
01624 int   OpenStream(SStream *stream);
01625 int   OpenStream(PFS *pfs, SStream *stream);
01626 void  CloseStream(SStream *stream);
01627 
01628 //void  WriteTo(SDLLObject *object, SStream *stream);
01629 void  ReadFrom(CStreamObject *object, SStream *stream);
01630 void  SkipObject(SStream *stream);
01631 void  AdvanceToTag(unsigned int tag, SStream *stream);
01632 
01633 void  ReadInt (int *value, SStream *stream);
01634 void  ReadUInt (unsigned int *value, SStream *stream);
01635 void  ReadFloat (float *value, SStream *stream);
01636 void  ReadDouble (double *value, SStream *stream);
01637 void  ReadString (char *value, int maxLength, SStream *stream);
01638 void  ReadVector (SVector *value, SStream *stream);
01639 void  ReadLatLon (SPosition *value, SStream *stream);
01640 void  ReadPosition (SPosition *value, SStream *stream);
01641 void  ReadTime (SDateTime *value, SStream *stream);
01642 void  ReadTimeDelta (SDateTimeDelta *value, SStream *stream);
01643 void  ReadMessage (SMessage *message, SStream *stream);
01644 void  ReadTag (Tag *tag, SStream *stream);
01645 
01646 //void  WriteInt(int *value, SStream *stream);
01647 //void  WriteUInt(unsigned int *value, SStream *stream);
01648 //void  WriteFloat(float *value, SStream *stream);
01649 //void  WriteDouble(double *value, SStream *stream);
01650 //void  WriteString(char *value, SStream *stream);
01651 //void  WriteVector(SVector *value, SStream *stream);
01652 //void  WritePosition(SPosition *value, SStream *stream);
01653 //void  WriteTime(SDateTime *value, SStream *stream);
01654 //void  WriteTimeDelta(SDateTimeDelta *value, SStream *stream);
01655 //void  WriteMessage(SMessage *message, SStream *stream);
01656 
01657 
01658 /*
01659  * Database functions
01660  */
01661 
01662 //
01663 // These functions all return a linked list of the appropriate database entity.
01664 //   The calling application is responsible for calling APIFree... when done
01665 //   with the list
01666 //
01667 int GetLocalNavaids(SNavaid **navaids);
01668 int GetLocalILS(SILS **ils);
01669 int GetLocalComms(SComm **comms);
01670 int GetLocalCenters(SComm **comms);
01671 int GetLocalAirports(SAirport **airports);
01672 int GetLocalWaypoints(SWaypoint **waypoints);
01673 
01674 //
01675 // The calling application is responsible for allocating the database structs passed
01676 //   in to the following functions
01677 //
01678 int GetNearestNavaid(SPosition *pos, int navType, SNavaid *navaid, float *distanceInFeet);
01679 int GetNearestNavaidByFreq(SPosition *pos, int navType, float freq, SNavaid *navaid, float *distanceInFeet);
01680 int GetNearestILS(SPosition *pos, float freq, SILS *ils, float *distanceInFeet);
01681 int GetNearestComm(SPosition *pos, float freq, SComm *comm, float *distanceInFeet);
01682 int GetNearestAirportComm(SPosition *pos, float freq, SComm *comm, float *distanceInFeet);
01683 int GetNearestCenterComm(SPosition *pos, float freq, SComm *comm, float *distanceInFeet);
01684 int GetNearestAirport(SPosition *pos, SAirport *airport, float *distanceInFeet);
01685 int InAirportRegion(SPosition *pos, float *distanceInFeet);
01686 int GetAirport(char *airportKey, SAirport *airport);
01687 
01688 //
01689 // The following functions implement specific database searches, returning a linked
01690 //   list of database records which match the specified key value.
01691 //
01692 int SearchNavaidsByID(char *id, int navType, SNavaid **navaids);
01693 int SearchNavaidsByName(char *name, int navType, SNavaid **navaids);
01694 int SearchNavaidsByGlobeTile (int x, int z, SNavaid **navaids);
01695 int SearchWaypointsByName(char *name, SWaypoint **waypoints);
01696 int SearchAirportsByFAA(char *faaID, SAirport **airports);
01697 int SearchAirportsByICAO(char *icaoID, SAirport **airports);
01698 int SearchAirportsByName(char *name, SAirport **airports);
01699 int SearchILS(char *airportKey, char *runwayEndID, SILS **ils);
01700 int SearchDatabase(char *db, char *index, char *key, SGeneric **list);
01701 
01702 //
01703 // These functions should be called in order to free lists of database object returned
01704 //   by the above functions.
01705 //
01706 void FreeNavaid(SNavaid *navaids);
01707 void FreeILS(SILS *ils);
01708 void FreeWaypoint(SWaypoint *waypoint);
01709 void FreeComm(SComm *comm);
01710 void FreeAirport(SAirport *airport);
01711 void FreeGeneric(SGeneric *list);
01712 
01713 
01714 //
01715 //  INI functions
01716 //
01717 
01718 void LoadIniSettings (void);
01719 void UnloadIniSettings (void);
01720 void SaveIniSettings (void);
01721 void GetIniVar (const char *section, const char *varname, int *value);
01722 void GetIniFloat (const char *section, const char *varname, float *value);
01723 void GetIniString (const char *section, const char *varname, char *strvar, int maxLength);
01724 void SetIniVar (const char *section, const char *varname, int value);
01725 void SetIniFloat (const char *section, const char *varname, float value);
01726 void SetIniString (const char *section, const char *varname, char *strvar);
01727 
01728 
01729 //
01730 // Function type declaration for key map callbacks
01731 //
01732 typedef bool(*KeyCallbackPtr) (int keyid, int code, int modifiers);
01733 
01734 
01746 class GTFO {
01747 private:
01748   char      m_file[1024];
01749   int       m_line;
01750 
01751 public:
01752   GTFO (const char* file = NULL, int line = 0) : m_line(line) { strcpy (m_file, file); }
01753   void operator() (const char *fmt = NULL, ...);
01754 };
01755 
01756 #define gtfo (GTFO(__FILE__, __LINE__))
01757 
01758 
01767 class WARN {
01768 private:
01769   char      m_file[1024];
01770   int       m_line;
01771 
01772 public:
01773   WARN (const char* file = NULL, int line = 0) : m_line(line) { strcpy (m_file, file); }
01774   void operator() (const char *fmt = NULL, ...);
01775 };
01776 
01777 #define WARNINGLOG (WARN(__FILE__, __LINE__))
01778 
01779 
01787 class DEBUG {
01788 private:
01789   char      m_file[1024];
01790   int       m_line;
01791 
01792 public:
01793   DEBUG (const char* file = NULL, int line = 0) : m_line(line) { strcpy (m_file, file); }
01794   void operator() (const char *fmt = NULL, ...);
01795 };
01796 
01797 #define DEBUGLOG (DEBUG(__FILE__, __LINE__))
01798 
01799 
01800 
01801 #if defined(_DEBUG) && defined(HAVE_CRTDBG_H)
01802 //
01803 // Declare global for memory state debugging, defined in Main.cpp
01804 //
01805 extern _CrtMemState memoryState;
01806 #endif // _DEBUG
01807 
01808 
01809 
01810 #endif  // FLYLEGACY_H
01811 
SourceForge.net Logo Documentation generated by doxygen