From 622e9d6176bbb670fd2f36a4ccf2ba37418cb948 Mon Sep 17 00:00:00 2001 From: Tonton Th Date: Thu, 23 Apr 2026 19:25:22 +0200 Subject: [PATCH] the start of a new adventure --- .gitignore | 10 +++++++ Makefile | 19 ++++++++++++ README.md | 10 ++++++- exemples.md | 10 +++++++ genplotting.f90 | 76 +++++++++++++++++++++++++++++++++++++++++++++++ picz/spirale.png | Bin 0 -> 7526 bytes spirale.f90 | 34 +++++++++++++++++++++ usage.md | 22 ++++++++++++++ 8 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 exemples.md create mode 100644 genplotting.f90 create mode 100644 picz/spirale.png create mode 100644 spirale.f90 create mode 100644 usage.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b89aea2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.mod +*.o +*.scratch +*.tga + +*.png +!picz/*.png + +spirale + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1a2d8c5 --- /dev/null +++ b/Makefile @@ -0,0 +1,19 @@ + +all: spirale.png + +# ----------------------------------------------- + +genplotting.o: genplotting.f90 Makefile + gfortran -Wall -c $< + +# ----------------------------------------------- + +spirale: spirale.f90 Makefile genplotting.o + gfortran -Wall $< genplotting.o -o $@ + +spirale.png: spirale Makefile + ./spirale > s.scratch + genplot2 -s 512x512 s.scratch a.tga + convert a.tga $@ + +# ----------------------------------------------- diff --git a/README.md b/README.md index 23c75a7..d4f12cb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ # GenPlotting90 -Diverses tentatives de dessins inutiles avec du Fortran moderne. Croisimot #UselessGraphic dans le grabd Ternet sauvage. \ No newline at end of file +Voici quelques tentatives de dessins inutiles réalisés avec du +[Fortran moderne](https://fortran-lang.org/fr/learn/), et quelques +morceaux de C parce que *why not ?* + +Un peu de lecture : [utilisation](usage.md) et [exemples](exemples.md). + +Vous pouvez suivre le croisimot [#UselessGraphic](https://mastodon.tetaneutral.net/tags/uselessgraphic) +dans le grand Ternet sauvage. Pour me contacter, il faut utiliser les +[méthodes]( diff --git a/exemples.md b/exemples.md new file mode 100644 index 0000000..8feb147 --- /dev/null +++ b/exemples.md @@ -0,0 +1,10 @@ +# Genplotting exemples + +## Spiral + +Code source : [spirale.f90](spirale.f90) / if you change the parameter +in the call to `do_spirale`, you can see some nice variations on the +spiraling thing. + +![#UselessGraphic : la spirale](picz/spirale.png) + diff --git a/genplotting.f90 b/genplotting.f90 new file mode 100644 index 0000000..a03f09c --- /dev/null +++ b/genplotting.f90 @@ -0,0 +1,76 @@ +! SPIRALING... +! new Thu Apr 23 01:13.37 PM UTC 2026 +! +module genplotting + implicit none + + real :: xmin, xmax, ymin, ymax + private :: xmin, xmax, ymin, ymax + + real :: xoffset, yoffset, xscale, yscale + private :: xoffset, yoffset, xscale, yscale + + integer :: outunit + private :: outunit + +contains +! --------------------------------------------------------- +subroutine genp_init (foo, fname) + integer, intent(in) :: foo + character (len=*), intent(in) :: fname + + outunit = 6 ! stdout + if (len(fname) .gt. 0) then + write (0, '("genplot init opening : ", A)') fname + open(newunit=outunit,file=fname) + endif + + xmin = 9e9 ; xmax = -9e9 + ymin = 9e9 ; ymax = -9e9 + xoffset = 0.0 ; yoffset = 0.0 + xscale = 0.0 ; yscale = 0.0 +end subroutine +! --------------------------------------------------------- +subroutine genp_move (px, py) + real, intent(in) :: px, py + write (outunit, '(2F12.5, I5)') px, py, -1 + if (px .lt. xmin) xmin = px + if (px .gt. xmax) xmax = px + if (py .lt. ymin) ymin = py + if (py .gt. ymax) ymax = py +end subroutine +! --------------------------------------------------------- +subroutine genp_draw (px, py, color) + real, intent(in) :: px, py + integer, intent(in) :: color + write (outunit, '(2F12.5, I5)') px, py, color + if (px .lt. xmin) xmin = px + if (px .gt. xmax) xmax = px + if (py .lt. ymin) ymin = py + if (py .gt. ymax) ymax = py +end subroutine +! --------------------------------------------------------- +! --------------------------------------------------------- +subroutine genp_end (foo) + integer, intent(in) :: foo + + write (0, '("--- genp_end ---")') + write (0, '("minmax X", 2F16.5)') xmin, xmax + write (0, '("minmax Y", 2F16.5)') ymin, ymax + + write (outunit, '(2F16.5, I6)') xmin*1.05, ymin*1.05, -1 + write (outunit, '(2F16.5, I6)') xmin*1.05, ymax*1.05, 0 + write (outunit, '(2F16.5, I6)') xmax*1.05, ymax*1.05, 0 + write (outunit, '(2F16.5, I6)') xmax*1.05, ymin*1.05, 0 + write (outunit, '(2F16.5, I6)') xmin*1.05, ymin*1.05, 0 + close (outunit) + + if (6 .ne. outunit) then + write (0, '("genp_end on ", I6, " is ", I6)') outunit, foo + endif + +end subroutine +! --------------------------------------------------------- +! --------------------------------------------------------- + +end module genplotting diff --git a/picz/spirale.png b/picz/spirale.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b6ef7143dbd94fb097465d7882cf078c9d3a6f GIT binary patch literal 7526 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