|
From: <jb...@us...> - 2008-08-08 00:20:01
|
Revision: 8615
http://plplot.svn.sourceforge.net/plplot/?rev=8615&view=rev
Author: jbauck
Date: 2008-08-08 00:20:10 +0000 (Fri, 08 Aug 2008)
Log Message:
-----------
Add interactive Ada examples x14a.adb, xthick14a.adb, x17a.adb, xthick17a.adb. These need further testing on other systems since I don't have Tcl/Tk installed on mine (for Example 14). Examples 17 contain a bug whereby all legend strings are identical and equal to the fourth string, but I'm committing it anyway in case there are other problems that I haven't found.
Modified Paths:
--------------
trunk/examples/ada/CMakeLists.txt
trunk/examples/ada/Makefile.examples.in
trunk/plplot_test/test_ada.sh.in
Added Paths:
-----------
trunk/examples/ada/x14a.adb.cmake
trunk/examples/ada/x17a.adb.cmake
trunk/examples/ada/xthick14a.adb.cmake
trunk/examples/ada/xthick17a.adb.cmake
Modified: trunk/examples/ada/CMakeLists.txt
===================================================================
--- trunk/examples/ada/CMakeLists.txt 2008-08-07 22:04:50 UTC (rev 8614)
+++ trunk/examples/ada/CMakeLists.txt 2008-08-08 00:20:10 UTC (rev 8615)
@@ -32,8 +32,10 @@
"11"
"12"
"13"
+"14"
"15"
"16"
+"17"
"18"
"19"
"21"
@@ -59,8 +61,10 @@
"thick11"
"thick12"
"thick13"
+"thick14"
"thick15"
"thick16"
+"thick17"
"thick18"
"thick19"
"thick21"
Modified: trunk/examples/ada/Makefile.examples.in
===================================================================
--- trunk/examples/ada/Makefile.examples.in 2008-08-07 22:04:50 UTC (rev 8614)
+++ trunk/examples/ada/Makefile.examples.in 2008-08-08 00:20:10 UTC (rev 8615)
@@ -43,8 +43,10 @@
x11a$(EXEEXT) \
x12a$(EXEEXT) \
x13a$(EXEEXT) \
+ x14a$(EXEEXT) \
x15a$(EXEEXT) \
x16a$(EXEEXT) \
+ x17a$(EXEEXT) \
x18a$(EXEEXT) \
x19a$(EXEEXT) \
x21a$(EXEEXT) \
@@ -70,8 +72,10 @@
xthick11a$(EXEEXT) \
xthick12a$(EXEEXT) \
xthick13a$(EXEEXT) \
+ xthick14a$(EXEEXT) \
xthick15a$(EXEEXT) \
xthick16a$(EXEEXT) \
+ xthick17a$(EXEEXT) \
xthick18a$(EXEEXT) \
xthick19a$(EXEEXT) \
xthick21a$(EXEEXT) \
Added: trunk/examples/ada/x14a.adb.cmake
===================================================================
--- trunk/examples/ada/x14a.adb.cmake (rev 0)
+++ trunk/examples/ada/x14a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615)
@@ -0,0 +1,371 @@
+-- $Id$
+
+-- Demo of multiple stream/window capability (requires Tk or Tcl-DP).
+
+-- Maurice LeBrun
+-- IFS, University of Texas at Austin
+
+-- Copyright (C) 2008 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
+ System,
+ Ada.Text_IO,
+ Ada.Strings,
+ Ada.Strings.Fixed,
+ Ada.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ PLplot_Traditional,
+ PLplot_Auxiliary;
+use
+ Ada.Text_IO,
+ Ada.Numerics,
+ Ada.Strings,
+ Ada.Strings.Fixed,
+ Ada.Strings.Unbounded,
+ Ada.Numerics.Long_Elementary_Functions,
+ PLplot_Traditional,
+ PLplot_Auxiliary;
+
+-- 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;
+@Ada_Is_2007_With_and_Use_Numerics@
+
+------------------------------------------------------------------------------
+-- Plots several simple functions from other example programs.
+--
+-- This version sends the output of the first 4 plots (one page) to two
+-- independent streams.
+------------------------------------------------------------------------------
+
+procedure x14a is
+ -- Select either TK or DP driver and use a small window
+ -- Using DP results in a crash at the end due to some odd cleanup problems
+ -- The geometry strings MUST be in writable memory
+ geometry_master : String := "500x410+100+200";
+ geometry_slave : String := "500x410+650+200";
+ driver : Unbounded_String;
+ digmax : Integer;
+ xscale, yscale, xoff, yoff : Long_Float;
+ xs, ys : Real_Vector(0 .. 5);
+ space0 : Integer_Array_1D(1 .. 1) := (Others => 0);
+ mark0 : Integer_Array_1D(1 .. 1) := (Others => 0);
+ space1 : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ mark1 : Integer_Array_1D(1 .. 1) := (Others => 1500);
+
+ 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) * x(i);
+ 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 PLENV. 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).
+ plcol0(1);
+ plenv(xmin, xmax, ymin, ymax, 0, 0);
+ plcol0(6);
+ pllab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2");
+
+ -- Plot the data points
+ plcol0(9);
+ plpoin(xs, ys, 9);
+
+ -- Draw the line through the data
+ plcol0(4);
+ plline(x, y);
+ plflush;
+ 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).
+ plcol0(1);
+ plenv(-2.0, 10.0, -0.4, 1.2, 0, 1);
+ plcol0(2);
+ pllab("(x)", "sin(x)/x", "#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
+ plcol0(3);
+ plline(x, y);
+ plflush;
+ end plot2;
+
+ -- ================================================================
+
+
+ procedure plot3 is
+ x, y : Real_Vector(0 .. 100);
+ begin
+ -- For the final graph we wish to override the default tick intervals, and
+ -- so do not use PLENV
+
+ pladv(0);
+
+ -- Use standard viewport, and define X range from 0 to 360 degrees, Y range
+ -- from -1.2 to 1.2.
+ plvsta;
+ plwind(0.0, 360.0, -1.2, 1.2);
+
+ -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y.
+ plcol0(1);
+ plbox("bcnst", 60.0, 2, "bcnstv", 0.2, 2);
+
+ -- Superimpose a dashed line grid, with 1.5 mm marks and spaces.
+ plstyl(mark1, space1);
+ plcol0(2);
+ plbox("g", 30.0, 0, "g", 0.2, 0);
+ plstyl(Default_Continuous_Line);
+
+ plcol0(3);
+ pllab("Angle (degrees)", "sine", "#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;
+
+ plcol0(4);
+ plline(x, y);
+ plflush;
+ end plot3;
+
+ -- ================================================================
+
+
+ procedure plot4 is
+ dtr, theta, dx, dy, r : Long_Float;
+ x, y, x0, y0 : Real_Vector(0 .. 360);
+ begin
+ dtr := pi / 180.0;
+ for i in x0'range loop
+ x0(i) := cos(dtr * Long_Float(i));
+ y0(i) := sin(dtr * Long_Float(i));
+ end loop;
+
+ -- Set up viewport and window, but do not draw box
+ plenv(-1.3, 1.3, -1.3, 1.3, 1, -2);
+ for i in 1 .. 10 loop
+ for j in x'range loop
+ x(j) := 0.1 * Long_Float(i) * x0(j);
+ y(j) := 0.1 * Long_Float(i) * y0(j);
+ end loop;
+
+ -- Draw circles for polar grid
+ plline(x, y);
+ end loop;
+
+ plcol0(2);
+ for i in 0 .. 11 loop
+ theta := 30.0 * Long_Float(i);
+ dx := cos(dtr * theta);
+ dy := sin(dtr * theta);
+
+ -- Draw radial spokes for polar grid
+ pljoin(0.0, 0.0, dx, dy);
+
+ -- Write labels for angle
+ -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg.
+ if dx >= -0.00001 then
+ plptex(dx, dy, dx, dy, -0.15, Trim(Integer'image(Integer(theta)), Left));
+ else
+ plptex(dx, dy, -dx, -dy, 1.15, Trim(Integer'image(Integer(theta)), Left));
+ end if;
+ end loop;
+
+ -- Draw the graph
+ for i in x'range loop
+ r := sin(dtr * Long_Float(5 * i));
+ x(i) := x0(i) * r;
+ y(i) := y0(i) * r;
+ end loop;
+ plcol0(3);
+ plline(x, y);
+
+ plcol0(4);
+ plmtex("t", 2.0, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh");
+ plflush;
+ end plot4;
+
+ -- ================================================================
+
+
+ -- Demonstration of contour plotting
+ procedure plot5 is
+ XPTS : constant Integer := 35;
+ YPTS : constant Integer := 46;
+ -- Transformation function
+ XSPA : Long_Float := 2.0 / Long_Float(XPTS - 1);
+ YSPA : Long_Float := 2.0 / Long_Float(YPTS - 1);
+ tr : Real_Vector(0 .. 5) := (XSPA, 0.0, -1.0, 0.0, YSPA, -1.0);
+ xx, yy : Long_Float;
+ mark : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ space : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ z, w : Real_Matrix(0 .. XPTS -1, 0 .. YPTS - 1);
+ clevel : Real_Vector(0 .. 10) :=
+ (-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0);
+
+ procedure mypltr -- This spec is necessary to accommodate pragma Convention(C...).
+ (x, y : Long_Float;
+ tx, ty : out Long_Float;
+ pltr_data : PLpointer);
+ pragma Convention(Convention => C, Entity => mypltr);
+
+ procedure mypltr
+ (x, y : Long_Float;
+ tx, ty : out Long_Float;
+ pltr_data : PLpointer)
+ is
+ begin
+ tx := tr(0) * x + tr(1) * y + tr(2);
+ ty := tr(3) * x + tr(4) * y + tr(5);
+ end mypltr;
+
+ begin
+ for i in z'range(1) loop
+ xx := Long_Float(i - (XPTS / 2)) / Long_Float(XPTS / 2);
+ for j in z'range(2) loop
+ yy := Long_Float(j - (YPTS / 2)) / Long_Float(YPTS / 2) - 1.0;
+ z(i, j) := xx * xx - yy * yy;
+ w(i, j) := 2.0 * xx * yy;
+ end loop;
+ end loop;
+
+ plenv(-1.0, 1.0, -1.0, 1.0, 0, 0);
+ plcol0(2);
+ plcont(z, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address);
+ plstyl(mark, space);
+ plcol0(3);
+ plcont(w, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address);
+ plcol0(1);
+ pllab("X Coordinate", "Y Coordinate", "Streamlines of flow");
+ plflush;
+ end plot5;
+
+
+begin
+ -- plplot initialization
+ -- Parse and process command line arguments
+ plparseopts(PL_PARSE_FULL);
+
+ driver := To_Unbounded_String(plgdev);
+
+ Put_Line("Demo of multiple output streams via the " & plgdev & "driver.");
+ Put_Line("Running with the second stream as slave to the first.");
+ New_Line;
+
+ -- Set up first stream
+ plsetopt("geometry", geometry_master);
+
+ plsdev(To_String(driver));
+ plssub(2, 2);
+ plinit;
+
+ -- Start next stream
+ plsstrm(1);
+
+ -- Turn off pause to make this a slave (must follow master)
+ plsetopt("geometry", geometry_slave);
+ plspause(False);
+ plsdev(To_String(driver));
+ plinit;
+
+ -- Set up the data & plot
+ -- Original case
+ plsstrm(0);
+
+ xscale := 6.0;
+ yscale := 1.0;
+ xoff := 0.0;
+ yoff := 0.0;
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 1.0e+6;
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 1.0e-6;
+ digmax := 2;
+ plsyax(digmax, 0);
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 0.0014;
+ yoff := 0.0185;
+ digmax := 5;
+ plsyax(digmax, 0);
+ plot1;
+
+ -- To slave
+ -- The pleop ensures the eop indicator gets lit.
+ plsstrm(1);
+ plot4;
+ pleop;
+
+ -- Back to master
+ plsstrm(0);
+ plot2;
+ plot3;
+
+ -- To slave
+ plsstrm(1);
+ plot5;
+ pleop;
+
+ -- Back to master to wait for user to advance
+ plsstrm(0);
+ pleop;
+
+ -- Call plend to finish off.
+ plend;
+end x14a;
Property changes on: trunk/examples/ada/x14a.adb.cmake
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/examples/ada/x17a.adb.cmake
===================================================================
--- trunk/examples/ada/x17a.adb.cmake (rev 0)
+++ trunk/examples/ada/x17a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615)
@@ -0,0 +1,188 @@
+-- $Id$
+
+-- Plots a simple stripchart with four pens.
+
+-- Copyright (C) 2008 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.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ Ada.Numerics.Float_Random,
+ PLplot_Traditional,
+ PLplot_Auxiliary;
+use
+ Ada.Text_IO,
+ Ada.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ Ada.Numerics.Float_Random,
+ PLplot_Traditional,
+ PLplot_Auxiliary;
+
+-- 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;
+@Ada_Is_2007_With_and_Use_Numerics@
+
+procedure x17a is
+ autoy, acc : Boolean;
+ pl_errcode : Integer := 0;
+ id1 : Integer;
+ nsteps : Integer := 1000;
+ colbox, collab : Integer;
+ colline, styline : Integer_Array_1D(0 .. 3);
+ y1, y2, y3, y4, ymin, ymax, xlab, ylab : Long_Float;
+ t, tmin, tmax, tjump, dt, noise : Long_Float;
+ legline : Stripchart_Label_String_Array_Type :=
+ (To_Unbounded_String("sum"),
+ To_Unbounded_String("sin"),
+ To_Unbounded_String("sin*noi"),
+ To_Unbounded_String("sin+noi"));
+ Random_Generator : Generator; -- From Ada.Numerics.Float_Random
+begin
+ -- plplot initialization
+ -- Parse and process command line arguments
+ plparseopts(PL_PARSE_FULL);
+
+ -- If db is used the plot is much more smooth. However, because of the
+ -- async X behaviour, one does not have a real-time scripcharter.
+ plsetopt("db", "");
+ plsetopt("np", "");
+
+ -- User sets up plot completely except for window and data
+ -- Eventually settings in place when strip chart is created will be
+ -- remembered so that multiple strip charts can be used simultaneously.
+
+ -- Specify some reasonable defaults for ymin and ymax
+ -- The plot will grow automatically if needed (but not shrink)
+ ymin := -0.1;
+ ymax := 0.1;
+
+ -- Specify initial tmin and tmax -- this determines length of window.
+ -- Also specify maximum jump in t
+ -- This can accomodate adaptive timesteps
+ tmin := 0.0;
+ tmax := 10.0;
+ tjump := 0.3; -- percentage of plot to jump
+
+ -- Axes options same as plbox.
+ -- Only automatic tick generation and label placement allowed.
+ -- Eventually I'll make this fancier.
+ colbox := 1;
+ collab := 3;
+
+ styline(0) := 2; -- pens line style
+ styline(1) := 3;
+ styline(2) := 4;
+ styline(3) := 5;
+
+ colline(0) := 2; -- pens color
+ colline(1) := 3;
+ colline(2) := 4;
+ colline(3) := 5;
+
+ xlab := 0.0; -- legend position
+ ylab := 0.25;
+
+ autoy := True; -- autoscale y
+ acc := True; -- don't scrip, accumulate
+
+ -- Initialize plplot
+ plinit;
+
+ pladv(0);
+ plvsta;
+
+ -- Register our error variables with PLplot
+ -- From here on, we're handling all errors here
+ -- plsError(pl_errcode, errmsg);
+
+ -- Ada note: plsError is not yet implemented in Ada. Thus, pl_errcode is
+ -- hardwired to 0 for now and no effective error handling is done.
+
+ plstripc(id1, "bcnst", "bcnstv",
+ tmin, tmax, tjump, ymin, ymax,
+ xlab, ylab,
+ autoy, acc,
+ colbox, collab,
+ colline, styline, legline,
+ "t", "", "Strip chart demo");
+
+ -- Ada note: this would handle errors if error handling were implemented.
+ if pl_errcode /= 0 then
+ Put_Line("There was a problem which caused the program to quit.");
+ plend;
+ return;
+ end if;
+
+ -- Let plplot handle errors from here on
+ -- plsError(NULL, NULL);
+
+ autoy := False; -- autoscale y
+ acc := True; -- accumulate
+
+ -- This is to represent a loop over time
+ -- Let's try a random walk process
+ y1 := 0.0;
+ y2 := 0.0;
+ y3 := 0.0;
+ y4 := 0.0;
+
+ dt := 0.1;
+
+ for n in 0 .. nsteps - 1 loop
+ -- The Ada standard requires that the delay statement have a granularity
+ -- of at most 20 ms but strongly recommends at most 100 microseconds.
+ -- We'll try 10 ms to match the C example, x17c, but in theory this
+ -- might fail to compile on some Ada systems. If so, the cure is to set
+ -- the delay to 0.02.
+ delay 0.01; -- wait a little (10 ms) to simulate time elapsing
+ t := Long_Float(n) * dt;
+ noise := Long_Float(Random(Random_Generator)) - 0.5;
+ y1 := y1 + noise;
+ y2 := sin(t * pi / 18.0);
+ y3 := y2 * noise;
+ y4 := y2 + noise / 3.0;
+
+ -- There is no need for all pens to have the same number of
+ -- points or being equally time spaced.
+ if n mod 2 /= 0 then
+ plstripa(id1, 0, t, y1);
+ end if;
+
+ if n mod 3 /= 0 then
+ plstripa(id1, 1, t, y2);
+ end if;
+
+ if n mod 4 /= 0 then
+ plstripa(id1, 2, t, y3);
+ end if;
+
+ if n mod 5 /= 0 then
+ plstripa(id1, 3, t, y4);
+ end if;
+ pleop; -- use double buffer (-db on command line)
+ end loop;
+
+ -- Destroy strip chart and its memory
+ plstripd(id1);
+ plend;
+end x17a;
Property changes on: trunk/examples/ada/x17a.adb.cmake
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/examples/ada/xthick14a.adb.cmake
===================================================================
--- trunk/examples/ada/xthick14a.adb.cmake (rev 0)
+++ trunk/examples/ada/xthick14a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615)
@@ -0,0 +1,371 @@
+-- $Id$
+
+-- Demo of multiple stream/window capability (requires Tk or Tcl-DP).
+
+-- Maurice LeBrun
+-- IFS, University of Texas at Austin
+
+-- Copyright (C) 2008 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
+ System,
+ Ada.Text_IO,
+ Ada.Strings,
+ Ada.Strings.Fixed,
+ Ada.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ PLplot,
+ PLplot_Auxiliary;
+use
+ Ada.Text_IO,
+ Ada.Numerics,
+ Ada.Strings,
+ Ada.Strings.Fixed,
+ Ada.Strings.Unbounded,
+ Ada.Numerics.Long_Elementary_Functions,
+ PLplot,
+ PLplot_Auxiliary;
+
+-- 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;
+@Ada_Is_2007_With_and_Use_Numerics@
+
+------------------------------------------------------------------------------
+-- Plots several simple functions from other example programs.
+--
+-- This version sends the output of the first 4 plots (one page) to two
+-- independent streams.
+------------------------------------------------------------------------------
+
+procedure xthick14a is
+ -- Select either TK or DP driver and use a small window
+ -- Using DP results in a crash at the end due to some odd cleanup problems
+ -- The geometry strings MUST be in writable memory
+ geometry_master : String := "500x410+100+200";
+ geometry_slave : String := "500x410+650+200";
+ driver : Unbounded_String;
+ digmax : Integer;
+ xscale, yscale, xoff, yoff : Long_Float;
+ xs, ys : Real_Vector(0 .. 5);
+ space0 : Integer_Array_1D(1 .. 1) := (Others => 0);
+ mark0 : Integer_Array_1D(1 .. 1) := (Others => 0);
+ space1 : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ mark1 : Integer_Array_1D(1 .. 1) := (Others => 1500);
+
+ 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) * x(i);
+ 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 PLENV. 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_Pen_Color(Red);
+ Set_Environment(xmin, xmax, ymin, ymax, Not_Justified, Linear_Box_Plus);
+ Set_Pen_Color(Wheat);
+ Write_Labels("(x)", "(y)", "#frPLplot Example 1 - y=x#u2");
+
+ -- Plot the data points
+ Set_Pen_Color(Blue);
+ Draw_Points(xs, ys, 9);
+
+ -- Draw the line through the data
+ Set_Pen_Color(Aquamarine);
+ Draw_Curve(x, y);
+ Flush_Output_Stream;
+ 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_Pen_Color(Red);
+ Set_Environment(-2.0, 10.0, -0.4, 1.2, Not_Justified, Linear_Zero_Axes);
+ Set_Pen_Color(Yellow);
+ Write_Labels("(x)", "sin(x)/x", "#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_Pen_Color(Green);
+ Draw_Curve(x, y);
+ Flush_Output_Stream;
+ end plot2;
+
+ -- ================================================================
+
+
+ procedure plot3 is
+ x, y : Real_Vector(0 .. 100);
+ begin
+ -- For the final graph we wish to override the default tick intervals, and
+ -- so do not use PLENV
+
+ 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_Pen_Color(Red);
+ Box_Around_Viewport("bcnst", 60.0, 2, "bcnstv", 0.2, 2);
+
+ -- Superimpose a dashed line grid, with 1.5 mm marks and spaces.
+ Set_Line_Style(mark1, space1);
+ Set_Pen_Color(Yellow);
+ Box_Around_Viewport("g", 30.0, 0, "g", 0.2, 0);
+ Set_Line_Style(Default_Continuous_Line);
+
+ Set_Pen_Color(Green);
+ Write_Labels("Angle (degrees)", "sine", "#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_Pen_Color(Aquamarine);
+ Draw_Curve(x, y);
+ Flush_Output_Stream;
+ end plot3;
+
+ -- ================================================================
+
+
+ procedure plot4 is
+ dtr, theta, dx, dy, r : Long_Float;
+ x, y, x0, y0 : Real_Vector(0 .. 360);
+ begin
+ dtr := pi / 180.0;
+ for i in x0'range loop
+ x0(i) := cos(dtr * Long_Float(i));
+ y0(i) := sin(dtr * Long_Float(i));
+ end loop;
+
+ -- Set up viewport and window, but do not draw box
+ Set_Environment(-1.3, 1.3, -1.3, 1.3, Justified, No_Box);
+ for i in 1 .. 10 loop
+ for j in x'range loop
+ x(j) := 0.1 * Long_Float(i) * x0(j);
+ y(j) := 0.1 * Long_Float(i) * y0(j);
+ end loop;
+
+ -- Draw circles for polar grid
+ Draw_Curve(x, y);
+ end loop;
+
+ Set_Pen_Color(Yellow);
+ for i in 0 .. 11 loop
+ theta := 30.0 * Long_Float(i);
+ dx := cos(dtr * theta);
+ dy := sin(dtr * theta);
+
+ -- Draw radial spokes for polar grid
+ Draw_Line(0.0, 0.0, dx, dy);
+
+ -- Write labels for angle
+ -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg.
+ if dx >= -0.00001 then
+ Write_Text_World(dx, dy, dx, dy, -0.15, Trim(Integer'image(Integer(theta)), Left));
+ else
+ Write_Text_World(dx, dy, -dx, -dy, 1.15, Trim(Integer'image(Integer(theta)), Left));
+ end if;
+ end loop;
+
+ -- Draw the graph
+ for i in x'range loop
+ r := sin(dtr * Long_Float(5 * i));
+ x(i) := x0(i) * r;
+ y(i) := y0(i) * r;
+ end loop;
+ Set_Pen_Color(Green);
+ Draw_Curve(x, y);
+
+ Set_Pen_Color(Aquamarine);
+ Write_Text_Viewport("t", 2.0, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh");
+ Flush_Output_Stream;
+ end plot4;
+
+ -- ================================================================
+
+
+ -- Demonstration of contour plotting
+ procedure plot5 is
+ XPTS : constant Integer := 35;
+ YPTS : constant Integer := 46;
+ -- Transformation function
+ XSPA : Long_Float := 2.0 / Long_Float(XPTS - 1);
+ YSPA : Long_Float := 2.0 / Long_Float(YPTS - 1);
+ tr : Real_Vector(0 .. 5) := (XSPA, 0.0, -1.0, 0.0, YSPA, -1.0);
+ xx, yy : Long_Float;
+ mark : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ space : Integer_Array_1D(1 .. 1) := (Others => 1500);
+ z, w : Real_Matrix(0 .. XPTS -1, 0 .. YPTS - 1);
+ clevel : Real_Vector(0 .. 10) :=
+ (-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0);
+
+ procedure mypltr -- This spec is necessary to accommodate pragma Convention(C...).
+ (x, y : Long_Float;
+ tx, ty : out Long_Float;
+ pltr_data : PLpointer);
+ pragma Convention(Convention => C, Entity => mypltr);
+
+ procedure mypltr
+ (x, y : Long_Float;
+ tx, ty : out Long_Float;
+ pltr_data : PLpointer)
+ is
+ begin
+ tx := tr(0) * x + tr(1) * y + tr(2);
+ ty := tr(3) * x + tr(4) * y + tr(5);
+ end mypltr;
+
+ begin
+ for i in z'range(1) loop
+ xx := Long_Float(i - (XPTS / 2)) / Long_Float(XPTS / 2);
+ for j in z'range(2) loop
+ yy := Long_Float(j - (YPTS / 2)) / Long_Float(YPTS / 2) - 1.0;
+ z(i, j) := xx * xx - yy * yy;
+ w(i, j) := 2.0 * xx * yy;
+ end loop;
+ end loop;
+
+ Set_Environment(-1.0, 1.0, -1.0, 1.0, Not_Justified, Linear_Box_Plus);
+ Set_Pen_Color(Yellow);
+ Contour_Plot(z, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address);
+ Set_Line_Style(mark, space);
+ Set_Pen_Color(Green);
+ Contour_Plot(w, 1, XPTS, 1, YPTS, clevel, mypltr'Unrestricted_Access, System.Null_Address);
+ Set_Pen_Color(Red);
+ Write_Labels("X Coordinate", "Y Coordinate", "Streamlines of flow");
+ Flush_Output_Stream;
+ end plot5;
+
+
+begin
+ -- plplot initialization
+ -- Parse and process command line arguments
+ Parse_Command_Line_Arguments(Parse_Full);
+
+ driver := To_Unbounded_String(Get_Device_Name);
+
+ Put_Line("Demo of multiple output streams via the " & Get_Device_Name & "driver.");
+ Put_Line("Running with the second stream as slave to the first.");
+ New_Line;
+
+ -- Set up first stream
+ Set_Command_Line_Option("geometry", geometry_master);
+
+ Set_Device_Name(To_String(driver));
+ Set_Number_Of_Subpages(2, 2);
+ Initialize_PLplot;
+
+ -- Start next stream
+ Set_Stream_Number(1);
+
+ -- Turn off pause to make this a slave (must follow master)
+ Set_Command_Line_Option("geometry", geometry_slave);
+ Set_Pause(False);
+ Set_Device_Name(To_String(driver));
+ Initialize_PLplot;
+
+ -- Set up the data & plot
+ -- Original case
+ Set_Stream_Number(0);
+
+ xscale := 6.0;
+ yscale := 1.0;
+ xoff := 0.0;
+ yoff := 0.0;
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 1.0e+6;
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 1.0e-6;
+ digmax := 2;
+ Set_Floating_Point_Display_Y(digmax, 0);
+ plot1;
+
+ -- Set up the data & plot
+ xscale := 1.0;
+ yscale := 0.0014;
+ yoff := 0.0185;
+ digmax := 5;
+ Set_Floating_Point_Display_Y(digmax, 0);
+ plot1;
+
+ -- To slave
+ -- The Eject_Current_Page ensures the eop indicator gets lit.
+ Set_Stream_Number(1);
+ plot4;
+ Eject_Current_Page;
+
+ -- Back to master
+ Set_Stream_Number(0);
+ plot2;
+ plot3;
+
+ -- To slave
+ Set_Stream_Number(1);
+ plot5;
+ Eject_Current_Page;
+
+ -- Back to master to wait for user to advance
+ Set_Stream_Number(0);
+ Eject_Current_Page;
+
+ -- Call End_PLplot to finish off.
+ End_PLplot;
+end xthick14a;
Property changes on: trunk/examples/ada/xthick14a.adb.cmake
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Added: trunk/examples/ada/xthick17a.adb.cmake
===================================================================
--- trunk/examples/ada/xthick17a.adb.cmake (rev 0)
+++ trunk/examples/ada/xthick17a.adb.cmake 2008-08-08 00:20:10 UTC (rev 8615)
@@ -0,0 +1,188 @@
+-- $Id$
+
+-- Plots a simple stripchart with four pens.
+
+-- Copyright (C) 2008 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.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ Ada.Numerics.Float_Random,
+ PLplot,
+ PLplot_Auxiliary;
+use
+ Ada.Text_IO,
+ Ada.Strings.Unbounded,
+ Ada.Numerics,
+ Ada.Numerics.Long_Elementary_Functions,
+ Ada.Numerics.Float_Random,
+ PLplot,
+ PLplot_Auxiliary;
+
+-- 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;
+@Ada_Is_2007_With_and_Use_Numerics@
+
+procedure xthick17a is
+ autoy, acc : Boolean;
+ pl_errcode : Integer := 0;
+ id1 : Integer;
+ nsteps : Integer := 1000;
+ colbox, collab : Integer;
+ colline, styline : Integer_Array_1D(0 .. 3);
+ y1, y2, y3, y4, ymin, ymax, xlab, ylab : Long_Float;
+ t, tmin, tmax, tjump, dt, noise : Long_Float;
+ legline : Stripchart_Label_String_Array_Type :=
+ (To_Unbounded_String("sum"),
+ To_Unbounded_String("sin"),
+ To_Unbounded_String("sin*noi"),
+ To_Unbounded_String("sin+noi"));
+ Random_Generator : Generator; -- From Ada.Numerics.Float_Random
+begin
+ -- plplot initialization
+ -- Parse and process command line arguments
+ Parse_Command_Line_Arguments(Parse_Full);
+
+ -- If db is used the plot is much more smooth. However, because of the
+ -- async X behaviour, one does not have a real-time scripcharter.
+ Set_Command_Line_Option("db", "");
+ Set_Command_Line_Option("np", "");
+
+ -- User sets up plot completely except for window and data
+ -- Eventually settings in place when strip chart is created will be
+ -- remembered so that multiple strip charts can be used simultaneously.
+
+ -- Specify some reasonable defaults for ymin and ymax
+ -- The plot will grow automatically if needed (but not shrink)
+ ymin := -0.1;
+ ymax := 0.1;
+
+ -- Specify initial tmin and tmax -- this determines length of window.
+ -- Also specify maximum jump in t
+ -- This can accomodate adaptive timesteps
+ tmin := 0.0;
+ tmax := 10.0;
+ tjump := 0.3; -- percentage of plot to jump
+
+ -- Axes options same as Box_Around_Viewport.
+ -- Only automatic tick generation and label placement allowed.
+ -- Eventually I'll make this fancier.
+ colbox := 1;
+ collab := 3;
+
+ styline(0) := 2; -- pens line style
+ styline(1) := 3;
+ styline(2) := 4;
+ styline(3) := 5;
+
+ colline(0) := 2; -- pens color
+ colline(1) := 3;
+ colline(2) := 4;
+ colline(3) := 5;
+
+ xlab := 0.0; -- legend position
+ ylab := 0.25;
+
+ autoy := True; -- autoscale y
+ acc := True; -- don't scrip, accumulate
+
+ -- Initialize plplot
+ Initialize_PLplot;
+
+ Advance_To_Subpage(Next_Subpage);
+ Set_Viewport_Standard;
+
+ -- Register our error variables with PLplot
+ -- From here on, we're handling all errors here
+ -- plsError(pl_errcode, errmsg);
+
+ -- Ada note: plsError is not yet implemented in Ada. Thus, pl_errcode is
+ -- hardwired to 0 for now and no effective error handling is done.
+
+ Create_Stripchart(id1, "bcnst", "bcnstv",
+ tmin, tmax, tjump, ymin, ymax,
+ xlab, ylab,
+ autoy, acc,
+ colbox, collab,
+ colline, styline, legline,
+ "t", "", "Strip chart demo");
+
+ -- Ada note: this would handle errors if error handling were implemented.
+ if pl_errcode /= 0 then
+ Put_Line("There was a problem which caused the program to quit.");
+ End_PLplot;
+ return;
+ end if;
+
+ -- Let plplot handle errors from here on
+ -- plsError(NULL, NULL);
+
+ autoy := False; -- autoscale y
+ acc := True; -- accumulate
+
+ -- This is to represent a loop over time
+ -- Let's try a random walk process
+ y1 := 0.0;
+ y2 := 0.0;
+ y3 := 0.0;
+ y4 := 0.0;
+
+ dt := 0.1;
+
+ for n in 0 .. nsteps - 1 loop
+ -- The Ada standard requires that the delay statement have a granularity
+ -- of at most 20 ms but strongly recommends at most 100 microseconds.
+ -- We'll try 10 ms to match the C example, x17c, but in theory this
+ -- might fail to compile on some Ada systems. If so, the cure is to set
+ -- the delay to 0.02.
+ delay 0.01; -- wait a little (10 ms) to simulate time elapsing
+ t := Long_Float(n) * dt;
+ noise := Long_Float(Random(Random_Generator)) - 0.5;
+ y1 := y1 + noise;
+ y2 := sin(t * pi / 18.0);
+ y3 := y2 * noise;
+ y4 := y2 + noise / 3.0;
+
+ -- There is no need for all pens to have the same number of
+ -- points or being equally time spaced.
+ if n mod 2 /= 0 then
+ Update_Stripchart(id1, 0, t, y1);
+ end if;
+
+ if n mod 3 /= 0 then
+ Update_Stripchart(id1, 1, t, y2);
+ end if;
+
+ if n mod 4 /= 0 then
+ Update_Stripchart(id1, 2, t, y3);
+ end if;
+
+ if n mod 5 /= 0 then
+ Update_Stripchart(id1, 3, t, y4);
+ end if;
+ Eject_Current_Page; -- use double buffer (-db on command line)
+ end loop;
+
+ -- Destroy strip chart and its memory
+ Delete_Stripchart(id1);
+ End_PLplot;
+end xthick17a;
Property changes on: trunk/examples/ada/xthick17a.adb.cmake
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision
Added: svn:eol-style
+ native
Modified: trunk/plplot_test/test_ada.sh.in
===================================================================
--- trunk/plplot_test/test_ada.sh.in 2008-08-07 22:04:50 UTC (rev 8614)
+++ trunk/plplot_test/test_ada.sh.in 2008-08-08 00:20:10 UTC (rev 8615)
@@ -29,10 +29,10 @@
# Do the standard non-interactive examples.
for index in \
01 02 03 04 05 06 07 08 09 \
-10 11 12 13 15 16 18 19 \
+10 11 12 13 14 15 16 17 18 19 \
21 22 23 24 25 26 27 28 29 30 \
thick01 thick02 thick03 thick04 thick05 thick06 thick07 thick08 thick09 \
-thick10 thick11 thick12 thick13 thick15 thick16 thick18 thick19 \
+thick10 thick11 thick12 thick13 thick14 thick15 thick16 thick17 thick18 thick19 \
thick21 thick22 thick23 thick24 thick25 thick26 thick27 thick28 thick29 thick30; do
$adadir/x${index}a -dev $device -o ${OUTPUT_DIR}/x${index}a.$dsuffix $options 2> test.error
status_code=$?
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|