home *** CD-ROM | disk | FTP | other *** search
/ Ultimate Collection - Games / Games Ultimate Collection.iso / 1133 / wg2.inc < prev    next >
Encoding:
Text File  |  1989-01-07  |  19.1 KB  |  624 lines

  1. Procedure Make_Mini_Map;
  2. {prepare a 2-dimensional map for 2-dimensional minds}
  3. Begin;
  4.     For X_Coordinate := 0 to 9 Do
  5.       Begin;
  6.       Mini_Map [X_Coordinate] := '';
  7.       For Y_Coordinate := 0 to 9 Do
  8.          If System_Details [Y_Coordinate, X_Coordinate] >'!'
  9.          then Mini_Map [X_Coordinate] := Mini_Map [X_Coordinate] + '* '
  10.          else Mini_Map [X_Coordinate] := Mini_Map [X_Coordinate] + '  ';
  11.       End;
  12. End;
  13.  
  14. Procedure Show_Mini_Map;
  15. {part of statistics}
  16. Begin;
  17.   Window(55,1,80,19);
  18.   ClrScr;
  19.   WG_Textcolor(White);
  20.   Writeln('     sector  systems');
  21.   Writeln('   0 1 2 3 4 5 6 7 8 9');
  22.   Writeln;
  23.   For N := 0 to 9 do Writeln(' ',N,' ',Mini_Map[n]);
  24.   Writeln('# = Oxygen World');
  25.   If Binary_Star_Count > 0 then Writeln('< = close binary system');
  26.   If Black_Hole_Count > 0 then Writeln('{ = black hole');
  27.   If ProtoStar_Count > 0 then Writeln('[ = Protostar');
  28.   Window(1,1,80,25);
  29. End;
  30.  
  31. Procedure Draw_Grid;
  32.   {Draws a 10 x 10 x 10 3D grid for showing solar system positions etc}
  33.   Begin;
  34.     Colour_Selection;
  35.     WriteLn('        Sector Solar System Locations');
  36.        For I:= 1 to 11 Do
  37.          Begin;
  38.            IA:=I*5;  {Local variables speed up plotting}
  39.            IB:=I*9;
  40.            IC:=I*10;
  41.            ID:=I*18;
  42.            Draw(IC,200-IA,IC,110-IA,1);
  43.            Draw(IC,200-IA,180+IC,200-IA,1);
  44.              If I>1 then Begin;
  45.                  Numbers(IC-10,105-IA,11-I,3);
  46.                  Numbers(3,90+IB,11-I,2);
  47.                  Numbers(87+ID,49,I-2,1);
  48.                End;
  49.            Draw(110,46+IB,290,46+IB,1);
  50.            Draw(93+ID,55,93+ID,145,1);
  51.            Draw(93+ID,145,ID-8,195,1);
  52.            Draw(10,95+IB,110,46+IB,1);
  53.          End;
  54.    End;
  55.  
  56. Procedure System_location_XYZ;
  57.   {Convert XYZ coordinates to XY pairs and show them on grid}
  58.   Begin;
  59.       Y1:=147 + (5 * X_Coordinate);
  60.       Y2:= Y1 - (10 * Z_Coordinate);
  61.       X:= 117 - (10 * X_Coordinate) + (18 * Y_Coordinate);
  62.       Fillshape (X,Y1,3,1);
  63.       Draw (X,Y1,X,Y2+3,2);
  64.       Circle(X,Y2,3,0);
  65.       Fillshape(X,Y2+1,0,0);
  66.       Circle(X,Y2,3,2);
  67.       Fillshape(X,Y2+1,3,2);
  68.   End;
  69.  
  70. Procedure Random_Systems;
  71.   {Decides if there should be systems at each location, if so it shows them
  72.   and adds their location to a file for future manipulation}
  73.   Begin;
  74.   Systems_In_Memory := 0;
  75.     For Y_Coordinate := 0 to 9 Do
  76.       Begin;
  77.       For X_Coordinate := 0 to 9 Do
  78.          Begin;
  79.          System_Details [Y_Coordinate, X_Coordinate] := '   ';
  80.          Z_Coordinate := Random (50) - 40;
  81.          If Z_Coordinate >= 0 then
  82.             Begin;
  83.               System_Location_XYZ;
  84.               Str (Y_Coordinate, A);
  85.               Str (X_Coordinate, B);
  86.               Str (Z_Coordinate, C);
  87.               System_Location := A + B + C;
  88.               System_Details [Y_Coordinate, X_Coordinate] := System_Location;
  89.               Systems_In_Memory := Systems_In_Memory + 1;
  90.             End;
  91.           End;
  92.        End;
  93.     Make_Mini_Map;
  94.     Beep_Wait;
  95.   End;
  96.  
  97. Procedure Old_Systems;
  98.   {Convert System_Details data to show Z coordinate}
  99.   Begin;
  100.         A := Copy (System_Details [Y_Coordinate, X_Coordinate], 3, 1);
  101.         Val (A, Z_Coordinate,z);
  102.   End;
  103.  
  104. Procedure System_Window;
  105.   {Set up a small window for a solar system map}
  106.   Begin;
  107.      GraphWindow(0,0,319,32);
  108.      Draw(0,0,319,0,2);
  109.      Draw(0,32,319,32,2);
  110.      WG_System := System_Details [Y_Coordinate, X_Coordinate];
  111.      GraphWindow(0,1,319,31);
  112.      ClearScreen;
  113.      Draw(0,0,0,30,2);
  114.      Draw(319,0,319,30,2);
  115.  End;
  116.  
  117. Procedure Binary_Star;
  118.   {Draw a symbol for a close binary star pair}
  119.   Begin;
  120.      Circle(5,16,3,3);
  121.      Fillshape(5,16,2,3);
  122.      Circle(7,14,3,0);
  123.      Circle(7,14,2,2);
  124.      Fillshape(7,14,2,2);
  125.      Circle(7,14,2,3);
  126.   End;
  127.  
  128. Procedure Single_Star;
  129.    {Symbol for a lone star}
  130.    Begin;
  131.      Circle(5,15,Star_Radius,3);
  132.      Fillshape(5,15,2,3);
  133.    End;
  134.  
  135. Procedure Black_Hole;
  136.   {Symbol for a black hole, or base for proto-star symbol}
  137.   Begin;
  138.     Circle(5,15,3,2);
  139.     Circle(5,15,4,0);
  140.     Draw(0,14,5,14,2);
  141.     Draw(5,16,10,16,2);
  142.   End;
  143.  
  144. Procedure Proto_Star;
  145.   {Symbol for a solar system still forming}
  146.   Begin;
  147.     Black_Hole;
  148.     Fillshape(5,15,3,2);
  149.   End;
  150.  
  151. Procedure Binary_Star_Distant;
  152.   {A second star in distant orbit around the first.}
  153.   Begin;
  154.      Circle(5,15,X,2);
  155.      Circle(X+5,15,Star_Radius+1,0);
  156.      Plot(X+5,15,0);
  157.      Circle(X+5,15,Star_Radius,3);
  158.      Fillshape(X+5,15,2,3);
  159.   End;
  160.  
  161. Procedure Gas_Giant;
  162.   {Simple image of a gas giant}
  163.   Begin;
  164.     Circle(X+5,15,3,2);
  165.     Circle(X+5,15,4,0);
  166.     Fillshape(X+5,15,3,2);
  167.     Draw(X+2,15,X+8,15,2);
  168.   End;
  169.  
  170. Procedure Ringed_Giant;
  171.   {Simple image of ringed gas giant}
  172.   Begin;
  173.     Gas_Giant;
  174.     Draw(X-2,11,X+12,19,1);
  175.   End;
  176.  
  177. Procedure Planet;
  178.   {Simple planet, with colour coding}
  179.   Begin;
  180.     If World_Type >3 then World_Type:= 3; { 1 oxygen, 2 poison atmosphere, 3 airless}
  181.     Circle (X+5,15,2,World_Type);
  182.     Circle (X+5,15,1,World_Type);
  183.     Plot (X+5,15,World_Type);
  184.     If Screen_Selection <> 2 then draw(X+3,13+World_Type,X+7,13+World_Type,0);
  185.   End;
  186.  
  187. Procedure Ring_World;
  188.   {see the book!}
  189.   Begin;
  190.     Circle (5,15,X Div 3,1);
  191.     For N := 1 to 5 do
  192.     Begin;
  193.       Draw (X Div 3 ,N * 5, X Div 3 + 8,N * 5, 0);
  194.       Draw (X Div 3 ,N * 5 +1, X Div 3 + 8,N * 5+1, 0);
  195.     End;
  196.     Circle (5,15,X,1);
  197.     Circle (5,15,X+1,1);
  198.     Circle (5,15,x+2,3);
  199.     If A = 'Q' then begin;
  200.       Circle (5,15,X,2);
  201.       Circle (5,15,X+1,2);
  202.     end;
  203.   End;
  204.  
  205. Procedure Belt;
  206.   {Indicate presence of asteroid belt}
  207.   Begin;
  208.     Draw (X+5,12,X+5,18,0);
  209.     Plot (X+5,13,2);
  210.     Plot (X+5,15,2);
  211.     Plot (X+5,17,2);
  212.   End;
  213.  
  214. Procedure Dust_Cloud;
  215. {indicate presence of dust cloud}
  216.  Begin;
  217.    For N := 1 to 50 do Plot (X+7-Random(5),28-Random(26),3);
  218.  End;
  219.  
  220. Procedure Planet_Type;
  221.   {Select type of planet and show on screen}
  222.   Begin;
  223.     Circle(5,15,X,1);
  224.     Draw(X+4,12,X+4,18,0);
  225.     Draw(X+5,12,X+5,18,0);
  226.        If A > '7' then Ringed_Giant
  227.        Else
  228.        If A > '5' then Gas_Giant
  229.        Else
  230.        If A > '0' then Planet
  231.        Else
  232.        Belt
  233.   End;
  234.  
  235. Procedure Get_Luminosity_ETC;
  236. Begin;
  237. {main sequence stars}
  238. if star_type = 'B0' then Begin; Luminosity := 56000.0; Temperature := 28000.0;
  239.   Exact_Mass := 18.0; Exact_Radius := 10.0; End;
  240. if star_type = 'B5' then Begin; Luminosity := 1400.0;  Temperature := 15500.0;
  241.   Exact_Mass := 6.5;   Exact_Radius := 4.4; End;
  242. if star_type = 'A0' then Begin; Luminosity := 90.0;    Temperature := 9900.0;
  243.   Exact_Mass := 3.2;   Exact_Radius := 3.2; End;
  244. if star_type = 'A5' then Begin; Luminosity:= 16.0;    Temperature := 8500.0;
  245.   Exact_Mass := 2.1;   Exact_Radius := 1.8; End;
  246. if star_type = 'F0' then Begin; Luminosity := 8.1;   Temperature := 7400.0;
  247.   Exact_Mass := 1.7;   Exact_Radius := 1.7; End;
  248. if star_type = 'F5' then Begin; Luminosity:= 3.5;    Temperature := 6700.0;
  249.   Exact_Mass := 1.3;   Exact_Radius := 1.4; End;
  250. if star_type = 'G0' then Begin; Luminosity := 1.21;  Temperature := 6000.0;
  251.   Exact_Mass := 1.04;  Exact_Radius := 1.03; End;
  252. if star_type = 'G5' then Begin; Luminosity:= 0.67;   Temperature := 5500.0;
  253.   Exact_Mass := 0.94;  Exact_Radius := 0.91; End;
  254. if star_type = 'K0' then Begin; Luminosity := 0.42;  Temperature := 4900.0;
  255.   Exact_Mass := 0.825; Exact_Radius := 0.908; End;
  256. if star_type = 'K5' then Begin; Luminosity:= 0.08;   Temperature := 4100.0;
  257.   Exact_Mass := 0.570; Exact_Radius := 0.566; End;
  258. if star_type = 'M0' then Begin; Luminosity := 0.04;  Temperature := 3500.0;
  259.   Exact_Mass := 0.489; Exact_Radius := 0.549; End;
  260. if star_type = 'M5' then Begin; Luminosity:= 0.007;  Temperature := 2800.0;
  261.   Exact_Mass := 0.331; Exact_Radius := 0.358; End;
  262. if star_type = 'M9' then Begin; Luminosity:= 0.001;  Temperature := 2300.0;
  263.   Exact_Mass := 0.215; Exact_Radius := 0.201; End;
  264. {Typical White Dwarf}
  265. if star_type = 'DG' then Begin; Luminosity:= 0.00006;Temperature := 4500.0;
  266.   Exact_Mass := 0.63;  Exact_Radius := 0.012; End;
  267. Star_Radius := Round(Exact_Radius);
  268. end;
  269.  
  270. Procedure Get_Star_Type;
  271. {part of star_maker and binary star procedures}
  272. Begin;
  273.   Case Star_Selection of           {main sequence ONLY}
  274.    0..02: Star_Type := 'B0';
  275.   03..05: Star_Type := 'B5';
  276.   06..10: Star_Type := 'A0';
  277.   11..15: Star_Type := 'A5';
  278.   16..22: Star_Type := 'F0';
  279.   23..30: Star_Type := 'F5';
  280.   31..40: Star_Type := 'G0';
  281.   41..50: Star_Type := 'G5';
  282.   51..65: Star_Type := 'K0';
  283.   66..80: star_type := 'K5';
  284.   81..94: Star_type := 'M0';
  285.   95..97: Star_Type := 'M5';
  286.   98..99: Star_Type := 'M9';
  287.   End;
  288. End;
  289.  
  290. Procedure Star_Maker;
  291. {select size and type of star}
  292. Begin;
  293.   Star_Selection := Random(100 - Star_Chance)+(Star_Chance);
  294.   Star_Chance := Star_Selection;
  295.   Get_Star_Type;
  296.   Get_Luminosity_Etc;
  297.   Stars_In_System := Stars_In_System + 1;
  298. End;
  299.  
  300. Procedure New_System_Map;
  301.   {Generate data and draw a simple solar system map in a window}
  302.   Begin;
  303.      System_Window;
  304.      Oxygen_World := 0;
  305.      Star_Chance := 0;
  306.      Primary_Mass := 0;
  307.      Stars_In_System := 0;
  308.      Y := Random(100);             {Single Star or Binary?}
  309.         If Y >3 then
  310.         Begin;
  311.           {single star}
  312.           Star_Maker;
  313.           Primary_Luminosity := Luminosity;
  314.           Primary_Mass := Exact_Mass;
  315.           Single_Star;
  316.           Second_Star_Orbit := -10;
  317.         End
  318.         Else
  319.         Begin;
  320.           {binary star}
  321.           Second_Star_Orbit :=  Y;
  322.              If Second_Star_Orbit = 0 then begin
  323.                Binary_Star;  {very close binary pair}
  324.                Star_Selection := Random(40)+10;
  325.                Get_Star_Type;
  326.                Get_Luminosity_etc;
  327.                Primary_Luminosity := Luminosity;
  328.                Primary_Mass := Exact_Mass;
  329.                Star_Selection := 100-Star_Selection;
  330.                Get_Star_Type;
  331.                Get_Luminosity_etc;
  332.                Primary_Luminosity := Primary_Luminosity + Luminosity;
  333.                Primary_Mass := Primary_Mass + Exact_Mass;
  334.                Stars_In_System := 2;
  335.                Star_Type := '*'+ Chr(100-Star_Selection);
  336.              End
  337.              Else begin
  338.                {distant binary pair}
  339.                Star_Maker;
  340.                Primary_Luminosity := Luminosity;
  341.                Primary_Mass := Exact_Mass;
  342.                Single_Star;
  343.              End;
  344.        End;
  345.      Numbers(2,24,Y_Coordinate,1);
  346.      Numbers(7,24,X_Coordinate,3);
  347.      Numbers(12,24,Z_Coordinate,2);
  348.      WG_System := WG_System + Star_Type;
  349.      For I := 1 to 17 Do
  350.        Begin;
  351.        Orbital_Distance := Bode_Number[I] * Primary_Mass; {distance in AU}
  352.        X := 17 * I;
  353.        V := Random((I Div 5) + Sqr(Stars_In_System));
  354.        Temperature := 374.5 * (Exp(Ln(Primary_Luminosity)/4)) / Sqrt (Orbital_Distance);
  355.        If Temperature > 2500 then V:= 1;
  356.        if I <= (Second_Star_Orbit * 2)+1 then V := 1;
  357.        If I > 18-Sqr(Stars_In_System) then V := 1;
  358.        if V = 0 then Begin
  359.          If temperature >= 1200 then If Random(3) = 0 then World_Type := 0
  360.               else World_Type := Random(2) + 3;
  361.          If temperature <1200 then if temperature >= 325 then
  362.              if random(3) = 0 then World_Type := 2
  363.              else if random(3) = 0 then World_Type := Random(2)+3
  364.              else World_Type := 0;
  365.          If temperature < 325 then if Temperature >= 250 then
  366.              if random(3) = 0 then if Stars_In_System = 1
  367.                then World_Type := 1
  368.                   else World_Type := Random(3)+2;
  369.          If temperature >= 50 then if Temperature <250 then if
  370.              random(2) = 0 then World_Type := Random(5)+5
  371.              else if Random(2) = 0 then World_Type := 5
  372.              else World_Type := 0;
  373.          If temperature < 50 then if Random(3) = 0 then World_Type := 5
  374.              else World_Type := 0;
  375.          If World_Type = 1 then if Oxygen_World = 1 then World_Type := 3;
  376.          If World_Type = 1 then Oxygen_World := 1;
  377.          Str (World_Type,A);
  378.          If temperature < 50 then if A = '0' then A := 'S';
  379.          WG_System := WG_System + A + ' ';
  380.          If A <='9' then Planet_Type;
  381.          If A = 'S' then Dust_Cloud;
  382.        End
  383.        Else if Second_Star_Orbit = I then
  384.          begin
  385.             Star_Maker;
  386.             Binary_Star_Distant;
  387.             WG_System := WG_System + Star_Type;
  388.             Primary_Luminosity := Primary_Luminosity + (Luminosity / I);
  389.          End
  390.             Else WG_System := WG_System + '  ';
  391.       End;
  392.    System_Details [Y_Coordinate, X_Coordinate] := WG_System;
  393. End;
  394.  
  395. Procedure Old_System_Map;
  396.   {Replicate a simple solar system map in a window}
  397.   Begin;
  398.      System_Window;
  399.      WG_System := System_Details [Y_Coordinate, X_Coordinate];
  400.      Numbers(2,24,Y_Coordinate,1);
  401.      Numbers(7,24,X_Coordinate,3);
  402.      Numbers(12,24,Z_Coordinate,2);
  403.      Stars_In_System := 0;
  404.      For  I := 0 to 17 Do
  405.      Begin;
  406.           A := Copy (WG_System,(2*I)+4,1);
  407.           If A <> ' ' then
  408.              Begin;
  409.               X := I * 17;
  410.               Case Char(Ord(A[1])) of
  411.                       '*': Begin; Binary_Star; Stars_In_System := 2; End;
  412.                       '(': Begin; black_hole; Stars_In_System := 3; End;
  413.                       ')': Begin; Proto_Star; Stars_In_System := 2; End;
  414.                  'A'..'M': Begin;
  415.                            Star_Type := Copy (WG_System,(2*I)+4,2);
  416.                            Get_Luminosity_etc;
  417.                            If I= 0 then Single_Star else Binary_Star_Distant;
  418.                            Stars_In_System := Stars_In_System + 1;
  419.                            end;
  420.                  'Q'..'R': Ring_World;
  421.                       'S': Dust_Cloud;
  422.                  '0'..'9': Begin;
  423.                              Val (A,World_Type,Z);
  424.                              Planet_Type;
  425.                            End;
  426.             end;
  427.         End;
  428.      End;
  429.  End;
  430.  
  431. Procedure Solar_Systems;
  432.   {Displays sector on the grid, then shows details of each system}
  433.   Begin;
  434.   If Systems_In_Memory = 0 then if Status > 1 then
  435.      Begin;
  436.        No_Sector_Error;
  437.        Exit;
  438.      End;
  439.   Draw_Grid;
  440.     For Y_Coordinate := 0 to 9 Do
  441.       Begin;
  442.         For X_Coordinate := 0 to 9 Do
  443.         Begin;
  444.           If System_Details [Y_Coordinate, X_Coordinate] > '!' then
  445.             Begin;
  446.               GraphWindow(0,0,319,199);
  447.               Old_Systems;
  448.               System_Location_XYZ;
  449.               If Status = 1 then New_System_Map
  450.               Else Old_System_Map;
  451.             End;
  452.         End;
  453.       End;
  454.   GraphWindow(0,0,319,199);
  455.   Beep_Wait;
  456. End;
  457.  
  458. Procedure Steer_Around_Sector;
  459. {move about sector by cursor keys}
  460. VAR
  461. Blob_X, Blob_Y, Exit_Key : Integer;
  462. Begin;
  463.   If Systems_In_Memory = 0 then
  464.      Begin;
  465.        No_Sector_Error;
  466.        Exit;
  467.      End;
  468.   Writeln;
  469.   Writeln('   Use arrow keys to move around sector');
  470.   Writeln('       use ENTER to select or exit');
  471.   Writeln('          Press a key to start');
  472.   Beep_Wait;
  473.   GraphWindow(0,0,319,199);
  474.   Draw_Grid;
  475.     For Y_Coordinate := 0 to 9 Do
  476.         For X_Coordinate := 0 to 9 Do
  477.           If System_Details [Y_Coordinate, X_Coordinate] > '!' then begin;
  478.             Old_Systems;
  479.             System_Location_XYZ;
  480.           end;
  481. Exit_Key := 0; X_Coordinate := 0; Y_Coordinate := 0;
  482. Repeat;
  483.    If System_Details [Y_Coordinate, X_Coordinate] > '!' then begin;
  484.      Old_Systems;
  485.      GraphWindow(0,0,319,199);
  486.      Y1:=147 + (5 * X_Coordinate);
  487.      Blob_Y:= Y1 - (10 * Z_Coordinate);
  488.      Blob_X:= 117 - (10 * X_Coordinate) + (18 * Y_Coordinate);
  489.      GetPic(cursor_Buffer,Blob_X-10,Blob_Y-10,Blob_X+10,Blob_Y+10);
  490.      Circle(Blob_X,Blob_Y,2,2);
  491.      Fillshape(Blob_X,Blob_Y,2,2);
  492.      Old_System_Map;
  493.      Graphwindow(0,0,319,199);
  494.      Circle(Blob_X,Blob_Y,2,3);
  495.      Fillshape(Blob_X,Blob_Y,3,3);
  496.      PutPic(cursor_buffer,Blob_X-10,Blob_Y+10);
  497.    end
  498.    Else
  499.    begin;
  500.       System_Window;
  501.       Numbers(2,24,Y_Coordinate,1);
  502.       Numbers(7,24,X_Coordinate,3);
  503.       GraphWindow(0,0,319,199);
  504.       Y1:=147 + (5 * X_Coordinate);
  505.       X:= 117 - (10 * X_Coordinate) + (18 * Y_Coordinate);
  506.       GetPic(cursor_Buffer,X-10,Y1-10,X+10,Y1+10);
  507.       For N:= 1 to 5 do
  508.       begin;
  509.         Circle(X,Y1,2,2);
  510.         Delay(20);
  511.         circle(X,Y1,2,0);
  512.       End;
  513.       PutPic(cursor_buffer,X-10,Y1+10);
  514.    End;
  515.    Read(Kbd,Dummy);
  516.    If (Dummy = #27) and KeyPressed then begin;
  517.         read (Kbd,Dummy);
  518.         Case Dummy of
  519.          'H': if X_Coordinate > 0 then X_Coordinate := X_Coordinate - 1;
  520.          'P': if X_Coordinate < 9 then X_Coordinate := X_Coordinate + 1;
  521.          'K': if Y_Coordinate > 0 then Y_Coordinate := Y_Coordinate - 1;
  522.          'M': if Y_Coordinate < 9 then Y_Coordinate := Y_Coordinate + 1;
  523.         end;
  524.    end
  525.    else if Dummy = Chr(13) then Exit_Key := 1;
  526.  
  527. Until Exit_Key <> 0;
  528. End;
  529.  
  530.  
  531. {-------------------------------------------------------------------------}
  532. {               SOLAR SYSTEM FILE LOADING AND SAVING                      }
  533. {-------------------------------------------------------------------------}
  534.  
  535. Procedure Get_Directory(Files_Wanted: String);
  536. {look for  files and show them on screen}
  537. Var
  538.  Dirinfo : Searchrec;
  539. Begin
  540.   Findfirst (Files_Wanted,archive,dirinfo);
  541.   While DosError = 0 do begin;
  542.     Write(dirinfo.Name:20);
  543.     Findnext(dirinfo);
  544.   end;
  545.   Writeln;
  546. end;
  547.  
  548. Procedure Disk_File_Name;
  549. {Get disk file name and try to avoid errors}
  550. Begin;
  551.   Writeln('Sector files on disk are:');
  552.   Get_Directory('*.SEC');
  553.   Writeln(diskfree(0) div 1024,' Kbytes free');
  554.   If Demonstration = 0 then repeat
  555.     Writeln('Enter File Name in format [d:]filename {without any extension} ');
  556.     Readln(Sector_Name);
  557.   Until Sector_Name <> ''
  558.   Else Sector_Name := 'SAMPLE';
  559.   File_name := Sector_Name + '.DOC';
  560.   Sector_Name := Sector_Name + '.SEC';
  561.   Writeln (' ' + Sector_Name);
  562.   Assign (Sector_File, Sector_Name);
  563. End;
  564.  
  565. Procedure Save_Data;
  566.   {Save system description strings to disk}
  567.   Begin;
  568.   Top_Of_Menu_Screens;
  569.      If Systems_In_Memory = 0 then
  570.       Begin;
  571.         No_Sector_Error;
  572.         Exit;
  573.       End;
  574.   Writeln('Saving Sector Data');
  575.   Disk_File_Name;
  576.   {$I-};
  577.   Rewrite (Sector_File);
  578.   {$I+};
  579.   OK := (IOresult = 0);
  580.   if not OK then begin;
  581.     Show_Disk_Error(2);
  582.     Close (Sector_File);
  583.     Exit;
  584.   End;
  585.   For Y_Coordinate := 0 to 9 Do
  586.   Begin;
  587.       For X_Coordinate := 0 to 9 Do
  588.       Begin;
  589.       Writeln (Sector_File, System_Details [Y_Coordinate, X_Coordinate]);
  590.       End;
  591.   End;
  592.   Close (Sector_File);
  593.   End;
  594.  
  595. Procedure Read_Data;
  596.   {Read system description strings from disk}
  597.   Begin;
  598.   Top_Of_Menu_Screens;
  599.   Writeln('Loading Sector Data');
  600.   Disk_File_Name;
  601.   {$I-};
  602.   Systems_In_Memory := 0;
  603.   Reset (Sector_File);
  604.     For Y_Coordinate := 0 to 9 Do
  605.     Begin;
  606.       For X_Coordinate := 0 to 9 Do
  607.       Begin;
  608.         Readln (Sector_File, System_Details [Y_Coordinate, X_Coordinate]);
  609.         If System_Details [Y_Coordinate, X_Coordinate] > '!'
  610.           then systems_In_Memory := Systems_In_Memory +1;
  611.       End;
  612.     End;
  613.   Close (Sector_File);
  614.   {$I+}
  615.   OK := (IOresult = 0);
  616.   if not OK then begin;
  617.       Show_Disk_Error(1);
  618.       Exit;
  619.   End;
  620.   Writeln('Sector file loaded');
  621.   ShowText;
  622.   Make_Mini_Map;
  623. End;
  624.