home *** CD-ROM | disk | FTP | other *** search
- procedure READINI (Datafile: text80);
- { Read the INItialization file }
-
- var Num: integer; { #parameters read on line }
- Realvar: vartype; { temp array for storage of line input }
- Infile: text; { file to read }
- Comment: text80; { comment at end of line }
- Version: integer; { version # of the INI file }
- Line_num: integer; { line # in input file }
- Period: integer; { position of period in filename }
- Cmmd: integer; { selection # }
- Filebad: boolean; { flag bad file }
- Mat: integer; { material # }
- Lite: integer; { light source # }
- Sys_type_set: boolean; { was the system type set in this INI file? }
- Sys: integer; { index to legal system number array }
-
- begin
- ClrScr;
- writeln ('Reading .INI file . . .');
- Sys_type_set := FALSE;
- { Correctly name the INI file }
- Period := pos ('.', Datafile);
- if (Period = 0) then
- Inifile := Datafile + '.INI'
- else
- Inifile := copy (Datafile, 1, Period-1) + '.INI';
-
- Filebad := FALSE;
- { See if it exists }
- assign (Infile, Inifile);
- {$I-}
- reset (Infile);
- {$I+}
- if (ioresult = 0) then begin
- { File exists; read it and set global parameters }
- Line_num := 1;
- Num := inreal (Infile, Realvar, Comment, Line_num, FALSE);
- if (Num <> 1) then begin
- writeln ('Bad INIfile: Reading version number.');
- Filebad := TRUE;
- end else
- Version := round (Realvar[1]);
-
- if (Version >= 1) and (Version <= 4) and (not Filebad) then begin
- Cmmd := 0;
- while (Cmmd <> 99) and (not Filebad) do begin
- Line_num := Line_num + 1;
- Num := inreal (Infile, Realvar, Comment, Line_num, FALSE);
- if (Num < 1) then begin
- writeln ('Bad INIfile');
- Filebad := TRUE;
- end;
- if (Filebad) then
- Cmmd := 99
- else
- Cmmd := round (Realvar[1]);
-
- case Cmmd of
- 1:
- if (Num <> 2) then begin
- writeln ('INIfile: System number input bad');
- Filebad := TRUE;
- end else begin
- grSys := trunc(Realvar[2]);
- if (version = 4) then begin
- grmode := round (100.0 * (realvar[2] - grsys));
- end
- else
- grmode := 0; {guaranteed for all modes}
- if version <= 3 then
- grsys := oldsys[grsys];
- if (Version >= 3) then
- Sys_type_set := TRUE;
- end; { if Num }
- 2:
- if (Num <> 4) then begin
- writeln ('INIfile: Eye coordinates bad');
- Filebad := TRUE;
- end else begin
- Xeye := Realvar[2];
- Yeye := Realvar[3];
- Zeye := Realvar[4];
- end;
- 3:
- if (Num <> 4) then begin
- writeln ('INIfile: Focal point coordinates bad');
- Filebad := TRUE;
- end else begin
- Xfocal := Realvar[2];
- Yfocal := Realvar[3];
- Zfocal := Realvar[4];
- end;
- 4:
- if (Num <> 2) then begin
- writeln ('INIfile: Bad magnification factor');
- Filebad := TRUE;
- end else
- Magnify := Realvar[2];
- 5:
- if (Num <> 2) or (Realvar[2]<0.0) or (Realvar[2]>3.0) then begin
- writeln ('INIfile: Bad view type');
- Filebad := TRUE;
- end else
- Viewtype := round(Realvar[2]);
- 6:; { Autoresolve removed }
- 7:
- if (Version = 1) then begin
- if (Num <> 6) or (Realvar[2]<1.0)or(Realvar[2]>Nmatl) then begin
- writeln ('Warning: Bad matl data in INIfile.');
- write ('Press any key to continue...');
- while (not keypressed) do;
- end else begin
- Mat := round (Realvar[2]);
- R1[Mat] := Realvar[3];
- R2[Mat] := Realvar[4];
- R3[Mat] := Realvar[5];
- Color[Mat] := round (Realvar[6]);
- Ambient[Mat] := 0.1;
- end;
- end else begin
- if (Num <> 7) or (Realvar[2]<1.0)or(Realvar[2]>Nmatl) then begin
- writeln ('Warning: Bad matl data in INIfile.');
- write ('Press any key to continue...');
- while (not keypressed) do;
- end else begin
- Mat := round (Realvar[2]);
- R1[Mat] := Realvar[3];
- R2[Mat] := Realvar[4];
- R3[Mat] := Realvar[5];
- Color[Mat] := round (Realvar[6]);
- Ambient[Mat] := Realvar[7];
- end;
- end; { if Version }
- 8:
- if (Num <> 6) or (Realvar[2] < 1.0) or (Realvar[2] > MAXLITE)
- or (Realvar[2] > Nlite+1) then begin
- writeln ('INIfile: Bad Light Source Data');
- Filebad := TRUE;
- end else begin
- Lite := round (Realvar[2]);
- if (Lite > Nlite) then
- Nlite := Lite;
- Xlite[Lite] := Realvar[3];
- Ylite[Lite] := Realvar[4];
- Zlite[Lite] := Realvar[5];
- Intensity[Lite] := Realvar[6];
- end;
- 9:
- if (Num <> 2) or (Version <> 1) then begin
- writeln ('INIfile: Bad ambient light');
- Filebad := TRUE;
- end else
- for Mat := 1 to Nmatl do
- Ambient[Mat] := Realvar[2];
- 10:
- if (Num <> 2) then begin
- writeln ('INIfile: Bad Epsilon');
- Filebad := TRUE;
- end else
- if (Realvar[2] > 0.0) then begin
- Epsilon := Realvar[2];
- Interpolate := TRUE;
- end else
- Interpolate := FALSE;
- 11:
- if (Num <> 2) or (Realvar[2]<0.0) or (Realvar[2]>1.0) then begin
- writeln ('INIfile: Bad Shadowing');
- Filebad := TRUE;
- end else
- if (Realvar[2] = 0.0) then
- Shadowing := FALSE
- else
- Shadowing := TRUE;
- 12:
- if (Num <> 2) or (Realvar[2] < 0) then begin
- writeln ('INIfile: Bad number of graphics characters');
- Filebad := TRUE;
- end else
- Ngraphchar := round (Realvar[2]);
- 13:
- if (Num <> 6) or (Realvar[2]<0) or (Realvar[2]>2) or
- (Realvar[6]<0) or (Realvar[6]>32) then begin
- writeln ('INIfile: Bad axis codes');
- Filebad := TRUE;
- end else begin
- Showaxes := round(Realvar[2]);
- Xaxislen := Realvar[3];
- Yaxislen := Realvar[4];
- Zaxislen := Realvar[5];
- Axiscolor := round(Realvar[6]);
- end;
- 14:
- if (Num <> 2) then begin
- writeln ('INIfile: Bad window number');
- Filebad := TRUE;
- end else
- Nwindow := round(Realvar[2]);
- 15:
- if (Num <> 3) or (Realvar[2] < 1) or (Realvar[3] < 0) or
- (Realvar[3] > 1) then begin
- writeln ('INIfile: Bad system color data');
- Filebad := TRUE;
- end else begin
- Ncolors := round(Realvar[2]);
- if (Realvar[3] = 0) then
- Mono := FALSE
- else
- Mono := TRUE;
- end;
- 16:
- if (Num <> 2) then begin
- writeln ('INIfile: Bad Randshade');
- Filebad := TRUE;
- end else begin
- if (Realvar[2] > 0.0) then begin
- Randshade := Realvar[2];
- Dorandom := TRUE;
- end else
- Dorandom := FALSE;
- end;
- 99:
- else
- writeln ('Warning: INIfile has unknown code (',Cmmd,')');
- end; { case Cmmd }
- end; { while }
- end else begin
- writeln ('INIfile: Bad version number');
- Filebad := TRUE;
- end; { if Version }
-
- close (Infile);
- if (Filebad) then begin
- writeln ('Error found in line ',Line_num,' of ',Inifile);
- write ('Press any key to continue...');
- while (not keypressed) do;
- end;
-
- end else begin
- writeln ('No INItialization file.');
- writeln ('Using last values.');
- end; { if ioresult }
-
- if not sys_type_set then
- grsys := 0; {detect graphics}
-
- if driveron then begin
- closedriver;
- end;
- setsys;
-
- end; { procedure READINI }