home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 110.PART89.INC < prev    next >
Text File  |  1992-07-23  |  5KB  |  150 lines

  1. { part 8 and 9 }
  2.  
  3. procedure parseIReportLine( var f : text; var s : TheVoid );
  4. { parse one line of the sector report }
  5. var
  6.   WhichSector, AdjacentSector : sectorIndex;
  7. begin
  8.   WhichSector := readNumber( f );
  9.   if WhichSector <> 0 then
  10.     begin
  11.       read( f, AdjacentSector );
  12.       if adjacentSector <> 0 then
  13.       with space.sectors[WhichSector] do
  14.           begin
  15.             if number = 0 then
  16.               writeln('New info for sector ', WhichSector );
  17.             number := 1;
  18.             data[1] := AdjacentSector;
  19.             while not eoln( f ) do
  20.               begin
  21.                 read( f, AdjacentSector );
  22.                 number := number + 1;
  23.                 data[number] := AdjacentSector;
  24.               end; {while}
  25.           end; {if}
  26.     end; {if}
  27.   readln( f );
  28. end; {Parse I Report Line}
  29.  
  30. procedure PartVIII( var data : text; var space : TheVoid );
  31. { read the sector report from the data file }
  32. begin
  33.   while not eof( data ) do
  34.     parseIReportLine( data,  space );
  35.   SaveData( g, space );
  36. end;
  37.  
  38. procedure GetPercentage( var f : text; var p : percent );
  39. var
  40.   ch : char;
  41. begin
  42.   p := 0;
  43.   read( f, ch );
  44.   repeat
  45.     if ch in ['0'..'9'] then
  46.       begin
  47.         p := 10 * p + ord(ch) - ord('0');
  48.       end;
  49.     read( f, ch );
  50.   until (ch = '%') or eof( f );
  51. end; {Get Percentage}
  52.  
  53. procedure ParseRReportLine( var f : text; var space : TheVoid );
  54. { Given a list of ports, figure out the relevant info }
  55. var
  56.   WhichPort  : PortIndex;
  57.   CurrSector : SectorIndex;
  58.   tmp        : integer;
  59.   temp       : char;
  60.   item       : goods;
  61. begin
  62.   CurrSector := readNumber( f );
  63.   read( f, temp );
  64.   if (CurrSector <> 0) then
  65.     if temp = '0' then
  66.       begin
  67.         WhichPort := PortNumber( CurrSector );
  68.         if WhichPort <> 0 then                           { scanner blocked }
  69.           with space.ports.data[whichport] do
  70.             begin
  71.               if usage[ Equipment ] <> 0 then
  72.                 writeln('Scanner newly blocked in sector ', CurrSector);
  73.               for item := Fuel to Equipment do          { assume max values}
  74.                 if usage[item] <> 0 then
  75.                   begin
  76.                     tmp := round( amts[ item ]/ usage[ item]) * 100;
  77.                     change[ item ] := tmp - amts[ item ];
  78.                     amts[ item ]:= tmp;
  79.                   end
  80.                 else
  81.                   change[item] := 0;
  82.               for item := Fuel to Equipment do          {then flag by with}
  83.                 usage[item] := 0;                       { use set to 0  }
  84.             end; {if with}
  85.       end {temp=0}
  86.     else
  87.       begin
  88.         WhichPort := PortNumber( currSector );
  89.         if WhichPort = 0 then
  90.           begin
  91.             writeln('New port info in ', currSector );
  92.             if space.ports.top = MaxPorts then
  93.               begin
  94.                 writeln('Too many ports!  Please recompile with a larger');
  95.                 writeln('MAXPORTS value.  Aborting...');
  96.                 readln;
  97.                 halt;
  98.               end {if}
  99.             else
  100.               begin
  101.                 inc( space.ports.top );
  102.                 whichport := space.ports.top;
  103.               end; {if else}
  104.           end {whichport 0}
  105.         else if space.ports.data[whichPort].usage[equipment] = 0 then
  106.           writeln('Port in ', currSector, ' recently unblocked');
  107.  
  108. {
  109.   most of this stuff doesn't need to be stored, as its already there, but
  110.   what the heck.  A few easy assignments...
  111. }
  112.         space.sectors[CurrSector].etc := space.sectors[CurrSector].etc
  113.                                                   or IsPort;
  114.         space.ports.data[WhichPort].where := CurrSector;
  115.         for item := Fuel to equipment do
  116.           with space.ports.data[WhichPort] do
  117.             begin
  118.               tmp := ReadNumber( f );
  119.               if temp = '-' then
  120.                 tmp := -tmp;
  121.               change[ item ] := tmp - amts[ item ];
  122.               amts[ item ] := tmp;
  123.               GetPercentage( f, usage[item] );
  124.               read( f, temp );
  125.               if item <> equipment then
  126.                 read( f, temp );
  127.             end; {for}
  128.         space.sectors[CurrSector].PortType :=
  129.             ComputePortType( space.ports.data[WhichPort].amts);
  130.       end; {if}
  131. end; {Parse Report}
  132.  
  133. procedure FindFirstIReportLine( var f : text );
  134. var
  135.   i : integer;
  136. begin
  137.   repeat
  138.     i := ReadNumber( f );
  139.     readln( f );
  140.   until i <> 0;
  141. end;
  142.  
  143. procedure PartIX( var data : text; var space : TheVoid );
  144. { read the ports report from the data file }
  145. begin
  146.   FindFirstIReportLine( data );
  147.   while not eof( data ) do
  148.     parseRReportLine( data, space );
  149.   SaveData( g, space );
  150. end;