home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 115.NETCHANG.INC < prev    next >
Text File  |  1992-03-10  |  3KB  |  96 lines

  1. type
  2.   datum = record
  3.             s : sectorIndex;
  4.             c : integer;
  5.           end;
  6.   ChangeIndex = array [ portPtr ] of datum;
  7.  
  8.  
  9. procedure LoadChange( var portChange : changeIndex );
  10. {set up the index list }
  11. var
  12.   p : PortIndex;
  13. begin
  14.   for p := 1 to space.ports.top do
  15.     with space.ports.data[p], portchange[p] do
  16.       begin
  17.         s := p;
  18.         c := abs( change[Fuel] ) + abs( change[Organics] )
  19.            + abs( change[Equipment] );
  20.       end;  {for with}
  21. end; {LoadChange}
  22.  
  23. procedure SortChange( var change : ChangeIndex );
  24. { sort the ChangeIndex array based upon change field }
  25.  
  26. procedure quicksort( start, finish : portIndex );
  27. { This uses C.M. Hoare's quicksort algorithm to sort the entries}
  28. var
  29.    left, right   : portIndex;
  30.    starter       : integer;
  31.    temp          : datum;
  32.  
  33. begin
  34.   left := start;
  35.   right := finish;
  36.   starter := change[(start + finish) div 2].c;   {middle of array}
  37.   repeat
  38.     while change[left].c > starter do
  39.       left := left + 1;        {find a smaller value on the left}
  40.     while starter > change[right].c do
  41.       right := right - 1;
  42.     if left <= right then        {we haven't gone too far, so}
  43.       begin
  44.     temp := change[left];        {swap the two}
  45.     change[left] := change[right];
  46.     change[right] := temp;
  47.         left := left + 1;
  48.         right := right -1;    {and update the pointers}
  49.       end; {{if}
  50.   until right < left;
  51.   if start < right then quicksort(start, right );
  52.   if left < finish then quicksort(left, finish );
  53. end;  {quicksort}
  54.  
  55. begin
  56.   quicksort( 1, space.ports.top );
  57. end;
  58.  
  59. procedure DisplayChangeInfo( p : portIndex; total : integer );
  60. { display the information for entry p of the port sales info record }
  61. var
  62.   s : sectorIndex;
  63.   line : string;
  64.   item : goods;
  65. begin
  66.   s := space.ports.data[p].where;
  67.   line := 'Port: ' + str( s, 3 );
  68.   AddEtc( s, line );
  69.   line := line + ' ' + status( space.sectors[s].portType) + DisplayPort( p );
  70.   writeln( line );
  71.   line := 'Net change: ' + str( total, 5 ) + ' with changes ';
  72.   for item := Fuel to Equipment do
  73.     line := line + ' ' + str( space.ports.data[p].change[item], 5);
  74.   writeln( line );
  75. end;
  76.  
  77. procedure HighChange;
  78. {Identify the ports that have changed the most since last record }
  79.  
  80. var
  81.   PortChange : ChangeIndex;
  82.   p : portIndex;
  83.   keepGoing : boolean;
  84.  
  85. begin
  86.   LoadChange( PortChange );
  87.   SortChange( PortChange );
  88.   KeepGoing := true;
  89.   for p := 1 to space.ports.top do
  90.     if KeepGoing and (PortChange[p].c > 0) then
  91.       begin
  92.         DisplayChangeInfo( PortChange[p].s, PortChange[p].c );
  93.         if p mod 10 = 0 then
  94.           KeepGoing := prompt( 'more? ');
  95.       end; {for if}
  96. end; {HighChange}