home *** CD-ROM | disk | FTP | other *** search
/ Game Killer / Game_Killer.bin / 284.MISC.INC < prev    next >
Text File  |  1991-07-09  |  6KB  |  270 lines

  1. function str( n : integer; width : integer ) : string;
  2. { convert integer to string }
  3. var
  4.   negative : boolean;
  5.   s : string;
  6. begin
  7.   if n = 0 then
  8.     s := '0'
  9.   else
  10.     begin
  11.       negative := false;
  12.       s := '';
  13.       if n < 0 then
  14.         begin
  15.           negative := true;
  16.           n := -n;
  17.         end;
  18.       while n > 0 do
  19.         begin
  20.           s := chr( n mod 10 + ord('0') ) + s;
  21.           n := n div 10;
  22.         end; {while}
  23.       if negative then
  24.         s := '-'+s;
  25.     end; {else}
  26.   while length(s) < width do
  27.     if odd( length(s) ) then
  28.       s := s + ' '
  29.     else
  30.       s := ' ' + s;
  31.   str := s;
  32. end; {str}
  33.  
  34. function die( size : integer ) : integer;
  35. begin
  36.   die := random( size );
  37. end;
  38.  
  39. function prompt( p : string ) : boolean;
  40. { returns true if they say yes }
  41. var
  42.   ch : char;
  43. begin
  44.   write(p);
  45.   readln( ch );
  46.   prompt := ch in ['Y','y'];
  47. end; {again}
  48.  
  49. function GetNewFileName( promptstring : string; default : string ) : string;
  50. { Get a valid filename.  Warn if clobbering existing file. }
  51. var
  52.   filename : string;
  53.   g        : text;
  54.   errorcode: integer;
  55.  begin
  56.   repeat
  57.     write( promptstring, '[', default, ']  ' );
  58.     readln( filename );
  59.     if filename = '' then
  60.       if default = abort then
  61.         halt
  62.       else
  63.         filename := default;
  64.     if filename = abort then
  65.       halt;
  66.     {$I-}
  67.     assign( g, filename );
  68.     reset( g );
  69.     {$I+}
  70.     errorCode := ioResult;
  71.     if errorCode = 0 then
  72.       begin
  73.         close( g );
  74.         write('File already exists! ');
  75.         if prompt('Overwrite? ') then
  76.           errorcode := FileNotFound;
  77.       end; {if}
  78.   until errorcode = FileNotFound;
  79.   GetNewFilename := filename;
  80. end; {GetNewFilename}
  81.  
  82. function GetOldFileName( promptstring : string; default : string ) : string;
  83. var
  84.   filename : string;
  85.   f        : text;
  86.   errorcode: integer;
  87. begin
  88.   repeat
  89.     write( promptstring, '[', default, ']  ' );
  90.     readln( filename );
  91.     if filename = '' then
  92.       if default = abort then
  93.         halt
  94.       else
  95.         filename := default;
  96.     if filename = abort then
  97.       halt;
  98.     assign( f, filename );
  99.     {$I-}
  100.     reset( f );
  101.     {$I+}
  102.     errorCode := ioResult;
  103.     close( f );
  104.     if errorCode <> 0 then writeln('Error ', errorCode, ' opening file!');
  105.   until errorCode = 0;
  106.   GetOldFileName := filename;
  107. end; {GetOldFileName}
  108.  
  109. function min( a, b : integer ) : integer;
  110. begin
  111.   if a > b then
  112.     min := b
  113.   else
  114.     min := a;
  115. end;
  116.  
  117. function minreal( a, b : real ) : real;
  118. begin
  119.   if a > b then
  120.     minreal := b
  121.   else
  122.     minreal := a;
  123. end; {minreal}
  124.  
  125. function IsWarp( from, OverTo : sector ) : boolean;
  126. { true if you can go from from to OverTo in one step }
  127. var
  128.   t : warpIndex;
  129. begin
  130.   IsWarp := false;
  131.   if space.sectors[ from ].number <> UnExplored then
  132.     for t := 1 to space.sectors[ from ].number do
  133.       if space.sectors[ from ].data[t] = OverTo then
  134.         IsWarp := true;
  135. end; {IsWarp}
  136.  
  137. function GetSector : SectorIndex;
  138. var
  139.   s : integer;
  140. begin
  141.   repeat
  142.     write('Sector? [0 to abort]  ');
  143.     readln( s );
  144.   until (s>=0) and (s<=MaxSector);
  145.   GetSector := s;
  146. end; {GetSector}
  147.  
  148. function LogToDisk( var f : text; message : string; default : string )
  149.                   : boolean;
  150. var
  151.   filename : string;
  152.   ch       : char;
  153. begin
  154.   if not prompt( message ) then
  155.     LogToDisk := false
  156.   else
  157.     begin
  158.       LogToDisk := true;
  159.       assign( f, GetNewFilename( 'Log file? ', default) );
  160.       rewrite( f );
  161.     end; {else}
  162. end; {LogToDisk}
  163.  
  164. function upcase( ch : char ) : char;
  165. { if letter in 'a'..'z' give upper case equivalent }
  166. begin
  167.   if ch in ['a'..'z'] then
  168.     upcase := chr( ord( ch ) - ord('a') + ord('A') )
  169.   else
  170.     upcase := ch;
  171. end; {upcase}
  172.  
  173. function appearanceCount ( base : sector ) : integer;
  174. { returns number of sectors that warp into base sector }
  175. var
  176.   s : sector;
  177.   count : integer;
  178.   i : warpIndex;
  179. begin
  180.   count := 0;
  181.   for s := 1 to maxSector do
  182.     with space.sectors[s] do
  183.       for i := 1 to number do
  184.         if data[i] = base then
  185.           count := count + 1;
  186.   appearanceCount := count;
  187. end;
  188.  
  189. function HowFar( base : sector ) : integer;
  190. { return length of path leaving base sector }
  191. var
  192.   previous, current, NextUp : sector;
  193.   len : integer;
  194. begin
  195.   previous := base;
  196.   current := space.sectors[base].data[1];
  197.   len := 1;
  198.   while (space.sectors[current].number = 2) do
  199.     begin
  200.       NextUp := space.sectors[current].data[1];
  201.       if NextUp = previous then
  202.         NextUp := space.sectors[current].data[2];
  203.       previous := current;
  204.       current := nextUp;
  205.       len := len + 1;
  206.     end; {while}
  207.   HowFar := len;
  208. end;
  209.  
  210. procedure skip( var f : text; n : integer);
  211. var
  212.   ch : char;
  213. begin
  214.   for n := 1 to n do
  215.     read( f, ch );
  216. end; {skip}
  217.  
  218. function ReadNumber( var f : text) : integer;
  219. { Read the next number from text file f.  If there is no next number,
  220. return 0.}
  221. var
  222.   number : integer;
  223.   ch : char;
  224.   i  : integer;
  225. begin
  226.   number := 0;
  227.   if not eof( f ) then
  228.     begin
  229.       read( f, ch );
  230.       while (ch <= ' ') and (not eof(f)) do read( f, ch );
  231.       repeat
  232.         if ch in ['0'..'9'] then
  233.           number := number * 10 + ord( ch ) - ord( '0' );
  234.         if not eof( f ) then
  235.           read( f, ch )
  236.         else
  237.           ch := #26;
  238.       until (not (ch in ['0'..'9']));
  239.       if ch = '[' then     {hit [PAUSE]^h^h^h^h^h^h^h}
  240.         skip( f, 32 );
  241.     end;
  242.   ReadNumber := number;
  243. end;
  244.  
  245. function PortNumber( s : sector ) : PortIndex;
  246. { return the entry into the list of ports corresponding to port s;
  247.   return 0 if port not found. }
  248. var
  249.   i : portptr;
  250. begin
  251.   PortNumber := 0;
  252.   if space.Ports.top > 0 then
  253.     for i := 1 to space.Ports.top do
  254.       if space.Ports.data[ i ].where = s then
  255.         PortNumber := i;
  256. end; {PortNumber}
  257.  
  258. function NoteNumber( s : sector ) : integer;
  259. { return the entry into the list of notes corresponding to sector s;
  260.   return 0 if note not found. }
  261. var
  262.   i : 0..MaxNote;
  263. begin
  264.   NoteNumber := 0;
  265.   if space.Ports.top > 0 then
  266.     for i := 1 to space.Notes.top do
  267.       if space.notes.data[ i ].reference = s then
  268.         NoteNumber := i;
  269. end; {PortNumber}
  270.