From: Alan W. I. <ai...@us...> - 2007-02-26 00:52:17
|
Update of /cvsroot/plplot/plplot/examples/ada In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3757/examples/ada Added Files: CMakeLists.txt ada_plplot.adb x01.adb x01.ads Log Message: Initial commit of an Ada example and Ada binding (donated by Jerry Bauck under the LGPL) to PLplot. Initial commit of rudimentary CMake build system support (supplied by AWI) for the Ada example and Ada binding. --- NEW FILE: CMakeLists.txt --- # examples/ada/CMakeLists.txt ### Process this file with cmake to produce Makefile ### # Copyright (C) 2007 Alan W. Irwin # # This file is part of PLplot. # # PLplot is free software; you can redistribute it and/or modify # it under the terms of the GNU Library General Public License as published # by the Free Software Foundation; version 2 of the License. # # PLplot is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU Library General Public License # along with PLplot; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA if(BUILD_TEST) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ada_plplot COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/ada_plplot.adb ${CMAKE_CURRENT_BINARY_DIR}/ada_plplot.adb COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/x01.adb ${CMAKE_CURRENT_BINARY_DIR}/x01.adb COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/x01.ads ${CMAKE_CURRENT_BINARY_DIR}/x01.ads COMMAND ${GNATMAKE_EXECUTABLE} -I${CMAKE_BINARY_DIR}/bindings/ada ada_plplot -largs -L${CMAKE_BINARY_DIR}/bindings/ada -lplplotada${LIB_TAG} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/ada_plplot.adb ${CMAKE_CURRENT_SOURCE_DIR}/x01.adb ${CMAKE_CURRENT_SOURCE_DIR}/x01.ads WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) add_custom_target(ada_plplot_target ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ada_plplot ) endif(BUILD_TEST) --- NEW FILE: ada_plplot.adb --- -- Driver program for running various PLplot example programs. with x01; use x01; procedure Ada_PLplot is begin Example_x01; end Ada_PLplot; --- NEW FILE: x01.ads --- package x01 is procedure Example_x01; end x01; --- NEW FILE: x01.adb --- -- $Id: x01.adb,v 1.1 2007/02/26 00:52:16 airwin Exp $ -- Simple line plot and multiple windows demo. -- Copyright (C) 2006 Jerry Bauck -- This file is part of PLplot. -- PLplot is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Library Public License as published -- by the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- PLplot is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Library General Public License for more details. -- You should have received a copy of the GNU Library General Public License -- along with PLplot; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA with Ada.Text_IO, Ada.Numerics, Ada.Numerics.Long_Elementary_Functions, Ada.Strings.Bounded, PLplot, PlplotThin; use Ada.Text_IO, Ada.Numerics, Ada.Numerics.Long_Elementary_Functions, Ada.Strings.Bounded, PLplot, PlplotThin; -- COMMENT THIS LINE IF YOUR COMPILER DOES NOT INCLUDE THESE -- DEFINITIONS, FOR EXAMPLE, IF IT IS NOT ADA 2005 WITH ANNEX G.3 COMPLIANCE. --with Ada.Numerics.Long_Real_Arrays; use Ada.Numerics.Long_Real_Arrays; package body x01 is procedure Example_x01 is xs, ys : Real_Vector (0 .. 5); xscale, yscale, xoff, yoff : Long_Float; fontset : Integer := 1; notes : String := "Make sure you get it right!"; ver : String_80; procedure plot1 is xmin, xmax, ymin, ymax : Long_Float; x, y : Real_Vector (0 .. 59); begin for i in x'Range loop x(i) := xoff + xscale * Long_Float(i + 1) / Long_Float(x'Length); y(i) := yoff + yscale * x(i)**2.0; end loop; xmin := x(x'First); xmax := x(x'Last); ymin := y(y'First); ymax := y(y'Last); for i in xs'Range loop xs(i) := x(i * 10 + 3); ys(i) := y(i * 10 + 3); end loop; -- Set up the viewport and window using Set_Environment. The range in X is -- 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are -- scaled separately (just = 0), and we just draw a labelled -- box (axis = 0). Set_Color(Red); Set_Environment(xmin, xmax, ymin, ymax, Not_Justified, Linear_Box_Plus); Set_Color(Yellow); Write_Labels(TUB("(x)"), TUB("(y)"), TUB("#frPLplot Example 1 - y=x#u2")); -- Plot the data points Set_Color(Aquamarine); Draw_Points(xs, ys, 9); -- Draw the line through the data Set_Color(Green); Draw_Curve(x, y); end plot1; procedure plot2 is x, y : Real_Vector (0 .. 99); begin -- Set up the viewport and window using PLENV. The range in X is -2.0 to -- 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately -- (just = 0), and we draw a box with axes (axis = 1). Set_Color(Red); Set_Environment(-2.0, 10.0, -0.4, 1.2, Not_Justified, Linear_Zero_Axes); Set_Color(Yellow); Write_Labels(TUB("(x)"), TUB("sin(x)/x"), TUB("#frPLplot Example 1 - Sinc Function")); -- Fill up the arrays for i in x'Range loop x(i) := (Long_Float(i) - 19.0) / 6.0; y(i) := 1.0; if x(i) /= 0.0 then y(i) := sin(x(i)) / x(i); end if; end loop; -- Draw the line Set_Color(Green); Set_Pen_Width(2); Draw_Curve(x, y); Set_Pen_Width(1); end plot2; procedure plot3 is x, y : Real_Vector (0 .. 100); space1, mark1 : Integer_Array_1D(1 .. 1) := (others => 1500); begin Advance_To_Subpage(Next_SubPage); -- Use standard viewport, and define X range from 0 to 360 degrees, -- Y range from -1.2 to 1.2. Set_Viewport_Standard; Set_Viewport_World(0.0, 360.0, -1.2, 1.2); -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. Set_Color(Red); Box_Around_Viewport(TUB("bcnst"), 60.0, 2, TUB("bcnstv"), 0.2, 2); -- Superimpose a dashed line grid, with 1.5 mm marks and spaces. -- plstyl expects a pointer! (-- Not Ada.) Set_Line_Style(mark1, space1); Set_Color(Yellow); Box_Around_Viewport(TUB("g"), 30.0, 0, TUB("g"), 0.2, 0); Set_Line_Style(Default_Continuous_Line); Set_Color(Green); Write_Labels(TUB("Angle (degrees)"), TUB("sine"), TUB("#frPLplot Example 1 - Sine function")); for i in x'Range loop x(i) := 3.6 * Long_Float(i); y(i) := sin(x(i) * pi / 180.0); end loop; Set_Color(Aquamarine); Draw_Curve(x, y); end plot3; begin -- plplot initialization -- Divide page into 2x2 plots unless user overrides Set_Number_Of_Subpages(2, 2); -- Parse and process command line arguments Parse_Command_Line_Arguments(PL_PARSE_FULL); -- Get version number, just for kicks Put_Line("PLplot library version: " & Get_Version_Number); -- Initialize plplot Initialize_Plotter; -- Set up the data -- Original case xscale := 6.0; yscale := 1.0; xoff := 0.0; yoff := 0.0; -- Do a plot plot1; -- Set up the data xscale := 1.0; yscale := 0.0014; yoff := 0.0185; -- Do a plot Set_Floating_Point_Display_Y(Max_Digits => 5, Field_Digits => 0); plot1; plot2; plot3; -- Don't forget to call PLEND to finish off! Plot_End; end Example_x01; end x01; |