allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc) (11/27/89)
Posting-number: Volume 9, Issue 16 Submitted-by: tynor@prism.gatech.edu (Steve Tynor) Archive-name: fplan/part06 #This is part 6/6 of FPLAN #!/bin/sh # shar: Shell Archiver (v1.22) # Packed Mon Nov 20 19:28:42 EST 1989 by gaffa!tynor # from directory /files/home/users/tynor/src/fplan # # Run the following text with /bin/sh to create: # fp_lex.l # fp_yacc.y # sv_draw.c # dosbuild.bat # mystring.h # wp_info.h # reverse.c # version.h # echo "x - extracting fp_lex.l (Text)" sed 's/^X//' << 'SHAR_EOF' > fp_lex.l && X%{ X/* X * $Id: fp_lex.l,v 2.4 89/11/14 20:28:11 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X X#include "fp_tok.h" X Xstatic char rcsid[] = "$Id: fp_lex.l,v 2.4 89/11/14 20:28:11 tynor Exp $"; X Xdouble yydval; Xextern double atof(); X X%} X X%% X X\#.*$ ; /* comment */ X\" { int i; X for (i = 0; (yytext[i] = input()) != '\"'; i++) { X if (yytext[i] == '\"') X break; X if (yytext[i] == '\\') X yytext[i] = input(); X } X yytext[i] = '\0'; X return TOK_STRING; X }; Xalt return TOK_ALT; Xvia return TOK_VIA; Xfrom return TOK_FROM; Xto return TOK_TO; Xmi return TOK_MI; Xnm return TOK_NM; Xmph return TOK_MPH; Xkts return TOK_KTS; Xnav return TOK_NAV; Xwind return TOK_WIND; Xtas return TOK_TAS; Xfuel_amt return TOK_FUEL_AMT; Xfuel_rate return TOK_FUEL_RATE; Xfuel_used return TOK_FUEL_USED; X X\@ return TOK_ATSIGN; X X[\+\-]?[0-9]+\.[0-9]+ { yydval = atof (yytext); X return TOK_REAL; X }; X[\+\-]?[0-9]+ { yydval = atof (yytext); X return TOK_INTEGER; X }; X\_?[0-9A-Za-z]+ return TOK_SYMBOL; /* use a leading _ for personal waypoints */ X\:\= return TOK_ASSIGN; X\; return TOK_SEMICOLON; X\, return TOK_COMMA; X\( return TOK_LPAREN; X\) return TOK_RPAREN; X[ \t\n] ; /* ignore whitespace */ X. ; /* ignore anything else too */ X%% SHAR_EOF chmod 0444 fp_lex.l || echo "restore of fp_lex.l fails" echo "x - extracting fp_yacc.y (Text)" sed 's/^X//' << 'SHAR_EOF' > fp_yacc.y && X%{ X/* X * $Id: fp_yacc.y,v 2.5 89/11/11 19:17:00 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X X#include "wp_info.h" X#include "mystring.h" X Xstatic char rcsid[] = "$Id: fp_yacc.y,v 2.5 89/11/11 19:17:00 tynor Exp $"; X Xextern double degrees_mins_2_decimal (); X Xextern double yydval; Xextern char yytext[]; X Xtypedef union { X int ival; X double dval; X char *sval; X WAYPOINT_KIND kval; X} YYSTYPE; X X%} X X%type <kval> waypoint_kind X /* X * %type <dval> radial X */ X%type <dval> number X%type <dval> latitude X%type <dval> longitude X%type <dval> heading X%type <dval> distance X%type <dval> speed X%type <sval> optional_string X%type <sval> desig X X%token TOK_SEMICOLON X%token TOK_ASSIGN X%token TOK_VIA X%token TOK_ALT X%token TOK_FROM X%token TOK_TO X%token TOK_MI X%token TOK_NM X%token TOK_MPH X%token TOK_KTS X%token TOK_COMMA X%token TOK_REAL X%token TOK_INTEGER X%token TOK_NAV X%token TOK_WIND X%token TOK_TAS X%token TOK_LPAREN X%token TOK_RPAREN X%token TOK_FUEL_AMT X%token TOK_FUEL_RATE X%token TOK_FUEL_USED X%token TOK_STRING X%token TOK_SYMBOL X%token TOK_ATSIGN X X%start fplan X X%% X Xfplan : directives X ; X Xdirectives : /* empty */ X | directives directive X ; X Xdirective : named_waypoint TOK_SEMICOLON X | inc_waypoint TOK_SEMICOLON X /* | int_waypoint TOK_SEMICOLON */ X | lat_waypoint TOK_SEMICOLON X | nav_fix TOK_SEMICOLON X | true_airspeed TOK_SEMICOLON X | wind TOK_SEMICOLON X | fuel_amt TOK_SEMICOLON X | fuel_rate TOK_SEMICOLON X | fuel_used TOK_SEMICOLON X | flight_altitude TOK_SEMICOLON X ; X Xnamed_waypoint : waypoint_kind desig X {add_named_waypoint ($1, $2);} X Xinc_waypoint : waypoint_kind distance X optional_string optional_string optional_string X {add_inc_waypoint ($2, $3, $4, $5);} X ; X X/* X *int_waypoint : waypoint_kind desig TOK_COMMA radial TOK_COMMA desig X * TOK_COMMA radial optional_string X * {add_int_waypoint ($1, $2, $4, $6, $8, $9);} X * ; X */ X Xlat_waypoint : waypoint_kind latitude TOK_COMMA longitude X optional_string optional_string optional_string X {add_lat_waypoint ($1, $2, $4, $5, $6, $7);} X ; X Xwaypoint_kind : TOK_FROM {$$ = WP_FROM;} X | TOK_VIA {$$ = WP_VIA;} X | TOK_TO {$$ = WP_TO;} X ; X Xnav_fix : TOK_NAV TOK_LPAREN number TOK_RPAREN desig X {set_xfix ((int) $3, $5);} X ; X Xtrue_airspeed : TOK_TAS speed {set_tas ($2);} X ; X Xwind : TOK_WIND heading TOK_ATSIGN speed X {set_wind ($2, $4);} X ; X Xfuel_amt : TOK_FUEL_AMT number {set_fuel_amt ($2);} X ; X Xfuel_rate : TOK_FUEL_RATE number {set_fuel_rate ($2);} X ; X Xfuel_used : TOK_FUEL_USED number {set_extra_fuel_burn ($2);} X ; X Xflight_altitude : TOK_ALT number {set_altitude ($2);} X ; X Xlatitude : TOK_REAL {$$ = degrees_mins_2_decimal (yydval);} X ; X Xlongitude : TOK_REAL {$$ = degrees_mins_2_decimal (yydval);} X ; X Xoptional_string : /* empty */ {$$ = (char*) 0;} X | TOK_COMMA TOK_STRING {$$ = strdup (yytext);} X ; X Xdesig : TOK_SYMBOL {$$ = strdup (yytext);} X ; X Xnumber : TOK_REAL {$$ = yydval;} X | TOK_INTEGER {$$ = yydval;} X ; X Xdistance : number TOK_MI {$$ = $1 / MI_PER_NM;} X | number {$$ = $1;} X | number TOK_NM {$$ = $1;} X ; X Xspeed : number TOK_MPH {$$ = $1 / MI_PER_NM;} X | number {$$ = $1;} X | number TOK_KTS {$$ = $1;} X ; X X/* X *radial : heading X * ; X */ X Xheading : number {$$ = $1;} X ; SHAR_EOF chmod 0444 fp_yacc.y || echo "restore of fp_yacc.y fails" echo "x - extracting sv_draw.c (Text)" sed 's/^X//' << 'SHAR_EOF' > sv_draw.c && X/* X * $Id: sv_draw.c,v 1.3 89/11/11 19:43:17 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X X#ifdef GFX_SUNVIEW X X/* X *============================================================================== X * Graphics routines for Sunview X *============================================================================== X */ X X#include "wp_info.h" X#include <suntool/sunview.h> X#include <suntool/canvas.h> X#include <suntool/panel.h> X#include <suntool/scrollbar.h> X Xstatic char rcsid[] = "$Id: sv_draw.c,v 1.3 89/11/11 19:43:17 tynor Exp $"; X Xstatic double min_lat; Xstatic double max_lat; Xstatic double min_long; Xstatic double max_long; X X#define PIX_OR (PIX_SRC | PIX_DST) /* Rasterop */ X XPixfont *font; X#define DEFAULT_SCALE 100 /* pixels per degree */ X#define SV_MARGIN 40 X XPanel panel; XFrame frame; XCanvas canvas; Xstatic BOOLEAN brief_mode; Xint scale = DEFAULT_SCALE; XBOOLEAN first_time; XScrollbar vert_scroll, horiz_scroll; X X/*----------------------------------------------------------------------------*/ Xstatic void sv_draw_pt (canvas, x, y) X Canvas canvas; X int x, y; X{ X pw_writebackground (canvas_pixwin (canvas), x-1, y-1, 3, 3, X PIX_NOT (PIX_SRC)); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_draw_str (canvas, x, y, str) X Canvas canvas; X int x, y; X char *str; X{ X pw_text (canvas_pixwin (canvas), x+3, y+3, PIX_OR, font, str); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_project (latitude, longitude, x, y) Xdouble latitude, longitude; Xint *x, *y; X{ X /* X * NOTE: this is "Tynor's naive projection system" - ignores the curvature X * of the earth: X */ X X *x = SV_MARGIN + (int) ((max_long - longitude) * (double) scale); X *y = SV_MARGIN + (int) ((max_lat - latitude ) * (double) scale); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_draw_db (canvas, db) X Canvas canvas; X DATABASE_INFO *db; X{ X int x, y; X X sv_project (db->latitude, db->longitude, &x, &y); X sv_draw_pt (canvas, x, y); X sv_draw_str (canvas, x, y, X (db->mode != WP_INCREMENTAL) ? db->desig : db->name); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_draw_leg (canvas, db1, db2) X Canvas canvas; X DATABASE_INFO *db1, *db2; X{ X int x1, y1, x2, y2; X X sv_project (db1->latitude, db1->longitude, &x1, &y1); X sv_project (db2->latitude, db2->longitude, &x2, &y2); X X pw_vector (canvas_pixwin (canvas), x1, y1, x2, y2, PIX_OR, 1); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_scroll_to (db) X DATABASE_INFO *db; X{ X int x, y; X X sv_project (db->latitude, db->longitude, &x, &y); X X /* X * try to center the waypoint on the canvas X */ X scrollbar_scroll_to (horiz_scroll, X MIN ((int)window_get (canvas, CANVAS_WIDTH, 0), X MAX (0, X x - (int)window_get (canvas, X WIN_WIDTH, 0) / 2))); X scrollbar_scroll_to (vert_scroll, X MIN ((int)window_get (canvas, CANVAS_HEIGHT, 0), X MAX (0, X y - (int)window_get (canvas, X WIN_HEIGHT, 0) / 2))); X} X X/*----------------------------------------------------------------------------*/ Xstatic void sv_redraw () X{ X int width, height, i; X X#define MIN_WIDTH 400 X#define XTRA_WIDTH 30 /* frame needs to be this much bigger than the canvas */ X#define XTRA_HEIGHT 100 /* frame needs to be this much bigger than the canvas */ X X width = ABS ((int) ((max_long - min_long) * (double) scale)) + X 2 * SV_MARGIN; X height = ABS ((int) ((max_lat - min_lat) * (double) scale)) + X 2 * SV_MARGIN; X X width = MAX (width, MIN_WIDTH); X X window_set (canvas, CANVAS_HEIGHT, height, 0); X window_set (canvas, CANVAS_WIDTH, width, 0); X X pw_writebackground (canvas_pixwin (canvas), 0, 0, 3000, 3000, PIX_SRC); X X for (i = 0; i < num_cached; i++) { X sv_draw_db (canvas, cache[i]); X } X X for (i = 0; i < num_waypoints - 1; i++) { X sv_draw_leg (canvas, waypoints[i].db, waypoints[i+1].db); X if ((!brief_mode) && (waypoints[i].db->mode == WP_INCREMENTAL)) X sv_draw_db (canvas, waypoints[i].db); X } X X if (first_time) { X Pixrect *screen = pr_open ("/dev/fb"); X X window_set (frame, WIN_WIDTH, MIN (screen->pr_size.x, X XTRA_WIDTH + width), 0); X window_set (frame, WIN_HEIGHT, MIN (screen->pr_size.y, X XTRA_HEIGHT + height), 0); X first_time = FALSE; X sv_scroll_to (waypoints[0].db); X } X} X X/*----------------------------------------------------------------------------*/ Xsv_quit_event_proc (item, event) X Panel_item item; X Event *event; X{ X window_destroy (frame); X} X X/*----------------------------------------------------------------------------*/ Xsv_brief_event_proc (item, event) X Panel_item item; X Event *event; X{ X brief_mode = (int) panel_get (item, PANEL_VALUE, 0); X sv_redraw (); X} X X/*----------------------------------------------------------------------------*/ Xsv_tofirst_event_proc (item, event) X Panel_item item; X Event *event; X{ X sv_scroll_to (waypoints[0].db); X} X X/*----------------------------------------------------------------------------*/ Xsv_tolast_event_proc (item, event) X Panel_item item; X Event *event; X{ X sv_scroll_to (waypoints[num_waypoints-1].db); X} X X/*----------------------------------------------------------------------------*/ Xsv_scale_event_proc (item, event) X Panel_item item; X Event *event; X{ X scale = (int) panel_get (item, PANEL_VALUE, 0); X sv_redraw (); X} X X/*----------------------------------------------------------------------------*/ Xvoid sv_draw (brief) X BOOLEAN brief; X{ X X min_max_lat_long (&min_lat, &max_lat, &min_long, &max_long); X X brief_mode = brief; X font = pf_open ("/usr/lib/fonts/fixedwidthfonts/screen.r.7"); X X frame = window_create (NULL, FRAME, X FRAME_LABEL, "FPLAN", X 0); X X panel = window_create (frame, PANEL, X 0); X X panel_create_item (panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, sv_quit_event_proc, X PANEL_LABEL_IMAGE, panel_button_image (panel, X "Quit", 0, 0), X PANEL_ITEM_X, ATTR_COL (0), X PANEL_ITEM_Y, ATTR_ROW (0), X 0); X X panel_create_item (panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, sv_tofirst_event_proc, X PANEL_LABEL_IMAGE, panel_button_image (panel, X "To First", 0, 0), X 0); X X panel_create_item (panel, PANEL_BUTTON, X PANEL_NOTIFY_PROC, sv_tolast_event_proc, X PANEL_LABEL_IMAGE, panel_button_image (panel, X "To Last", 0, 0), X 0); X X panel_create_item (panel, PANEL_CYCLE, X PANEL_LABEL_STRING, "Brief:", X PANEL_CHOICE_STRINGS, "NO", "YES", 0, X PANEL_NOTIFY_PROC, sv_brief_event_proc, X PANEL_VALUE, brief_mode, X 0); X X panel_create_item (panel, PANEL_SLIDER, X PANEL_LABEL_STRING, "Scale:", X PANEL_VALUE, scale, X PANEL_MIN_VALUE, 5, X PANEL_MAX_VALUE, 400, X PANEL_SLIDER_WIDTH, 200, X PANEL_NOTIFY_PROC, sv_scale_event_proc, X 0); X X window_fit_height (panel); X X horiz_scroll = scrollbar_create(0); X vert_scroll = scrollbar_create(0); X X canvas = window_create (frame, CANVAS, X CANVAS_AUTO_SHRINK, FALSE, X WIN_VERTICAL_SCROLLBAR, vert_scroll, X WIN_HORIZONTAL_SCROLLBAR, horiz_scroll, X CANVAS_WIDTH, 1, X CANVAS_HEIGHT, 1, X 0); X scrollbar_set (horiz_scroll, SCROLL_ADVANCED_MODE, 1, 0); X scrollbar_set (vert_scroll, SCROLL_ADVANCED_MODE, 1, 0); X X first_time = TRUE; X sv_redraw (); X window_main_loop (frame); X} X X#endif /* GFX_SUNVIEW */ SHAR_EOF chmod 0444 sv_draw.c || echo "restore of sv_draw.c fails" echo "x - extracting dosbuild.bat (Text)" sed 's/^X//' << 'SHAR_EOF' > dosbuild.bat && X: $Id: dosbuild.bat,v 1.5 89/11/19 16:14:19 tynor Exp $ X:---------------------------------------------------------------------------- X: FPLAN - Flight Planner X: Steve Tynor X: tynor@prism.gatech.edu X: X: This program is in the public domain. Permission to copy, X: distribute, modify this program is hearby given as long as this header X: remains. If you redistribute this program after modifying it, please X: document your changes so that I do not take the blame (or credit) for X: those changes. If you fix bugs or add features, please send me a X: patch so that I can keep the 'official' version up-to-date. X: X: Bug reports are welcome and I'll make an attempt to fix those X: that are reported. X: X: USE AT YOUR OWN RISK! I assume no responsibility for any X: errors in this program, its database or documentation. I will make an X: effort to fix bugs, but if you crash and burn because, for example, X: fuel estimates in this program were inaccurate, it's your own fault X: for trusting somebody else's code! Remember, as PIC, it's _your_ X: responsibility to do complete preflight planning. Use this program as X: a flight planning aid, but verify its results before using them. X: --------------------------------------------------------------------------- X X: --------------------------------------------------------------------------- X: This is a MessyDOS batch file to compile FPLAN - X: X: Uncomment the approriate lines to compile with whatever compiler you have. X: --------------------------------------------------------------------------- X X: --------------------------------------------------------------------------- X: Zortech: Xztc -c -ml -w -p fp_lex.c Xztc -c -ml -w -p fp_yacc.c Xztc -c -ml -w -p add.c Xztc -c -ml -w -p compute.c Xztc -c -ml -w -p db.c Xztc -c -ml -w -p main.c Xztc -c -ml -w -p misc.c Xztc -c -ml -w -p output.c Xztc -c -ml -w -p strings.c Xztc -c -ml -w -p reverse.c Xztc -ml -L -ofplan.exe fp_lex.obj fp_yacc.obj add.obj compute.obj db.obj main.obj misc.obj output.obj strings.obj reverse.obj X X: --------------------------------------------------------------------------- X: Microsoft: X:cl /c /AL fp_lex.c X:cl /c /AL fp_yacc.c X:cl /c /AL add.c X:cl /c /AL compute.c X:cl /c /AL db.c X:cl /c /AL main.c X:cl /c /AL misc.c X:cl /c /AL output.c X:cl /c /AL strings.c X:cl /c /AL reverse.c X:cl /Fefplan.exe fp_lex fp_yacc add compute db main misc output strings reverse /link X SHAR_EOF chmod 0444 dosbuild.bat || echo "restore of dosbuild.bat fails" echo "x - extracting mystring.h (Text)" sed 's/^X//' << 'SHAR_EOF' > mystring.h && X/* X * $Id: mystring.h,v 1.2 89/11/11 19:17:04 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X X/* X * define a couple of functions that are in SunOS string(3), but apparently X * aren't 'standard' - so much for the wonder of the portability of the X * standard C library... X * X * The only thing we count on is strlen(). X */ X Xextern char *strdup(); Xextern char *strtok(); Xextern char *index(); Xextern int strlen(); SHAR_EOF chmod 0444 mystring.h || echo "restore of mystring.h fails" echo "x - extracting wp_info.h (Text)" sed 's/^X//' << 'SHAR_EOF' > wp_info.h && X/* X * $Id: wp_info.h,v 2.7 89/11/05 17:34:38 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X Xtypedef int BOOLEAN; X#define FALSE ((BOOLEAN)0) X#define TRUE ((BOOLEAN)1) X X#define MI_PER_NM 1.3242928862 /* statute miles per natutical miles */ X Xtypedef enum {WP_FROM, WP_VIA, WP_TO} WAYPOINT_KIND; X Xtypedef enum {WP_VOR, WP_AIRPORT, WP_NAMED_INTERSECTION, X WP_INTERSECTION, WP_INCREMENTAL, WP_LAT_LONG, X WP_NDB, WP_DME, WP_TAC, WP_ILS, WP_WPT, WP_LOM, WP_LMM, WP_UNK X } WAYPOINT_MODE; X X#define MAX_NUM_WAYPOINTS 100 X#define MAX_NUM_VOR_FIXES 6 X Xtypedef enum {FROM, TO} FROM_TO; X Xtypedef struct { X BOOLEAN valid; X double value; X} OPTIONAL_DBL; X Xtypedef struct { X WAYPOINT_MODE mode; X double latitude; /* stored in decimal - not degrees/min/sec */ X double longitude; X char *desig; X char *city; X char *name; X char *comment; X OPTIONAL_DBL freq; X OPTIONAL_DBL altitude; X double mag_variation; X union { X /* when wp_mode == WP_INCREMENTAL */ X double dist_since_last_wp; X } u; X} DATABASE_INFO; X Xtypedef struct { X BOOLEAN valid; X DATABASE_INFO *db; X double heading; X double distance; X FROM_TO from_to; X} VOR_FIX; X X/* X * NOTE: ALL VALUES STORED INTERNALLY IN KNOTS AND NAUTICAL MILES X */ Xtypedef struct { X WAYPOINT_KIND wp_kind; X DATABASE_INFO *db; X OPTIONAL_DBL tc; X OPTIONAL_DBL mc; X OPTIONAL_DBL mh; X OPTIONAL_DBL wind_speed; X OPTIONAL_DBL wind_direction; X OPTIONAL_DBL dist_leg; X OPTIONAL_DBL dist; X OPTIONAL_DBL dist_remain; X OPTIONAL_DBL eta_leg; X OPTIONAL_DBL eta; X BOOLEAN refuel; X OPTIONAL_DBL extra_fuel_burn; X OPTIONAL_DBL fuel_amt; X OPTIONAL_DBL fuel_rate; X OPTIONAL_DBL fuel_leg; X OPTIONAL_DBL altitude; X OPTIONAL_DBL tas; X OPTIONAL_DBL egs; X VOR_FIX vor_fix [MAX_NUM_VOR_FIXES]; X} WAYPOINT_INFO; X X XWAYPOINT_INFO waypoints[MAX_NUM_WAYPOINTS]; X Xint num_waypoints; X X#define MAX(x,y) (((x) > (y)) ? (x) : (y)) X#define MIN(x,y) (((x) < (y)) ? (x) : (y)) X#define ABS(x) (((x) < 0) ? -(x) : (x)) X X X#define PI ((double) 3.14159265358979323846) X X#define DEG2RAD(x) ((x)*PI/180.0) X#define RAD2DEG(x) ((x)*180.0/PI) X Xint max_nav; X X#define CACHE_SIZE MAX_NUM_WAYPOINTS XDATABASE_INFO *cache [CACHE_SIZE]; Xint num_cached; X SHAR_EOF chmod 0444 wp_info.h || echo "restore of wp_info.h fails" echo "x - extracting reverse.c (Text)" sed 's/^X//' << 'SHAR_EOF' > reverse.c && X/* X * $Id: reverse.c,v 1.2 89/11/05 11:23:58 tynor Exp $ X *---------------------------------------------------------------------------- X * FPLAN - Flight Planner X * Steve Tynor X * tynor@prism.gatech.edu X * X * This program is in the public domain. Permission to copy, X * distribute, modify this program is hearby given as long as this header X * remains. If you redistribute this program after modifying it, please X * document your changes so that I do not take the blame (or credit) for X * those changes. If you fix bugs or add features, please send me a X * patch so that I can keep the 'official' version up-to-date. X * X * Bug reports are welcome and I'll make an attempt to fix those X * that are reported. X * X * USE AT YOUR OWN RISK! I assume no responsibility for any X * errors in this program, its database or documentation. I will make an X * effort to fix bugs, but if you crash and burn because, for example, X * fuel estimates in this program were inaccurate, it's your own fault X * for trusting somebody else's code! Remember, as PIC, it's _your_ X * responsibility to do complete preflight planning. Use this program as X * a flight planning aid, but verify its results before using them. X *---------------------------------------------------------------------------- X */ X Xstatic char rcsid[] = "$Id: reverse.c,v 1.2 89/11/05 11:23:58 tynor Exp $"; X X#include <stdio.h> X#include "wp_info.h" X Xextern void distance_and_heading (); X X/*----------------------------------------------------------------------------*/ Xstatic void reverse_incrementals () X{ X int i; X int last_non_inc = num_waypoints - 1; X double h; X X for (i = num_waypoints - 2; i >= 0; i--) X if (waypoints[i].db->mode == WP_INCREMENTAL) X distance_and_heading (waypoints[i].db->latitude, X waypoints[i].db->longitude, X waypoints[last_non_inc].db->latitude, X waypoints[last_non_inc].db->longitude, X &waypoints[i].db->u.dist_since_last_wp, &h); X else X last_non_inc = i; X} X X/*----------------------------------------------------------------------------*/ Xvoid print_reverse () X{ X int i, j; X X reverse_incrementals (); X X for (i = num_waypoints - 1; i >= 0; i--) { X for (j = 1; j <= max_nav; j++) { X if ((i == num_waypoints - 1) || X (strcmp (waypoints[i].vor_fix[j].db->desig, X waypoints[i+1].vor_fix[j].db->desig))) { X printf ("nav(%d) %s;\n", j+1, waypoints[i].vor_fix[j].db->desig); X } X } X if (waypoints[i].wp_kind == WP_TO) X printf ("\nfrom %s;\n", waypoints[i].db->desig); X else if (waypoints[i].wp_kind == WP_FROM) X printf ("to %s;\n", waypoints[i].db->desig); X else if (waypoints[i].db->mode != WP_INCREMENTAL) X printf ("\tvia %s;\n", waypoints[i].db->desig); X else { X printf ("\t\tvia %1.0lf", waypoints[i].db->u.dist_since_last_wp); X if (waypoints[i].db->name) X printf (", \"%s\"", waypoints[i].db->name); X if (waypoints[i].db->city) X printf (", \"%s\"", waypoints[i].db->city); X if (waypoints[i].db->comment) X printf (", \"%s\"", waypoints[i].db->comment); X printf (";\n"); X } X } X} X X SHAR_EOF chmod 0444 reverse.c || echo "restore of reverse.c fails" echo "x - extracting version.h (Text)" sed 's/^X//' << 'SHAR_EOF' > version.h && X#define VERSION "1.1" SHAR_EOF chmod 0444 version.h || echo "restore of version.h fails" exit 0