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

  1. {GSDATA.INC}
  2. const
  3.   SectorFieldMarker = 'Sector data starts here...';
  4.  
  5. procedure writeSectors( var g : text; var ss : SectorArray );
  6. var
  7.   s : sector;
  8.   i : warpindex;
  9. begin
  10.   writeln( g, SectorFieldMarker);
  11.   for s := 1 to maxSector do
  12.     with ss[s] do
  13.       if (number <> Unexplored) or (PortType <> NotAPort) or
  14.          (etc <> Nothing) then
  15.       begin
  16.         write( g, s : 5, number:3 );
  17.         for i := 1 to number do
  18.           write( g, data[i] : 5);
  19.         write( g, portType : 3 );
  20.         write( g, etc : 6 );
  21.         writeln( g );
  22.       end; {for if}
  23. end; {writeSectors}
  24.  
  25. procedure WriteDock( var g : text; d : integer );
  26. begin
  27.   writeln( g, 'SpaceDock is ', d : 5 );
  28. end;
  29.  
  30. procedure WriteNotes( var g : text; var n : NoteList );
  31. var
  32.   i : 1..MaxNote;
  33. begin
  34.   writeln( g, n.top, '  <- number of notes' );
  35.   if n.top > 0 then
  36.     for i := 1 to n.top do
  37.       writeln( g, n.data[ i ].reference : 5, ' ', n.data[i].info );
  38. end; {WriteNotes}
  39.  
  40. procedure WritePorts( var g : text; var p : PortList );
  41. var
  42.   i : 1..MaxPorts;
  43. begin
  44.   writeln( g, p.top, '  <- number of Port Infos' );
  45.   if p.top > 0 then
  46.     for i := 1 to p.top do
  47.       with p.data[i] do
  48.         writeln( g, where : 5, amts[ Fuel ] : 8, amts[ Organics ] : 8,
  49.                  amts[ Equipment ] : 8, usage[ Fuel ] : 4,
  50.                  usage[ Organics ] : 4, usage[ Equipment ] : 4 );
  51. end; {WritePorts}
  52.  
  53. const
  54.  DataFileIdentifier = '::Tradewars Data file::';
  55.  
  56. procedure SaveData( var g : text; var Space : TheVoid );
  57. begin
  58.   writeln(g, DataFileIdentifier );
  59.   writeDock( g, Space.dock );
  60.   writeNotes( g, Space.notes );
  61.   writePorts( g, space.ports );
  62.   writeSectors( g, space.sectors );
  63.   close( g );
  64. end; {SaveData}
  65.  
  66. procedure InitSectors( var s : SectorArray );
  67. var
  68.   r : sector;
  69. begin
  70.   for r := 1 to maxSector do
  71.     with s[r] do
  72.       begin
  73.         number  := UnExplored;
  74.         portType:= NotAPort;
  75.         etc     := Nothing;
  76.       end; {for with}
  77. end; {Init Sectors}
  78.  
  79.  
  80. function bval( line : string; var n : integer) : boolean;
  81. { convert  nonnegative numeric value at front of line into n; return whether
  82. conversion was successful. }
  83. var
  84.   i : integer;
  85.   error : boolean;
  86.  
  87. begin
  88.   i := 1;
  89.   n := 0;
  90.   Error := true;
  91.   while ( i <= length( line ) ) do
  92.     if line[i] = ' ' then
  93.       i := i + 1
  94.     else if line[ i ] in ['0'..'9'] then
  95.       begin
  96.         Error := false;
  97.         n := 10 * n + ord( line[ i ] ) - ord('0');
  98.         i := i + 1;
  99.       end
  100.     else
  101.       i := length( line ) + 1;
  102.   bval := error;
  103. end;
  104.  
  105. procedure InitSpace( var s : TheVoid );
  106. begin
  107.   s.dock  := 0;
  108.   s.notes.top := 0;
  109.   s.ports.top := 0;
  110.   InitSectors( s.sectors );
  111. end;
  112.  
  113. procedure ReadSectors( var h : text; var ss : SectorArray );
  114. var
  115.   r : sector;
  116.   i : warpindex;
  117.   temp,
  118.   portcount,
  119.   sectorcount :integer;
  120.   line : string;
  121. begin
  122.   portcount := 0; sectorcount := 0;
  123.   readln( h, line);   { "Sector data starts here..." }
  124.   if line <> SectorFieldMarker then
  125.     writeln('Sector data missing?  Found ', line )
  126.   else
  127.     while not eof( h ) do
  128.       begin
  129.         read( h, r );
  130.         sectorcount := sectorcount + 1;
  131.         with ss[r] do
  132.           begin
  133.             read( h, number );
  134.             for i := 1 to number do
  135.               begin
  136.                 read( h, temp );
  137.                 if (temp >= 1) and (temp <= maxSector) then
  138.                   data[ i ] := temp
  139.                 else
  140.                   writeln('bad data for sector ', r);
  141.               end; {for}
  142.             read( h, portType );
  143.             if PortType <> NotAPort then
  144.               portcount := portcount + 1;
  145.             read( h, etc );
  146.           end; {with}
  147.         readln( h );
  148.       end; {while}
  149.   writeln('Finished reading ', sectorcount, ' sectors, ', portcount, ' ports.');
  150. end; {ReadSectors}
  151.  
  152. procedure ReadDock( var f : text; var d : SectorIndex );
  153. begin
  154.   if d = 0 then
  155.     begin
  156.       skip( f, 12);    { "SpaceDock is" }
  157.       readln( f, d );
  158.       if d = 0 then
  159.         writeln('Space Dock location unknown')
  160.       else
  161.         writeln('Space Dock location ', d );
  162.     end
  163.   else  {already known, just skip line}
  164.     readln( f );
  165. end; {ReadDock}
  166.  
  167. procedure ReadNotes( var f : text; var sn : NoteList );
  168. var
  169.   NoteIndex,
  170.   i : 1..MaxNote;
  171.   more,
  172.   j : integer;
  173.   n : string;
  174. begin
  175.   readln( f, more );
  176.   if more > 0 then
  177.     for i := 1 to more do
  178.       begin
  179.         readln( f, n );
  180.         if not bval( copy( n, 1, 5 ), j ) then
  181.           begin
  182.             NoteIndex := NoteNumber( j );         { is this note new? }
  183.             if NoteIndex = 0 then                 { yes, so add to    }
  184.               begin                               { # notes, and work }
  185.                 sn.top := sn.top + 1;             { with that entry   }
  186.                 NoteIndex := sn.top;
  187.               end; {if}
  188.             with sn.data[ NoteIndex ] do          { then store it     }
  189.               begin
  190.                 reference := j;
  191.                 info := copy( n, 7, NoteSize);
  192.               end {with}
  193.           end {if}
  194.         else
  195.           writeln('Error with note ', n );
  196.       end; {for}
  197.   writeln('Info for ', sn.top, ' notes ');
  198. end; {ReadNotes}
  199.  
  200. procedure ReadPorts( var f : text; var sp : PortList );
  201. var
  202.   p, i : 1..MaxPorts;
  203.   location : sector;
  204.   more : integer;
  205. begin
  206.   readln( f, more );
  207.   if more > 0 then
  208.     for i := 1 to more do
  209.       begin
  210.         read( f, location );
  211.         p := portnumber( location );
  212.         if p = 0 then
  213.           begin
  214.             sp.top := sp.top + 1;
  215.             p := sp.top;
  216.           end; {if}
  217.         sp.data[p].where := location;
  218.         with sp.data[ p ] do
  219.           begin
  220.             read( f, amts[ Fuel ], amts[ Organics ], amts[ Equipment ]);
  221.             if not eoln( f ) then
  222.                read( f, usage[Fuel], usage[Organics], usage[Equipment] )
  223.             else
  224.               begin
  225.                 usage[fuel] := 0;
  226.                 usage[organics] := 0;
  227.                 usage[equipment] := 0;
  228.               end;
  229.             readln( f );
  230.           end; {with}
  231.       end; {if for}
  232.   writeln('Info for ', sp.top, ' ports');
  233. end; {ReadPorts}
  234.  
  235. procedure GetData( var space : TheVoid; var name : string );
  236. var
  237.   h : text;
  238.   line,
  239.   filename : string;
  240. begin
  241.   if name = '' then
  242.     begin
  243.       write('Name of data file?  ');
  244.       readln( filename );
  245.     end {if}
  246.   else
  247.     filename := name;
  248.   if filename = '' then
  249.     writeln('Okay, initializing with empty space.')
  250.   else
  251.     begin
  252.       assign( h, filename );
  253.       reset( h );
  254.       if pos( '.', filename) <> 0 then
  255.         name := copy( filename, 1, pos( '.', filename) - 1 )
  256.       else
  257.         name := '';
  258.       readln( h, line );
  259.       if line <> DataFileIdentifier then
  260.         begin
  261.           writeln('This is not a trade wars database file!');
  262.           halt;
  263.         end; {Error}
  264.       ReadDock( h, Space.dock );
  265.       ReadNotes( h, Space.notes );
  266.       ReadPorts( h, space.ports );
  267.       ReadSectors( h, space.sectors );
  268.       close( h );
  269.     end; {if filename <> '' }
  270. end; {GetData}
  271.