forums.silverfrost.com Forum Index forums.silverfrost.com
Welcome to the Silverfrost forums
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CW_WRITE$ unresolved

 
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Support
View previous topic :: View next topic  
Author Message
MJW4498



Joined: 08 Dec 2023
Posts: 6

PostPosted: Fri Dec 08, 2023 6:17 pm    Post subject: CW_WRITE$ unresolved Reply with quote

Hello!

I'm having an issue where I'm not picking up the subroutine CW_WRITE$ in clearwin64. I'm working with the latest v9.00, however a colleague of mine is not having this issue and they are working in v8.80.

When I compile my program, I can see from the .map file that is is not picking up CW_WRITE:
---
CW_WRITE$ *Unresolved* -
---

I can see it is picking up some items from clearwin64.dll though (this is where it is picked up from for my colleague in v8.80), for example we have the following in the .map file:
---
COMMAND_LINE - CLEARWIN64.DLL
---

So the question is, is CW_WRITE$ actually in CLEARWIN64.dll?
I've noted that I can find the CW_WRITE$ subroutine within the program folder (C:\Program Files (x86)\Silverfrost\FTN95\source64) in clrwin.f95:
---
!! %cw functions...
subroutine cw_write$(unit,info)
integer(C_INT)::unit
character(len=*)::info
interface
subroutine cw_write$$(unit,info) bind(C,Name='__cw_write')
use ISO_C_BINDING
integer(C_INT),value::unit
character(kind=C_CHAR)::info(*)
end subroutine cw_write$$
end interface
call cw_write$$(unit,trim(info)//C_NULL_CHAR)
end subroutine cw_write$
---
This is then included in clearwin64f.f95. So I presume it makes its way into clearwin64f.dll, but does it get into clearwin64.dll?

Can anyone shed some light on this for me?

Thanks in advance!

[/u]
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Sat Dec 09, 2023 8:33 am    Post subject: Reply with quote

CW_WRITE$ is a routine that is used to output text to a ClearWin+ window that uses the %cw format code. It is provided for use with third party compilers such as gFortran.

When compiling with the native FTN95 compiler, CW_WRITE@ (or CW_WRITE$) is not needed because text can then be written to a %cw control using Standard conforming WRITE or PRINT statements.

CW_WRITE$ is exported from ClearWin64.dll as __cw_write so it needs an interface in order to access it from a Fortran program. For FTN95 users the interface is provided, for example, via USE clrwin.

The equivalent for gFortran users is USE clrwin$ but current usage requires that the user imports clrwin.f95 into their project. Alternatively you can extract the code that you have found and include the interface in your code.
Back to top
View user's profile Send private message AIM Address
MJW4498



Joined: 08 Dec 2023
Posts: 6

PostPosted: Mon Dec 11, 2023 12:10 pm    Post subject: Reply with quote

Thank you for this Paul.

Everything you have said is what we had understood, but in v8.80 we had to use CW_WRITE$ in the native FTN95 compiler.

Has something changed between v8.80 and v9.00?

Note: it was working in v8.80 but is not in v9.00. The maps in v8.80 show that the following are resolved:
---
__close_metafile - CLEARWIN64.DLL
__close_printer - CLEARWIN64.DLL
__cw_write - CLEARWIN64.DLL
__do_copies - CLEARWIN64.DLL
---
but in v9.00 the corresponding are not resolved:
---
CLOSE_METAFILE$ *Unresolved* -
CLOSE_PRINTER$ *Unresolved* -
CW_WRITE$ *Unresolved* -
DO_COPIES$ *Unresolved* -
---
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Mon Dec 11, 2023 2:58 pm    Post subject: Reply with quote

MJW4498

1) Is the failure occurring when you build with FTN95 or some other compiler?

2) How do you provide the interface for the missing routines? For example is it a USE statement and if it is what does it look like?
Back to top
View user's profile Send private message AIM Address
MJW4498



Joined: 08 Dec 2023
Posts: 6

PostPosted: Mon Dec 11, 2023 4:38 pm    Post subject: Reply with quote

Paul

1) Yes we're building with FTN95

2) It is the following use statement:
---
USE mswin$
---

Thanks
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Tue Dec 12, 2023 8:14 am    Post subject: Reply with quote

MJW4498

