home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume9 / fplan / part06 < prev    next >
Text File  |  1989-11-26  |  29KB  |  944 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v09i016: FPLAN 6/6
  3. from: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  4. Reply-To: tynor@prism.gatech.edu (Steve Tynor)
  5.  
  6. Posting-number: Volume 9, Issue 16
  7. Submitted-by: tynor@prism.gatech.edu (Steve Tynor)
  8. Archive-name: fplan/part06
  9.  
  10. #This is part 6/6 of FPLAN
  11. #!/bin/sh
  12. # shar:    Shell Archiver  (v1.22)
  13. #    Packed Mon Nov 20 19:28:42 EST 1989 by gaffa!tynor
  14. #    from directory /files/home/users/tynor/src/fplan
  15. #
  16. #    Run the following text with /bin/sh to create:
  17. #      fp_lex.l
  18. #      fp_yacc.y
  19. #      sv_draw.c
  20. #      dosbuild.bat
  21. #      mystring.h
  22. #      wp_info.h
  23. #      reverse.c
  24. #      version.h
  25. #
  26. echo "x - extracting fp_lex.l (Text)"
  27. sed 's/^X//' << 'SHAR_EOF' > fp_lex.l &&
  28. X%{
  29. X/*
  30. X * $Id: fp_lex.l,v 2.4 89/11/14 20:28:11 tynor Exp $
  31. X *----------------------------------------------------------------------------
  32. X *    FPLAN - Flight Planner
  33. X *    Steve Tynor
  34. X *    tynor@prism.gatech.edu
  35. X *
  36. X *    This program is in the public domain. Permission to copy,
  37. X * distribute, modify this program is hearby given as long as this header
  38. X * remains. If you redistribute this program after modifying it, please
  39. X * document your changes so that I do not take the blame (or credit) for
  40. X * those changes.  If you fix bugs or add features, please send me a
  41. X * patch so that I can keep the 'official' version up-to-date.
  42. X *
  43. X *    Bug reports are welcome and I'll make an attempt to fix those
  44. X * that are reported.
  45. X *
  46. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  47. X * errors in this program, its database or documentation. I will make an
  48. X * effort to fix bugs, but if you crash and burn because, for example,
  49. X * fuel estimates in this program were inaccurate, it's your own fault
  50. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  51. X * responsibility to do complete preflight planning. Use this program as
  52. X * a flight planning aid, but verify its results before using them.
  53. X *----------------------------------------------------------------------------
  54. X */
  55. X    
  56. X#include "fp_tok.h"
  57. X
  58. Xstatic char rcsid[] = "$Id: fp_lex.l,v 2.4 89/11/14 20:28:11 tynor Exp $";
  59. X
  60. Xdouble yydval;
  61. Xextern double atof();
  62. X
  63. X%}
  64. X
  65. X%%
  66. X
  67. X\#.*$        ;    /* comment */
  68. X\"        { int i;
  69. X          for (i = 0; (yytext[i] = input()) != '\"'; i++) {
  70. X             if (yytext[i] == '\"')
  71. X            break;
  72. X             if (yytext[i] == '\\')
  73. X            yytext[i] = input();
  74. X          }
  75. X          yytext[i] = '\0';
  76. X          return TOK_STRING;
  77. X        };
  78. Xalt        return TOK_ALT;
  79. Xvia        return TOK_VIA;
  80. Xfrom        return TOK_FROM;
  81. Xto        return TOK_TO;
  82. Xmi        return TOK_MI;
  83. Xnm        return TOK_NM;
  84. Xmph        return TOK_MPH;
  85. Xkts        return TOK_KTS;
  86. Xnav        return TOK_NAV;
  87. Xwind        return TOK_WIND;
  88. Xtas        return TOK_TAS;
  89. Xfuel_amt    return TOK_FUEL_AMT;
  90. Xfuel_rate    return TOK_FUEL_RATE;
  91. Xfuel_used    return TOK_FUEL_USED;
  92. X
  93. X\@        return TOK_ATSIGN;
  94. X
  95. X[\+\-]?[0-9]+\.[0-9]+    { yydval = atof (yytext);
  96. X          return TOK_REAL;
  97. X        };
  98. X[\+\-]?[0-9]+   { yydval = atof (yytext);
  99. X          return TOK_INTEGER;
  100. X        };
  101. X\_?[0-9A-Za-z]+ return TOK_SYMBOL; /* use a leading _ for personal waypoints */
  102. X\:\=        return TOK_ASSIGN;
  103. X\;        return TOK_SEMICOLON;
  104. X\,        return TOK_COMMA;
  105. X\(        return TOK_LPAREN;
  106. X\)        return TOK_RPAREN;
  107. X[ \t\n]           ;    /* ignore whitespace */
  108. X.        ;    /* ignore anything else too */
  109. X%%
  110. SHAR_EOF
  111. chmod 0444 fp_lex.l || echo "restore of fp_lex.l fails"
  112. echo "x - extracting fp_yacc.y (Text)"
  113. sed 's/^X//' << 'SHAR_EOF' > fp_yacc.y &&
  114. X%{
  115. X/*
  116. X * $Id: fp_yacc.y,v 2.5 89/11/11 19:17:00 tynor Exp $
  117. X *----------------------------------------------------------------------------
  118. X *    FPLAN - Flight Planner
  119. X *    Steve Tynor
  120. X *    tynor@prism.gatech.edu
  121. X *
  122. X *    This program is in the public domain. Permission to copy,
  123. X * distribute, modify this program is hearby given as long as this header
  124. X * remains. If you redistribute this program after modifying it, please
  125. X * document your changes so that I do not take the blame (or credit) for
  126. X * those changes.  If you fix bugs or add features, please send me a
  127. X * patch so that I can keep the 'official' version up-to-date.
  128. X *
  129. X *    Bug reports are welcome and I'll make an attempt to fix those
  130. X * that are reported.
  131. X *
  132. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  133. X * errors in this program, its database or documentation. I will make an
  134. X * effort to fix bugs, but if you crash and burn because, for example,
  135. X * fuel estimates in this program were inaccurate, it's your own fault
  136. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  137. X * responsibility to do complete preflight planning. Use this program as
  138. X * a flight planning aid, but verify its results before using them.
  139. X *----------------------------------------------------------------------------
  140. X */
  141. X
  142. X#include "wp_info.h"
  143. X#include "mystring.h"
  144. X
  145. Xstatic char rcsid[] = "$Id: fp_yacc.y,v 2.5 89/11/11 19:17:00 tynor Exp $";
  146. X
  147. Xextern double degrees_mins_2_decimal ();
  148. X
  149. Xextern double yydval;
  150. Xextern char   yytext[];
  151. X
  152. Xtypedef union {
  153. X   int            ival;
  154. X   double        dval;
  155. X   char            *sval;
  156. X   WAYPOINT_KIND    kval;
  157. X} YYSTYPE;
  158. X
  159. X%}
  160. X
  161. X%type <kval> waypoint_kind
  162. X   /*
  163. X    * %type <dval> radial
  164. X    */
  165. X%type <dval> number
  166. X%type <dval> latitude
  167. X%type <dval> longitude
  168. X%type <dval> heading
  169. X%type <dval> distance 
  170. X%type <dval> speed
  171. X%type <sval> optional_string
  172. X%type <sval> desig
  173. X
  174. X%token TOK_SEMICOLON
  175. X%token TOK_ASSIGN
  176. X%token TOK_VIA
  177. X%token TOK_ALT
  178. X%token TOK_FROM
  179. X%token TOK_TO
  180. X%token TOK_MI
  181. X%token TOK_NM
  182. X%token TOK_MPH
  183. X%token TOK_KTS
  184. X%token TOK_COMMA
  185. X%token TOK_REAL
  186. X%token TOK_INTEGER
  187. X%token TOK_NAV
  188. X%token TOK_WIND
  189. X%token TOK_TAS
  190. X%token TOK_LPAREN
  191. X%token TOK_RPAREN
  192. X%token TOK_FUEL_AMT
  193. X%token TOK_FUEL_RATE
  194. X%token TOK_FUEL_USED
  195. X%token TOK_STRING
  196. X%token TOK_SYMBOL
  197. X%token TOK_ATSIGN
  198. X
  199. X%start fplan
  200. X
  201. X%%
  202. X
  203. Xfplan        : directives
  204. X        ;
  205. X
  206. Xdirectives     : /* empty */
  207. X        | directives directive
  208. X        ;
  209. X
  210. Xdirective    : named_waypoint    TOK_SEMICOLON
  211. X           | inc_waypoint        TOK_SEMICOLON
  212. X           /* | int_waypoint    TOK_SEMICOLON */
  213. X           | lat_waypoint        TOK_SEMICOLON
  214. X        | nav_fix        TOK_SEMICOLON
  215. X        | true_airspeed        TOK_SEMICOLON
  216. X        | wind            TOK_SEMICOLON
  217. X        | fuel_amt        TOK_SEMICOLON
  218. X        | fuel_rate        TOK_SEMICOLON
  219. X        | fuel_used        TOK_SEMICOLON
  220. X           | flight_altitude    TOK_SEMICOLON
  221. X        ;
  222. X
  223. Xnamed_waypoint    : waypoint_kind desig 
  224. X            {add_named_waypoint ($1, $2);}
  225. X
  226. Xinc_waypoint     : waypoint_kind distance 
  227. X             optional_string optional_string optional_string
  228. X            {add_inc_waypoint ($2, $3, $4, $5);}
  229. X        ;
  230. X
  231. X/*
  232. X *int_waypoint    : waypoint_kind desig TOK_COMMA radial TOK_COMMA desig
  233. X *          TOK_COMMA radial optional_string
  234. X *            {add_int_waypoint ($1, $2, $4, $6, $8, $9);}
  235. X *        ;
  236. X */
  237. X
  238. Xlat_waypoint    : waypoint_kind latitude TOK_COMMA longitude 
  239. X             optional_string optional_string optional_string
  240. X          {add_lat_waypoint ($1, $2, $4, $5, $6, $7);}
  241. X        ;
  242. X
  243. Xwaypoint_kind    : TOK_FROM {$$ = WP_FROM;}
  244. X        | TOK_VIA  {$$ = WP_VIA;}
  245. X        | TOK_TO   {$$ = WP_TO;}
  246. X        ;
  247. X
  248. Xnav_fix        : TOK_NAV TOK_LPAREN number TOK_RPAREN  desig
  249. X          {set_xfix ((int) $3, $5);}
  250. X        ;
  251. X
  252. Xtrue_airspeed    : TOK_TAS  speed {set_tas ($2);}
  253. X        ;
  254. X
  255. Xwind        : TOK_WIND  heading TOK_ATSIGN speed
  256. X          {set_wind ($2, $4);}
  257. X        ;
  258. X
  259. Xfuel_amt    : TOK_FUEL_AMT  number {set_fuel_amt ($2);}
  260. X        ;
  261. X
  262. Xfuel_rate    : TOK_FUEL_RATE  number {set_fuel_rate ($2);}
  263. X        ;
  264. X
  265. Xfuel_used    : TOK_FUEL_USED  number {set_extra_fuel_burn ($2);}
  266. X        ;
  267. X
  268. Xflight_altitude    : TOK_ALT number {set_altitude ($2);}
  269. X        ;
  270. X
  271. Xlatitude    : TOK_REAL    {$$ = degrees_mins_2_decimal (yydval);}
  272. X        ;
  273. X
  274. Xlongitude    : TOK_REAL    {$$ = degrees_mins_2_decimal (yydval);}
  275. X        ;
  276. X
  277. Xoptional_string    : /* empty */            {$$ = (char*) 0;}
  278. X        | TOK_COMMA TOK_STRING    {$$ = strdup (yytext);}
  279. X        ;
  280. X
  281. Xdesig        : TOK_SYMBOL    {$$ = strdup (yytext);}
  282. X        ;
  283. X
  284. Xnumber        : TOK_REAL    {$$ = yydval;}
  285. X        | TOK_INTEGER    {$$ = yydval;}
  286. X        ;
  287. X
  288. Xdistance    : number TOK_MI {$$ = $1 / MI_PER_NM;}
  289. X           | number     {$$ = $1;}
  290. X           | number TOK_NM {$$ = $1;}
  291. X        ;
  292. X
  293. Xspeed        : number TOK_MPH {$$ = $1 / MI_PER_NM;}
  294. X           | number      {$$ = $1;}
  295. X           | number TOK_KTS {$$ = $1;}
  296. X        ;
  297. X
  298. X/*
  299. X *radial           : heading
  300. X *        ;
  301. X */
  302. X
  303. Xheading        : number    {$$ = $1;}
  304. X        ;
  305. SHAR_EOF
  306. chmod 0444 fp_yacc.y || echo "restore of fp_yacc.y fails"
  307. echo "x - extracting sv_draw.c (Text)"
  308. sed 's/^X//' << 'SHAR_EOF' > sv_draw.c &&
  309. X/*
  310. X * $Id: sv_draw.c,v 1.3 89/11/11 19:43:17 tynor Exp $
  311. X *----------------------------------------------------------------------------
  312. X *    FPLAN - Flight Planner
  313. X *    Steve Tynor
  314. X *    tynor@prism.gatech.edu
  315. X *
  316. X *    This program is in the public domain. Permission to copy,
  317. X * distribute, modify this program is hearby given as long as this header
  318. X * remains. If you redistribute this program after modifying it, please
  319. X * document your changes so that I do not take the blame (or credit) for
  320. X * those changes.  If you fix bugs or add features, please send me a
  321. X * patch so that I can keep the 'official' version up-to-date.
  322. X *
  323. X *    Bug reports are welcome and I'll make an attempt to fix those
  324. X * that are reported.
  325. X *
  326. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  327. X * errors in this program, its database or documentation. I will make an
  328. X * effort to fix bugs, but if you crash and burn because, for example,
  329. X * fuel estimates in this program were inaccurate, it's your own fault
  330. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  331. X * responsibility to do complete preflight planning. Use this program as
  332. X * a flight planning aid, but verify its results before using them.
  333. X *----------------------------------------------------------------------------
  334. X */
  335. X
  336. X#ifdef GFX_SUNVIEW 
  337. X
  338. X/*
  339. X *==============================================================================
  340. X * Graphics routines for Sunview
  341. X *==============================================================================
  342. X */
  343. X
  344. X#include "wp_info.h"
  345. X#include <suntool/sunview.h>
  346. X#include <suntool/canvas.h>
  347. X#include <suntool/panel.h>
  348. X#include <suntool/scrollbar.h>
  349. X
  350. Xstatic char rcsid[] = "$Id: sv_draw.c,v 1.3 89/11/11 19:43:17 tynor Exp $";
  351. X
  352. Xstatic double min_lat;
  353. Xstatic double max_lat;
  354. Xstatic double min_long;
  355. Xstatic double max_long;
  356. X
  357. X#define PIX_OR (PIX_SRC | PIX_DST) /* Rasterop */
  358. X
  359. XPixfont *font;
  360. X#define DEFAULT_SCALE 100 /* pixels per degree */
  361. X#define SV_MARGIN 40
  362. X
  363. XPanel panel;
  364. XFrame frame;
  365. XCanvas canvas;
  366. Xstatic BOOLEAN brief_mode;
  367. Xint scale = DEFAULT_SCALE;
  368. XBOOLEAN first_time;
  369. XScrollbar vert_scroll, horiz_scroll;
  370. X
  371. X/*----------------------------------------------------------------------------*/
  372. Xstatic void sv_draw_pt (canvas, x, y)
  373. X     Canvas canvas;
  374. X     int x, y;
  375. X{
  376. X   pw_writebackground (canvas_pixwin (canvas), x-1, y-1, 3, 3,
  377. X               PIX_NOT (PIX_SRC));
  378. X}
  379. X
  380. X/*----------------------------------------------------------------------------*/
  381. Xstatic void sv_draw_str (canvas, x, y, str)
  382. X     Canvas canvas;
  383. X     int x, y;
  384. X     char *str;
  385. X{
  386. X   pw_text (canvas_pixwin (canvas), x+3, y+3, PIX_OR, font, str);
  387. X}
  388. X
  389. X/*----------------------------------------------------------------------------*/
  390. Xstatic void sv_project (latitude, longitude, x, y)
  391. Xdouble latitude, longitude;
  392. Xint *x, *y;
  393. X{
  394. X   /*
  395. X    * NOTE: this is "Tynor's naive projection system" - ignores the curvature
  396. X    * of the earth:
  397. X    */
  398. X
  399. X   *x = SV_MARGIN + (int) ((max_long - longitude) * (double) scale);
  400. X   *y = SV_MARGIN + (int) ((max_lat - latitude  ) * (double) scale);
  401. X}
  402. X
  403. X/*----------------------------------------------------------------------------*/
  404. Xstatic void sv_draw_db (canvas, db)
  405. X     Canvas canvas;
  406. X     DATABASE_INFO *db;
  407. X{
  408. X   int x, y;
  409. X
  410. X   sv_project (db->latitude, db->longitude, &x, &y);
  411. X   sv_draw_pt (canvas, x, y);
  412. X   sv_draw_str (canvas, x, y,
  413. X         (db->mode != WP_INCREMENTAL) ? db->desig : db->name);
  414. X}
  415. X
  416. X/*----------------------------------------------------------------------------*/
  417. Xstatic void sv_draw_leg (canvas, db1, db2)
  418. X     Canvas canvas;
  419. X     DATABASE_INFO *db1, *db2;
  420. X{
  421. X   int x1, y1, x2, y2;
  422. X
  423. X   sv_project (db1->latitude, db1->longitude, &x1, &y1);
  424. X   sv_project (db2->latitude, db2->longitude, &x2, &y2);
  425. X
  426. X   pw_vector (canvas_pixwin (canvas), x1, y1, x2, y2, PIX_OR, 1);
  427. X}
  428. X
  429. X/*----------------------------------------------------------------------------*/
  430. Xstatic void sv_scroll_to (db)
  431. X     DATABASE_INFO *db;
  432. X{
  433. X   int x, y;
  434. X
  435. X   sv_project (db->latitude, db->longitude, &x, &y);
  436. X
  437. X   /*
  438. X    * try to center the waypoint on the canvas
  439. X    */
  440. X   scrollbar_scroll_to (horiz_scroll, 
  441. X            MIN ((int)window_get (canvas, CANVAS_WIDTH, 0),
  442. X                 MAX (0, 
  443. X                  x - (int)window_get (canvas, 
  444. X                               WIN_WIDTH, 0) / 2)));
  445. X   scrollbar_scroll_to (vert_scroll, 
  446. X            MIN ((int)window_get (canvas, CANVAS_HEIGHT, 0),
  447. X                 MAX (0, 
  448. X                  y - (int)window_get (canvas, 
  449. X                               WIN_HEIGHT, 0) / 2)));
  450. X}
  451. X
  452. X/*----------------------------------------------------------------------------*/
  453. Xstatic void sv_redraw ()
  454. X{
  455. X   int width, height, i;
  456. X
  457. X#define MIN_WIDTH 400
  458. X#define XTRA_WIDTH   30 /* frame needs to be this much bigger than the canvas */
  459. X#define XTRA_HEIGHT 100 /* frame needs to be this much bigger than the canvas */
  460. X
  461. X   width  = ABS ((int) ((max_long - min_long) * (double) scale)) + 
  462. X      2 * SV_MARGIN;
  463. X   height = ABS ((int) ((max_lat - min_lat)   * (double) scale)) +
  464. X      2 * SV_MARGIN;
  465. X
  466. X   width = MAX (width, MIN_WIDTH);
  467. X
  468. X   window_set (canvas, CANVAS_HEIGHT, height, 0);
  469. X   window_set (canvas, CANVAS_WIDTH, width, 0);
  470. X
  471. X   pw_writebackground (canvas_pixwin (canvas), 0, 0, 3000, 3000, PIX_SRC);
  472. X
  473. X   for (i = 0; i < num_cached; i++) {
  474. X      sv_draw_db (canvas, cache[i]);
  475. X   }
  476. X
  477. X   for (i = 0; i < num_waypoints - 1; i++) {
  478. X      sv_draw_leg (canvas, waypoints[i].db, waypoints[i+1].db);
  479. X      if ((!brief_mode) && (waypoints[i].db->mode == WP_INCREMENTAL))
  480. X     sv_draw_db (canvas, waypoints[i].db);
  481. X   }
  482. X
  483. X   if (first_time) {
  484. X      Pixrect *screen = pr_open ("/dev/fb");
  485. X
  486. X      window_set (frame, WIN_WIDTH, MIN (screen->pr_size.x, 
  487. X                     XTRA_WIDTH + width), 0);
  488. X      window_set (frame, WIN_HEIGHT, MIN (screen->pr_size.y,
  489. X                      XTRA_HEIGHT + height), 0);
  490. X      first_time = FALSE;
  491. X      sv_scroll_to (waypoints[0].db);
  492. X   }
  493. X}
  494. X
  495. X/*----------------------------------------------------------------------------*/
  496. Xsv_quit_event_proc (item, event)
  497. X     Panel_item item;
  498. X     Event *event;
  499. X{
  500. X   window_destroy (frame);
  501. X}
  502. X
  503. X/*----------------------------------------------------------------------------*/
  504. Xsv_brief_event_proc (item, event)
  505. X     Panel_item item;
  506. X     Event *event;
  507. X{
  508. X   brief_mode = (int) panel_get (item, PANEL_VALUE, 0);
  509. X   sv_redraw ();
  510. X}
  511. X
  512. X/*----------------------------------------------------------------------------*/
  513. Xsv_tofirst_event_proc (item, event)
  514. X     Panel_item item;
  515. X     Event *event;
  516. X{
  517. X   sv_scroll_to (waypoints[0].db);
  518. X}
  519. X
  520. X/*----------------------------------------------------------------------------*/
  521. Xsv_tolast_event_proc (item, event)
  522. X     Panel_item item;
  523. X     Event *event;
  524. X{
  525. X   sv_scroll_to (waypoints[num_waypoints-1].db);
  526. X}
  527. X
  528. X/*----------------------------------------------------------------------------*/
  529. Xsv_scale_event_proc (item, event)
  530. X     Panel_item item;
  531. X     Event *event;
  532. X{
  533. X   scale = (int) panel_get (item, PANEL_VALUE, 0);
  534. X   sv_redraw ();
  535. X}
  536. X
  537. X/*----------------------------------------------------------------------------*/
  538. Xvoid sv_draw (brief)
  539. X     BOOLEAN brief;
  540. X{
  541. X
  542. X   min_max_lat_long (&min_lat, &max_lat, &min_long, &max_long);
  543. X
  544. X   brief_mode = brief;
  545. X   font = pf_open ("/usr/lib/fonts/fixedwidthfonts/screen.r.7");
  546. X
  547. X   frame = window_create (NULL, FRAME,
  548. X              FRAME_LABEL, "FPLAN",
  549. X              0);
  550. X
  551. X   panel = window_create (frame, PANEL,
  552. X              0);
  553. X   
  554. X   panel_create_item (panel, PANEL_BUTTON,
  555. X              PANEL_NOTIFY_PROC, sv_quit_event_proc,
  556. X              PANEL_LABEL_IMAGE, panel_button_image (panel,
  557. X                                 "Quit", 0, 0),
  558. X              PANEL_ITEM_X,       ATTR_COL (0),
  559. X              PANEL_ITEM_Y,       ATTR_ROW (0),
  560. X              0);
  561. X
  562. X   panel_create_item (panel, PANEL_BUTTON,
  563. X              PANEL_NOTIFY_PROC, sv_tofirst_event_proc,
  564. X              PANEL_LABEL_IMAGE, panel_button_image (panel,
  565. X                                 "To First", 0, 0),
  566. X              0);
  567. X
  568. X   panel_create_item (panel, PANEL_BUTTON,
  569. X              PANEL_NOTIFY_PROC, sv_tolast_event_proc,
  570. X              PANEL_LABEL_IMAGE, panel_button_image (panel,
  571. X                                 "To Last", 0, 0),
  572. X              0);
  573. X
  574. X   panel_create_item (panel, PANEL_CYCLE,
  575. X              PANEL_LABEL_STRING,   "Brief:",
  576. X              PANEL_CHOICE_STRINGS, "NO", "YES", 0,
  577. X              PANEL_NOTIFY_PROC,    sv_brief_event_proc,
  578. X              PANEL_VALUE,         brief_mode,
  579. X              0);        
  580. X
  581. X   panel_create_item (panel, PANEL_SLIDER,
  582. X              PANEL_LABEL_STRING, "Scale:",
  583. X              PANEL_VALUE,        scale,
  584. X              PANEL_MIN_VALUE,        5,
  585. X              PANEL_MAX_VALUE,        400,
  586. X              PANEL_SLIDER_WIDTH,  200,
  587. X              PANEL_NOTIFY_PROC,   sv_scale_event_proc,
  588. X              0);        
  589. X
  590. X   window_fit_height (panel);
  591. X
  592. X   horiz_scroll = scrollbar_create(0);
  593. X   vert_scroll = scrollbar_create(0);
  594. X
  595. X   canvas = window_create (frame, CANVAS,
  596. X               CANVAS_AUTO_SHRINK, FALSE,
  597. X               WIN_VERTICAL_SCROLLBAR, vert_scroll,
  598. X               WIN_HORIZONTAL_SCROLLBAR, horiz_scroll,
  599. X               CANVAS_WIDTH, 1,
  600. X               CANVAS_HEIGHT, 1,
  601. X               0);
  602. X   scrollbar_set (horiz_scroll, SCROLL_ADVANCED_MODE, 1, 0);
  603. X   scrollbar_set (vert_scroll, SCROLL_ADVANCED_MODE, 1, 0);
  604. X
  605. X   first_time = TRUE;
  606. X   sv_redraw ();
  607. X   window_main_loop (frame);
  608. X}
  609. X
  610. X#endif /* GFX_SUNVIEW */
  611. SHAR_EOF
  612. chmod 0444 sv_draw.c || echo "restore of sv_draw.c fails"
  613. echo "x - extracting dosbuild.bat (Text)"
  614. sed 's/^X//' << 'SHAR_EOF' > dosbuild.bat &&
  615. X: $Id: dosbuild.bat,v 1.5 89/11/19 16:14:19 tynor Exp $
  616. X:----------------------------------------------------------------------------
  617. X:    FPLAN - Flight Planner
  618. X:    Steve Tynor
  619. X:    tynor@prism.gatech.edu
  620. X:
  621. X:    This program is in the public domain. Permission to copy,
  622. X: distribute, modify this program is hearby given as long as this header
  623. X: remains. If you redistribute this program after modifying it, please
  624. X: document your changes so that I do not take the blame (or credit) for
  625. X: those changes.  If you fix bugs or add features, please send me a
  626. X: patch so that I can keep the 'official' version up-to-date.
  627. X:
  628. X:    Bug reports are welcome and I'll make an attempt to fix those
  629. X: that are reported.
  630. X:
  631. X:     USE AT YOUR OWN RISK! I assume no responsibility for any
  632. X: errors in this program, its database or documentation. I will make an
  633. X: effort to fix bugs, but if you crash and burn because, for example,
  634. X: fuel estimates in this program were inaccurate, it's your own fault
  635. X: for trusting somebody else's code! Remember, as PIC, it's _your_
  636. X: responsibility to do complete preflight planning. Use this program as
  637. X: a flight planning aid, but verify its results before using them.
  638. X: ---------------------------------------------------------------------------
  639. X
  640. X: ---------------------------------------------------------------------------
  641. X: This is a MessyDOS batch file to compile FPLAN - 
  642. X:
  643. X: Uncomment the approriate lines to compile with whatever compiler you have.
  644. X: ---------------------------------------------------------------------------
  645. X
  646. X: ---------------------------------------------------------------------------
  647. X: Zortech:
  648. Xztc -c -ml -w -p fp_lex.c
  649. Xztc -c -ml -w -p fp_yacc.c
  650. Xztc -c -ml -w -p add.c
  651. Xztc -c -ml -w -p compute.c
  652. Xztc -c -ml -w -p db.c
  653. Xztc -c -ml -w -p main.c
  654. Xztc -c -ml -w -p misc.c
  655. Xztc -c -ml -w -p output.c
  656. Xztc -c -ml -w -p strings.c
  657. Xztc -c -ml -w -p reverse.c
  658. 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
  659. X
  660. X: ---------------------------------------------------------------------------
  661. X: Microsoft:
  662. X:cl /c /AL fp_lex.c
  663. X:cl /c /AL fp_yacc.c
  664. X:cl /c /AL add.c
  665. X:cl /c /AL compute.c
  666. X:cl /c /AL db.c
  667. X:cl /c /AL main.c
  668. X:cl /c /AL misc.c
  669. X:cl /c /AL output.c
  670. X:cl /c /AL strings.c
  671. X:cl /c /AL reverse.c
  672. X:cl /Fefplan.exe fp_lex fp_yacc add compute db main misc output strings reverse /link
  673. X
  674. SHAR_EOF
  675. chmod 0444 dosbuild.bat || echo "restore of dosbuild.bat fails"
  676. echo "x - extracting mystring.h (Text)"
  677. sed 's/^X//' << 'SHAR_EOF' > mystring.h &&
  678. X/*
  679. X * $Id: mystring.h,v 1.2 89/11/11 19:17:04 tynor Exp $
  680. X *----------------------------------------------------------------------------
  681. X *    FPLAN - Flight Planner
  682. X *    Steve Tynor
  683. X *    tynor@prism.gatech.edu
  684. X *
  685. X *    This program is in the public domain. Permission to copy,
  686. X * distribute, modify this program is hearby given as long as this header
  687. X * remains. If you redistribute this program after modifying it, please
  688. X * document your changes so that I do not take the blame (or credit) for
  689. X * those changes.  If you fix bugs or add features, please send me a
  690. X * patch so that I can keep the 'official' version up-to-date.
  691. X *
  692. X *    Bug reports are welcome and I'll make an attempt to fix those
  693. X * that are reported.
  694. X *
  695. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  696. X * errors in this program, its database or documentation. I will make an
  697. X * effort to fix bugs, but if you crash and burn because, for example,
  698. X * fuel estimates in this program were inaccurate, it's your own fault
  699. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  700. X * responsibility to do complete preflight planning. Use this program as
  701. X * a flight planning aid, but verify its results before using them.
  702. X *----------------------------------------------------------------------------
  703. X */
  704. X
  705. X/*
  706. X * define a couple of functions that are in SunOS string(3), but apparently
  707. X * aren't 'standard' - so much for the wonder of the portability of the 
  708. X * standard C library...
  709. X *
  710. X * The only thing we count on is strlen().
  711. X */
  712. X
  713. Xextern char *strdup();
  714. Xextern char *strtok();
  715. Xextern char *index();
  716. Xextern int strlen();
  717. SHAR_EOF
  718. chmod 0444 mystring.h || echo "restore of mystring.h fails"
  719. echo "x - extracting wp_info.h (Text)"
  720. sed 's/^X//' << 'SHAR_EOF' > wp_info.h &&
  721. X/*
  722. X * $Id: wp_info.h,v 2.7 89/11/05 17:34:38 tynor Exp $
  723. X *----------------------------------------------------------------------------
  724. X *    FPLAN - Flight Planner
  725. X *    Steve Tynor
  726. X *    tynor@prism.gatech.edu
  727. X *
  728. X *    This program is in the public domain. Permission to copy,
  729. X * distribute, modify this program is hearby given as long as this header
  730. X * remains. If you redistribute this program after modifying it, please
  731. X * document your changes so that I do not take the blame (or credit) for
  732. X * those changes.  If you fix bugs or add features, please send me a
  733. X * patch so that I can keep the 'official' version up-to-date.
  734. X *
  735. X *    Bug reports are welcome and I'll make an attempt to fix those
  736. X * that are reported.
  737. X *
  738. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  739. X * errors in this program, its database or documentation. I will make an
  740. X * effort to fix bugs, but if you crash and burn because, for example,
  741. X * fuel estimates in this program were inaccurate, it's your own fault
  742. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  743. X * responsibility to do complete preflight planning. Use this program as
  744. X * a flight planning aid, but verify its results before using them.
  745. X *----------------------------------------------------------------------------
  746. X */
  747. X
  748. Xtypedef int BOOLEAN;
  749. X#define FALSE ((BOOLEAN)0)
  750. X#define TRUE  ((BOOLEAN)1)
  751. X
  752. X#define MI_PER_NM 1.3242928862    /* statute miles per natutical miles */
  753. X
  754. Xtypedef enum {WP_FROM, WP_VIA, WP_TO} WAYPOINT_KIND;
  755. X
  756. Xtypedef enum {WP_VOR, WP_AIRPORT, WP_NAMED_INTERSECTION, 
  757. X         WP_INTERSECTION, WP_INCREMENTAL, WP_LAT_LONG,
  758. X         WP_NDB, WP_DME, WP_TAC, WP_ILS, WP_WPT, WP_LOM, WP_LMM, WP_UNK
  759. X         } WAYPOINT_MODE;
  760. X
  761. X#define MAX_NUM_WAYPOINTS 100
  762. X#define MAX_NUM_VOR_FIXES 6
  763. X
  764. Xtypedef enum {FROM, TO} FROM_TO;
  765. X
  766. Xtypedef struct {
  767. X   BOOLEAN valid;
  768. X   double  value;
  769. X} OPTIONAL_DBL;
  770. X
  771. Xtypedef struct {
  772. X   WAYPOINT_MODE           mode;
  773. X   double        latitude;  /* stored in decimal - not degrees/min/sec */
  774. X   double        longitude;   
  775. X   char         *desig;
  776. X   char         *city;
  777. X   char         *name;
  778. X   char         *comment;
  779. X   OPTIONAL_DBL        freq;
  780. X   OPTIONAL_DBL        altitude;
  781. X   double        mag_variation;
  782. X   union {
  783. X      /* when wp_mode == WP_INCREMENTAL */
  784. X      double    dist_since_last_wp;
  785. X   } u;
  786. X} DATABASE_INFO;
  787. X
  788. Xtypedef struct {
  789. X   BOOLEAN valid;
  790. X   DATABASE_INFO *db;
  791. X   double  heading;
  792. X   double  distance;
  793. X   FROM_TO from_to;
  794. X} VOR_FIX;
  795. X
  796. X/*
  797. X * NOTE: ALL VALUES STORED INTERNALLY IN KNOTS AND NAUTICAL MILES
  798. X */
  799. Xtypedef struct {
  800. X   WAYPOINT_KIND           wp_kind;
  801. X   DATABASE_INFO    *db;
  802. X   OPTIONAL_DBL     tc;
  803. X   OPTIONAL_DBL     mc;
  804. X   OPTIONAL_DBL     mh;
  805. X   OPTIONAL_DBL     wind_speed; 
  806. X   OPTIONAL_DBL     wind_direction;
  807. X   OPTIONAL_DBL     dist_leg;
  808. X   OPTIONAL_DBL     dist;
  809. X   OPTIONAL_DBL     dist_remain;
  810. X   OPTIONAL_DBL     eta_leg;
  811. X   OPTIONAL_DBL     eta;
  812. X   BOOLEAN        refuel;
  813. X   OPTIONAL_DBL        extra_fuel_burn;
  814. X   OPTIONAL_DBL     fuel_amt;
  815. X   OPTIONAL_DBL     fuel_rate;
  816. X   OPTIONAL_DBL     fuel_leg;
  817. X   OPTIONAL_DBL     altitude;
  818. X   OPTIONAL_DBL     tas;
  819. X   OPTIONAL_DBL     egs;
  820. X   VOR_FIX        vor_fix [MAX_NUM_VOR_FIXES];
  821. X} WAYPOINT_INFO;
  822. X
  823. X
  824. XWAYPOINT_INFO waypoints[MAX_NUM_WAYPOINTS];
  825. X
  826. Xint num_waypoints;
  827. X
  828. X#define MAX(x,y) (((x) > (y)) ? (x) : (y))
  829. X#define MIN(x,y) (((x) < (y)) ? (x) : (y))
  830. X#define ABS(x) (((x) < 0) ? -(x) : (x))
  831. X
  832. X
  833. X#define PI ((double) 3.14159265358979323846)
  834. X
  835. X#define DEG2RAD(x) ((x)*PI/180.0)
  836. X#define RAD2DEG(x) ((x)*180.0/PI)
  837. X
  838. Xint max_nav;
  839. X
  840. X#define CACHE_SIZE MAX_NUM_WAYPOINTS
  841. XDATABASE_INFO *cache [CACHE_SIZE];
  842. Xint num_cached;
  843. X
  844. SHAR_EOF
  845. chmod 0444 wp_info.h || echo "restore of wp_info.h fails"
  846. echo "x - extracting reverse.c (Text)"
  847. sed 's/^X//' << 'SHAR_EOF' > reverse.c &&
  848. X/*
  849. X * $Id: reverse.c,v 1.2 89/11/05 11:23:58 tynor Exp $
  850. X *----------------------------------------------------------------------------
  851. X *    FPLAN - Flight Planner
  852. X *    Steve Tynor
  853. X *    tynor@prism.gatech.edu
  854. X *
  855. X *    This program is in the public domain. Permission to copy,
  856. X * distribute, modify this program is hearby given as long as this header
  857. X * remains. If you redistribute this program after modifying it, please
  858. X * document your changes so that I do not take the blame (or credit) for
  859. X * those changes.  If you fix bugs or add features, please send me a
  860. X * patch so that I can keep the 'official' version up-to-date.
  861. X *
  862. X *    Bug reports are welcome and I'll make an attempt to fix those
  863. X * that are reported.
  864. X *
  865. X *    USE AT YOUR OWN RISK! I assume no responsibility for any
  866. X * errors in this program, its database or documentation. I will make an
  867. X * effort to fix bugs, but if you crash and burn because, for example,
  868. X * fuel estimates in this program were inaccurate, it's your own fault
  869. X * for trusting somebody else's code! Remember, as PIC, it's _your_
  870. X * responsibility to do complete preflight planning. Use this program as
  871. X * a flight planning aid, but verify its results before using them.
  872. X *----------------------------------------------------------------------------
  873. X */
  874. X
  875. Xstatic char rcsid[] = "$Id: reverse.c,v 1.2 89/11/05 11:23:58 tynor Exp $";
  876. X
  877. X#include <stdio.h>
  878. X#include "wp_info.h"
  879. X
  880. Xextern void distance_and_heading ();
  881. X
  882. X/*----------------------------------------------------------------------------*/
  883. Xstatic void reverse_incrementals ()
  884. X{
  885. X   int i;
  886. X   int last_non_inc = num_waypoints - 1;
  887. X   double h;
  888. X
  889. X   for (i = num_waypoints - 2; i >= 0; i--)
  890. X      if (waypoints[i].db->mode == WP_INCREMENTAL)
  891. X     distance_and_heading (waypoints[i].db->latitude, 
  892. X                   waypoints[i].db->longitude,
  893. X                   waypoints[last_non_inc].db->latitude,
  894. X                   waypoints[last_non_inc].db->longitude,
  895. X                   &waypoints[i].db->u.dist_since_last_wp, &h);
  896. X      else
  897. X     last_non_inc = i;
  898. X}
  899. X
  900. X/*----------------------------------------------------------------------------*/
  901. Xvoid print_reverse ()
  902. X{
  903. X   int i, j;
  904. X
  905. X   reverse_incrementals ();
  906. X
  907. X   for (i = num_waypoints - 1; i >= 0; i--) {
  908. X      for (j = 1; j <= max_nav; j++) {
  909. X     if ((i == num_waypoints - 1) ||
  910. X         (strcmp (waypoints[i].vor_fix[j].db->desig, 
  911. X              waypoints[i+1].vor_fix[j].db->desig))) {
  912. X        printf ("nav(%d) %s;\n", j+1, waypoints[i].vor_fix[j].db->desig);
  913. X     }
  914. X      }
  915. X      if (waypoints[i].wp_kind == WP_TO)
  916. X     printf ("\nfrom %s;\n", waypoints[i].db->desig);
  917. X      else if (waypoints[i].wp_kind == WP_FROM)
  918. X     printf ("to %s;\n", waypoints[i].db->desig);
  919. X      else if (waypoints[i].db->mode != WP_INCREMENTAL)
  920. X     printf ("\tvia %s;\n", waypoints[i].db->desig);
  921. X      else {
  922. X     printf ("\t\tvia %1.0lf", waypoints[i].db->u.dist_since_last_wp);
  923. X     if (waypoints[i].db->name)
  924. X        printf (", \"%s\"", waypoints[i].db->name);
  925. X     if (waypoints[i].db->city)
  926. X        printf (", \"%s\"", waypoints[i].db->city);
  927. X     if (waypoints[i].db->comment)
  928. X        printf (", \"%s\"", waypoints[i].db->comment);
  929. X     printf (";\n");
  930. X      }
  931. X   }
  932. X}
  933. X
  934. X
  935. SHAR_EOF
  936. chmod 0444 reverse.c || echo "restore of reverse.c fails"
  937. echo "x - extracting version.h (Text)"
  938. sed 's/^X//' << 'SHAR_EOF' > version.h &&
  939. X#define VERSION "1.1"
  940. SHAR_EOF
  941. chmod 0444 version.h || echo "restore of version.h fails"
  942. exit 0
  943.  
  944.