After several discussions with DanRRight by private mail regarding a suspected bug in %PL, I agreed to look at his test code, which has been crashing in a way that has eluded demonstration in a short 'reproducer'. See, for example, his thread, https://forums.silverfrost.com/Forum/Topic/3579 .
That code was about 3600 lines long, and needed to read data files as large as 82 MB in order to run. I have reduced the code to a single source file of about 300 lines, with no need for any data files (instead, the plot data are generated from simple sine/cosine expressions). The bug can be reproduced as follows.
Download the source file from https://www.dropbox.com/s/uyp7ju3ust7rzbl/crashpl.7z?dl=0 .
Using FTN95 8.4, 8.50 or 8.51, compile (32- or 64-bit) and link with any options that you wish, including /CHECKMATE, /UNDEF and /DEBUG.
Run the program. It will show a pop-up for a couple of seconds, and then it will show an input window with Dan's controls and file names.
Without changing any settings, click on 'Crashing Case'. A plot window will pop up. In the plot window, top left, you will see both 'Plot case 1' and 'Plot Case 2' selected.
Deselect one of the two plot cases by clicking on one of the two radio buttons. The graphs will be blanked, and you will receive a crash report (with line numbers if a debugging option was used to compile, machine addresses otherwise). The error message is 'Invalid data value supplied to %PL at address xxxxxxxx'. The line of code in our Fortran source that caused the exception in CLEARWIN64.DLL reads
call simpleplot_redraw@()
at line 292 of the source file.
P.S.: I am not a user of the WINIO@ facility in ClearWin+, and I realise that a sequence of WINIO@ calls in the wrong order and/or with wrong arguments can cause WINIO@ to fail. In the example, however, there is only a call to redraw@ -- no arguments passed at all. If there was an 'Invalid data value supplied', was it a saved value from one of the previous WINIO@ calls, or was it generated and passed by the Clearwin library itself? If redraw@() causes previously stored WINIO@ calls to be repeated, the user should be told which call it was (and which data values were supplied) that caused the abort.