home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 271.TEXTDISP.INC < prev    next >
Text File  |  1991-07-08  |  5KB  |  161 lines

  1. function DisplayPort( WhichPort : PortPtr ) : string;
  2. begin
  3.   if WhichPort = 0 then
  4.     DisplayPort := 'Port data not found!'
  5.   else
  6.     with space.ports.data[ WhichPort ] do
  7.       DisplayPort :=  ' F:' + str(amts[fuel], 5) + ' ' + str(usage[fuel],3) +
  8.                       '% O:' + str( amts[ organics], 5) + ' ' + str(usage[organics],3) +
  9.                       '% E:' + str( amts[ equipment ], 5 )+ ' ' + str(usage[equipment],3) + '%';
  10. end; {DisplayPort}
  11.  
  12. function DisplayNote( s : sector ) : string;
  13. { print the note associated with sector s }
  14. var
  15.   n : 0..MaxNote;
  16. begin
  17.   n := NoteNumber( s );
  18.   if n = 0 then
  19.     Displaynote := ' Missing note! '
  20.   else
  21.     Displaynote := ' ' + space.notes.data[n].info;
  22. end; {write note}
  23.  
  24. procedure DisplaySector( s : sector; whatIs : string; dist : integer;  
  25.                          ToFile : boolean; var TheFile : text);
  26. var
  27.   line : string;
  28. begin
  29.   with space.sectors[s] do
  30.     begin
  31.       line := 'Sctr:' + str( s, 3);
  32.       if dist <> Error then
  33.         line := line + WhatIs + str( dist, 2 );
  34.       if number = UnExplored then
  35.         line := line + ' Unexplored sector';
  36.       if portType <> NotAPort then
  37.         begin
  38.           line := line + ' port ' + status( portType );
  39.           if portType <> Class0 then
  40.             line := line + DisplayPort( portnumber( s ) );
  41.         end; {if port}
  42.       if (etc and SpaceLane) <> Nothing then
  43.         line := line + ' space lane';
  44.       if (etc and StarDock) <> Nothing then
  45.         line := line + ' Star Dock';
  46.       if (etc and HasFighters) <> Nothing then
  47.         line := line + ' has fighters';
  48.       if (etc and NoteExists) <> Nothing then
  49.         line := line + DisplayNote( s );
  50.       if number = 1 then
  51.         if AppearanceCount(s) = 1 then
  52.           line := line + ' dead end (' + str(HowFar( s ),1) + ')';
  53.       writeln( line);
  54.       if ToFile then
  55.         writeln( TheFile, line );
  56.     end; {with}
  57. end; {DisplaySector}
  58.  
  59. type
  60.   WhichStuff = (any, PortOnly, NoteOnly, UnExpOnly );
  61.  
  62. procedure EliminateUnwanted( var distances   : distanceArray;
  63.                                  keepMe    : WhichStuff;
  64.                              var HowManyLeft : integer );
  65. { Remove the sectors you don't want in the list by pushing them to the back}
  66. var
  67.   whichSector : sector;
  68.   keep : boolean;
  69. begin
  70.   HowManyLeft := 0;
  71.   for whichSector := 1 to MaxSector do
  72.     begin
  73.       case keepMe of
  74.         any : keep := distances[ whichSector ].d <> maxint;
  75.         PortOnly : keep := space.sectors[whichSector].porttype <> NotAPort;
  76.         NoteOnly : keep := space.sectors[whichSector].etc and NoteExists
  77.                            <> Nothing;
  78.         UnExpOnly: keep := (space.sectors[whichSector].number = UnExplored)
  79.                            and (distances[ whichSector ].d <> maxint);
  80.       end; {case}
  81.       if keep then
  82.         begin
  83.           HowManyLeft := HowManyLeft + 1;
  84.           distances[ howManyLeft ] := distances[ whichSector ];
  85.         end; {if}
  86.     end; {for}
  87.   write('Total of ', HowManyLeft );
  88.   case keepMe of
  89.     any      : writeln(' sectors from base sector');
  90.     PortOnly : writeln(' known ports');
  91.     NoteOnly : writeln(' sectors with notes');
  92.     UnExpOnly: writeln(' unexplored sectors with known position');
  93.   end; {case}
  94. end; {EliminateUnwanted}
  95.  
  96. procedure FindSmallest( var distances : DistanceArray;
  97.                         lowest, highest : sector );
  98. { Examine the distance array from lowest to highest, and move the
  99. sector at smallest distance into the "lowest" slot. }
  100. var
  101.   temp     : dist;
  102.   s,
  103.   smallest : sector;
  104. begin
  105.   Smallest := lowest;
  106.   for s := lowest to highest do
  107.     if distances[ s ].d < distances[ smallest ].d then
  108.       smallest := s;
  109.   temp := distances[ smallest ];
  110.   distances[ smallest ] := distances[ lowest ];
  111.   distances[ lowest ] := temp;
  112. end; {FindSmallest}
  113.  
  114. procedure nearestStuff( Filter : WhichStuff );
  115. var
  116.   Number,
  117.   s, n : integer;
  118.   log  : boolean;
  119.   f    : text;
  120. begin
  121.   if SetUpDistances then
  122.     begin
  123.       EliminateUnwanted( distances, filter, Number );
  124.       log := prompt( 'Log to disk? ');
  125.       if log then
  126.         begin
  127.           assign( f, GetNewFileName('File name for report?  ', 'report.txt') );
  128.           rewrite( f );
  129.         end;
  130.       if Number <> 0 then
  131.         begin
  132.           for n := 1 to Number do
  133.             begin
  134.               FindSmallest( distances, n, Number );
  135.               DisplaySector( distances[ n ].s, ' Dist:', distances[n].d, log, f );
  136.               if n mod 20 = 0 then
  137.                 if not prompt( 'more? ') then
  138.                   begin
  139.                     if log then
  140.                       close( f );
  141.                       exit;
  142.                   end;
  143.             end; {for}
  144.         end; {if}
  145.       if log then
  146.         close( f );
  147.     end; {if}
  148. end; {nearport}
  149.  
  150. procedure SortPorts( var NumPorts : integer );
  151. var
  152.   s, n : integer;
  153. begin
  154.   NumPorts := 0;
  155.   if SetUpDistances then
  156.     begin
  157.       EliminateUnwanted( distances, PortOnly, NumPorts );
  158.       writeln('Sorting...');
  159.       SortDistances( distances, NumPorts )
  160.     end; {if}
  161. end; {SortPorts}