with ConsAKD; use ConsAKD; with CursAKD; use CursAKD; with FloaAKD; use FloaAKD; with MathAKD; use MathAKD; with TextAKD; use TextAKD; package body DOS_011_Plot is ---------------------------------------------------------------------- ---------------------------------------------------------------------- procedure Demo is ---------------------------------------------------------------------- X_Data, Y_Data : Vector_Type ( 1..100 ) := ( others => 0.0 ); Dum : character; Data_File : File_Type; Data_File_Name : string ( 1..12 ) := "PlotDemo.Dat"; begin Put_Line ( Copyright ); New_Line; Put_Line ( Description ); New_Line; Put_Line ( "Demonstration of Plot_XY for 100 points." ); New_Line; Ask ( Data_File_Name, "Data File Name: ", Data_File_Name ); Open ( Data_File, In_File, Data_File_Name ); for Index in 1..100 loop exit when End_Of_File ( Data_File ); Get ( Data_File, X_Data ( Index ) ); exit when End_Of_File ( Data_File ); Get ( Data_File, Y_Data ( Index ) ); end loop; Close ( Data_File ); Clear_Screen; Plot_XY ( X_Data, Y_Data, Adjust => true ); Move ( 24, 0 ); Pause; end Demo; procedure Plot_XY ( X_Data : in Vector_Type; Y_Data : in Vector_Type; Symbol : in character := 'o'; Adjust : in boolean := true; X_Min : in float := 0.0; X_Max : in float := 1.0; Y_Min : in float := 0.0; Y_Max : in float := 1.0 ) is ---------------------------------------------------------------------- X_Min_New : float := X_Min; X_Max_New : float := X_Max; Y_Min_New : float := Y_Min; Y_Max_New : float := Y_Max; X_New : natural; Y_New : natural; begin if Adjust then X_Min_New := Min ( X_Data ); X_Max_New := Max ( X_Data ); Y_Min_New := Min ( Y_Data ); Y_Max_New := Max ( Y_Data ); end if; for Index in X_Data'range loop Translate ( X_New, Y_New, X_Data ( Index ), Y_Data ( Index ), X_Min_New, X_Max_New, Y_Min_New, Y_Max_New ); Move ( Y_New, X_New ); Put ( Symbol ); end loop; end Plot_XY; procedure Translate ( X_New : out natural; Y_New : out natural; X_Old : in float; Y_Old : in float; X_Min : in float := 0.0; X_Max : in float := 1.0; Y_Min : in float := 0.0; Y_Max : in float := 1.0 ) is ---------------------------------------------------------------------- begin if X_Max - X_Min /= 0.0 then X_New := natural ( 79.0 * ( X_Old - X_Min ) / ( X_Max - X_Min ) ); else X_New := 40; end if; if Y_Max - Y_Min /= 0.0 then Y_New := 23 - natural ( 23.0 * ( Y_Old - Y_Min ) / ( Y_Max - Y_Min ) ); else Y_New := 12; end if; end Translate; ---------------------------------------------------------------------- ---------------------------------------------------------------------- end DOS_011_Plot;