Fortran 90 Replace Text on Screen - Andy's Question

  • Context: Fortran 
  • Thread starter Thread starter Choragos
  • Start date Start date
  • Tags Tags
    Fortran
Click For Summary

Discussion Overview

The discussion centers around how to replace text on the screen in Fortran 90, particularly in the context of producing dynamic output such as progress indicators. Participants explore methods from earlier Fortran versions and seek solutions for achieving similar functionality in Fortran 90.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested

Main Points Raised

  • Andy mentions using the FORMAT statement in earlier Fortran versions to replace text on the screen and seeks a similar method in Fortran 90.
  • Some participants inquire about the original procedure used in previous versions of Fortran.
  • One participant suggests that the '+' character in the FORMAT statement was used for printer control and may not function as intended on screens.
  • Another participant introduces the concept of non-advancing I/O in Fortran 90, suggesting it could be used to display text without moving to the next line.
  • There is a discussion about using the T-descriptor for cursor movement, with some participants attempting to implement it but finding it does not overwrite existing text.
  • Multiple participants confirm that the T-descriptor does not allow for overwriting text, only advancing the cursor position.
  • One participant suggests that system calls may be necessary for the desired functionality, noting that this could be platform dependent.
  • There is a mention of using C libraries as a potential workaround for achieving the desired output behavior.

Areas of Agreement / Disagreement

Participants do not reach a consensus on a solution. There are multiple competing views regarding the capabilities of Fortran 90's I/O functions and the effectiveness of various formatting options.

Contextual Notes

Participants express uncertainty about the limitations of the T-descriptor and non-advancing I/O, noting that these methods do not achieve the intended result of overwriting text on the screen. The discussion also highlights the potential need for platform-specific solutions.

Choragos
Messages
20
Reaction score
0
Hello. In producing screen output from Fortran, I use the write statement. Back in the day, there was a way to use the FORMAT statement to allow you to replace text on the screen with different text. For example, counting up percentage complete of a process or something like that.

Well, Fortran 90 put the nix on that and now I don't know how to do it. For all of us who don't want to let go of our DOS prompts (or who sit in Linux command lines), is there a way to accomplish this task?

Thanks
Andy
 
Technology news on Phys.org
I've never heard of this. What was the procedure to do it in previous versions?
 
It was buried in the FORMAT statement. I believe this is how it was done (I had to change the code and I believe this was the original version):

15 format('+Processing decay number ',I6)

I believe it's that '+' sitting there. If that doesn't make any sense I'll go on the hunt and make sure this is the original version.
 
If I'm not mistaken, that only prevents advancement to the next line; it does not overwrite what is already there. I'll check it though and post results. Thanks!
 
Sorry I didn't see you post before sending out mine.
The '+' character was used for printer control in the good old days where we have a $35000 line printer but no screen. The printer control will simply be displayed on the screen but won't halt the advance of the cursor. See post #4 for details.
 
To move the cursor horizontally, you could use the T-descriptor (tab).
The T-descriptor goes to the absolute column, while the TL and TR moves the cursor to the left or the right (relative movement) respectively.
Try:
http://docs.hp.com/en/B3908-90002/ch09s03.html#d0e22660
 
Last edited by a moderator:
That looks like it will do it. Thank you.
 
If you got it to work, then let me know how you did. I wrote a quick sample program
Code:
PROGRAM test

do i=1,10
 WRITE(6,999,ADVANCE='NO') i
END DO

999 FORMAT(TL2I2.2)

END PROGRAM
Which outputs
Code:
01020304050607080910:~>
TRn and Tn both seem to skip the wrong way. I can't figure out how to overwrite.

p.s. Good fortran reference though
 
  • #10
Indeed, it isn't overwriting for me either. I'm using

10 FORMAT(TL2I2)

and

10 FORMAT(T1I2).

The formatting is working, except that T will not move the cursor back over what has been written. It will advance, but not go back.

Edit: by the way, I'm using both Intel and gfortran compilers.
 
  • #11
Indeed, it does not work between writes. It works only within the buffer, i.e. before the write statement is executed. So it doesn't do what you need to do.
It looks to me that you'll need some system calls, which unfortunately will be platform dependent. I know it is possible with Borland C which has a set of routines (conio.h) for that purpose. You may want to check out the versions of Fortran you're using to see if some equivalent library exists.
Another possibility is if your have called c-libraries before, you may want to take advantage of that.
Sorry folks, good try, but do post back if you find something. This will benefit everyone.
 

Similar threads

  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 16 ·
Replies
16
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 9 ·
Replies
9
Views
4K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 19 ·
Replies
19
Views
7K