home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / surfmodl / surfm203.arc / SURFSRC.ARC / READINI.INC < prev    next >
Encoding:
Text File  |  1988-01-19  |  8.8 KB  |  253 lines

  1. procedure READINI (Datafile: text80);
  2. { Read the INItialization file }
  3.  
  4. var Num: integer;           { #parameters read on line }
  5.     Realvar: vartype;       { temp array for storage of line input }
  6.     Infile: text;           { file to read }
  7.     Comment: text80;        { comment at end of line }
  8.     Version: integer;       { version # of the INI file }
  9.     Line_num: integer;      { line # in input file }
  10.     Period: integer;        { position of period in filename }
  11.     Cmmd: integer;          { selection # }
  12.     Filebad: boolean;       { flag bad file }
  13.     Mat: integer;           { material # }
  14.     Lite: integer;          { light source # }
  15.     Sys_type_set: boolean;  { was the system type set in this INI file? }
  16.     Sys: integer;           { index to legal system number array }
  17.  
  18. begin
  19.   ClrScr;
  20.   writeln ('Reading .INI file . . .');
  21.   Sys_type_set := FALSE;
  22.   { Correctly name the INI file }
  23.   Period := pos ('.', Datafile);
  24.   if (Period = 0) then
  25.     Inifile := Datafile + '.INI'
  26.   else
  27.     Inifile := copy (Datafile, 1, Period-1) + '.INI';
  28.  
  29.   Filebad := FALSE;
  30. { See if it exists }
  31.   assign (Infile, Inifile);
  32.   {$I-}
  33.   reset (Infile);
  34.   {$I+}
  35.   if (ioresult = 0) then begin
  36.     { File exists; read it and set global parameters }
  37.     Line_num := 1;
  38.     Num := inreal (Infile, Realvar, Comment, Line_num, FALSE);
  39.     if (Num <> 1) then begin
  40.       writeln ('Bad INIfile: Reading version number.');
  41.       Filebad := TRUE;
  42.     end else
  43.       Version := round (Realvar[1]);
  44.  
  45.     if (Version >= 1) and (Version <= 4) and (not Filebad) then begin
  46.       Cmmd := 0;
  47.       while (Cmmd <> 99) and (not Filebad) do begin
  48.         Line_num := Line_num + 1;
  49.         Num := inreal (Infile, Realvar, Comment, Line_num, FALSE);
  50.         if (Num < 1) then begin
  51.           writeln ('Bad INIfile');
  52.           Filebad := TRUE;
  53.         end;
  54.         if (Filebad) then
  55.           Cmmd := 99
  56.         else
  57.           Cmmd := round (Realvar[1]);
  58.  
  59.         case Cmmd of
  60.           1:
  61.             if (Num <> 2) then begin
  62.               writeln ('INIfile: System number input bad');
  63.               Filebad := TRUE;
  64.             end else begin
  65.               grSys := trunc(Realvar[2]);
  66.               if (version = 4) then begin
  67.                 grmode := round (100.0 * (realvar[2] - grsys));
  68.               end
  69.               else
  70.                 grmode := 0; {guaranteed for all modes}
  71.               if version <= 3 then
  72.                 grsys := oldsys[grsys];
  73.               if (Version >= 3) then
  74.                 Sys_type_set := TRUE;
  75.             end; { if Num }
  76.           2:
  77.             if (Num <> 4) then begin
  78.               writeln ('INIfile: Eye coordinates bad');
  79.               Filebad := TRUE;
  80.             end else begin
  81.               Xeye := Realvar[2];
  82.               Yeye := Realvar[3];
  83.               Zeye := Realvar[4];
  84.             end;
  85.           3:
  86.             if (Num <> 4) then begin
  87.               writeln ('INIfile: Focal point coordinates bad');
  88.               Filebad := TRUE;
  89.             end else begin
  90.               Xfocal := Realvar[2];
  91.               Yfocal := Realvar[3];
  92.               Zfocal := Realvar[4];
  93.             end;
  94.           4:
  95.             if (Num <> 2) then begin
  96.               writeln ('INIfile: Bad magnification factor');
  97.               Filebad := TRUE;
  98.             end else
  99.               Magnify := Realvar[2];
  100.           5:
  101.             if (Num <> 2) or (Realvar[2]<0.0) or (Realvar[2]>3.0) then begin
  102.               writeln ('INIfile: Bad view type');
  103.               Filebad := TRUE;
  104.             end else
  105.               Viewtype := round(Realvar[2]);
  106.           6:; { Autoresolve removed }
  107.           7:
  108.             if (Version = 1) then begin
  109.               if (Num <> 6) or (Realvar[2]<1.0)or(Realvar[2]>Nmatl) then begin
  110.                 writeln ('Warning: Bad matl data in INIfile.');
  111.                 write ('Press any key to continue...');
  112.                 while (not keypressed) do;
  113.               end else begin
  114.                 Mat := round (Realvar[2]);
  115.                 R1[Mat] := Realvar[3];
  116.                 R2[Mat] := Realvar[4];
  117.                 R3[Mat] := Realvar[5];
  118.                 Color[Mat] := round (Realvar[6]);
  119.                 Ambient[Mat] := 0.1;
  120.               end;
  121.             end else begin
  122.               if (Num <> 7) or (Realvar[2]<1.0)or(Realvar[2]>Nmatl) then begin
  123.                 writeln ('Warning: Bad matl data in INIfile.');
  124.                 write ('Press any key to continue...');
  125.                 while (not keypressed) do;
  126.               end else begin
  127.                 Mat := round (Realvar[2]);
  128.                 R1[Mat] := Realvar[3];
  129.                 R2[Mat] := Realvar[4];
  130.                 R3[Mat] := Realvar[5];
  131.                 Color[Mat] := round (Realvar[6]);
  132.                 Ambient[Mat] := Realvar[7];
  133.               end;
  134.             end; { if Version }
  135.           8:
  136.             if (Num <> 6) or (Realvar[2] < 1.0) or (Realvar[2] > MAXLITE)
  137.                 or (Realvar[2] > Nlite+1) then begin
  138.               writeln ('INIfile: Bad Light Source Data');
  139.               Filebad := TRUE;
  140.             end else begin
  141.               Lite := round (Realvar[2]);
  142.               if (Lite > Nlite) then
  143.                 Nlite := Lite;
  144.               Xlite[Lite] := Realvar[3];
  145.               Ylite[Lite] := Realvar[4];
  146.               Zlite[Lite] := Realvar[5];
  147.               Intensity[Lite] := Realvar[6];
  148.             end;
  149.           9:
  150.             if (Num <> 2) or (Version <> 1) then begin
  151.               writeln ('INIfile: Bad ambient light');
  152.               Filebad := TRUE;
  153.             end else
  154.               for Mat := 1 to Nmatl do
  155.                 Ambient[Mat] := Realvar[2];
  156.           10:
  157.             if (Num <> 2) then begin
  158.               writeln ('INIfile: Bad Epsilon');
  159.               Filebad := TRUE;
  160.             end else
  161.               if (Realvar[2] > 0.0) then begin
  162.                 Epsilon := Realvar[2];
  163.                 Interpolate := TRUE;
  164.               end else
  165.                 Interpolate := FALSE;
  166.           11:
  167.             if (Num <> 2) or (Realvar[2]<0.0) or (Realvar[2]>1.0) then begin
  168.               writeln ('INIfile: Bad Shadowing');
  169.               Filebad := TRUE;
  170.             end else
  171.               if (Realvar[2] = 0.0) then
  172.                 Shadowing := FALSE
  173.               else
  174.                 Shadowing := TRUE;
  175.           12:
  176.              if (Num <> 2) or (Realvar[2] < 0) then begin
  177.                writeln ('INIfile: Bad number of graphics characters');
  178.                Filebad := TRUE;
  179.              end else
  180.                Ngraphchar := round (Realvar[2]);
  181.           13:
  182.              if (Num <> 6) or (Realvar[2]<0) or (Realvar[2]>2) or
  183.                 (Realvar[6]<0) or (Realvar[6]>32) then begin
  184.                writeln ('INIfile: Bad axis codes');
  185.                Filebad := TRUE;
  186.              end else begin
  187.                Showaxes := round(Realvar[2]);
  188.                Xaxislen := Realvar[3];
  189.                Yaxislen := Realvar[4];
  190.                Zaxislen := Realvar[5];
  191.                Axiscolor := round(Realvar[6]);
  192.              end;
  193.           14:
  194.              if (Num <> 2) then begin
  195.                writeln ('INIfile: Bad window number');
  196.                Filebad := TRUE;
  197.              end else
  198.                Nwindow := round(Realvar[2]);
  199.           15:
  200.              if (Num <> 3) or (Realvar[2] < 1) or (Realvar[3] < 0) or
  201.                  (Realvar[3] > 1) then begin
  202.                writeln ('INIfile: Bad system color data');
  203.                Filebad := TRUE;
  204.              end else begin
  205.                Ncolors := round(Realvar[2]);
  206.                if (Realvar[3] = 0) then
  207.                  Mono := FALSE
  208.                else
  209.                  Mono := TRUE;
  210.              end;
  211.           16:
  212.             if (Num <> 2) then begin
  213.               writeln ('INIfile: Bad Randshade');
  214.               Filebad := TRUE;
  215.             end else begin
  216.               if (Realvar[2] > 0.0) then begin
  217.                 Randshade := Realvar[2];
  218.                 Dorandom := TRUE;
  219.               end else
  220.                 Dorandom := FALSE;
  221.             end;
  222.           99:
  223.           else
  224.             writeln ('Warning: INIfile has unknown code (',Cmmd,')');
  225.         end; { case Cmmd }
  226.       end; { while }
  227.     end else begin
  228.       writeln ('INIfile: Bad version number');
  229.       Filebad := TRUE;
  230.     end; { if Version }
  231.  
  232.     close (Infile);
  233.     if (Filebad) then begin
  234.       writeln ('Error found in line ',Line_num,' of ',Inifile);
  235.       write ('Press any key to continue...');
  236.       while (not keypressed) do;
  237.     end;
  238.  
  239.   end else begin
  240.     writeln ('No INItialization file.');
  241.     writeln ('Using last values.');
  242.   end; { if ioresult }
  243.  
  244.   if not sys_type_set then
  245.     grsys := 0; {detect graphics}
  246.  
  247.   if driveron then begin
  248.     closedriver;
  249.   end;
  250.   setsys;
  251.  
  252. end; { procedure READINI }
  253.