At the moment I don't understand how you managed to get this to work with either of these versions of FTN95. I would need more details of the history and perhaps copies of your v8.80 clearwin64.dll and clrwin$.mod64 in order to make progress. These might be different from the initial v8.80 release.

The current recommended practice is to import the interface source files from Silverfrost\FTN95\source64. Details are provided in the video https://www.youtube.com/watch?v=WM8XgsLGneo.

Here are two sample programs that illustrate how it works with v9.0

Code:
program cw
  use clrwin
  integer i,ctrl
  i=winio@('%30.3cw&',10)
  i=winio@('%lw',ctrl)
  call cw_write@(10,'Hello World.')
end


Code:
!Use /DOLLAR_MOD on the FTN95 command line.
include "\Program Files (x86)\Silverfrost\FTN95\source64\clrwin.f95"
program cw
  use clrwin$
  integer i,ctrl
  i=winio$('%30.3cw&',10)
  i=winio$('%lw',ctrl)
  call cw_write$(10,'Hello World.')
end
Back to top
View user's profile Send private message AIM Address
DanRRight



Joined: 10 Mar 2008
Posts: 2813
Location: South Pole, Antarctica

PostPosted: Tue Dec 12, 2023 1:50 pm    Post subject: Reply with quote

I have no clue why to use cw_write@(10,'Hello world') when just usual write(10,*)'Hello world' is doing the same plus much much more. Does it allow to colorize the text and write it with fonts of different size mixing them on the fly?

By the way the demo Paul showed in the previous post I often use as a substitution for Windows or Linux (under WINE) own Command prompt window. Add color to its background and make different units to separate different streams of output data. You will not lose anything after closing them, such windows have practically infinite write capacity and In Linux you can open and close such windows and nothing will happen with the continuing writing code, no crash or stop. Open and close of them is just one click, you choose your own much nicer looking fonts
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Tue Dec 12, 2023 3:08 pm    Post subject: Reply with quote

Dan

Please see my post of 9 December.
Back to top
View user's profile Send private message AIM Address
MJW4498



Joined: 08 Dec 2023
Posts: 6

PostPosted: Wed Dec 13, 2023 3:17 pm    Post subject: Reply with quote

Hi Paul,

Thank you for this.

Our generalised code for 32-bit / 64-bit compilation (last worked on in 8.80) has winio$ and cw_write$ functions. We've tried your first example (which ran successfully in v9.00) so my colleague suggested trying cw_write@ instead of cw_write$ for our code in v9.00, which does work.

Following this, we tried this back in v8.80, but it does not work there. So, something in handling @/$ appears to have changed between v8.80 and v9.00.

My colleague did say that when he did the original preparation for 64-bit he found this confusing, and sometimes had to just change between them from what he expected to the other to get things to work (just presumed it was an error in his expectation, rather than a bug). Now he's just confused!
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Wed Dec 13, 2023 3:33 pm    Post subject: Reply with quote

MJW4498

Is this issue resolved now?

Just to be clear, cw_write$ is only provided for third party compilers such as gFortran. If you are not using a third party compiler then PRINT is preferred to cw_write$.

In other words %cw normally communicates directly with the FTN95 IO system but this is not possible when using a third party compiler.
Back to top
View user's profile Send private message AIM Address
MJW4498



Joined: 08 Dec 2023
Posts: 6

PostPosted: Thu Dec 14, 2023 5:21 pm    Post subject: Reply with quote

Paul,

I wouldn't necessarily say that it is "Resolved", as we don't fully understand why the cw_write@/$ switch has to be done, but we are happy that we can continue.

Just to note, in 32-bit we used %cw for both output AND input (ie as a terminal). With 64-bit we have had to split off the "input" from the output. At that time, "write(10,*) 'hello world'" didn't work for us in 64-bit, but cw_write$ did (even though we were in Silverfrost throughout). As that coding worked for us we don't want to revisit it (we don't wish to play around with graphical interface, just get data into/out of the program while we concentrate on the core modelling algorithms).
Back to top
View user's profile Send private message
PaulLaidler
Site Admin


Joined: 21 Feb 2005
Posts: 7912
Location: Salford, UK

PostPosted: Thu Dec 14, 2023 6:17 pm    Post subject: Reply with quote

MJW4498

Thank you. That is sufficient for me to close this issue.
Back to top
View user's profile Send private message AIM Address
Display posts from previous:   
Post new topic   Reply to topic    forums.silverfrost.com Forum Index -> Support All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group