The FILE='USER' option in the
statement opens a child window. The child window defaults to a scrollable text window, 30 rows by 80 columns. You can open up to 40 child windows.
When a file OPEN that specifies " file='user' " is issued for a program built with /libs:qwin (or /MW), special processing takes place to handle this as a graphics window. The user can then write and or read to this window by issuing READ and WRITE statements with the same unit number.
There are some api's that manipulate the window via unit number (e.g., setwsizeqq(), and others that manipulate it because focus has been set to that window. The FRTL automatically sets focus to the last window accessed. Thus, after an open, read, or write to unit number - focus is set to that window, and subsequent api calls such as setbkcolorrgb(), which sets the background color, works for this window.
Running a QuickWin application displays the frame window, but not the child window. You must call
or execute an I/O statement or a graphics statement to display the child window. The window receives output by its unit number, as in:
OPEN (UNIT= 12, FILE= 'USER', TITLE= 'Product Matrix')
WRITE (12, *) 'Enter matrix type: '
Child windows opened with FILE='USER' must be opened as sequential-access formatted files (the default). Other file specifications (direct-access, binary, or unformatted) result in run-time errors.
The following example creates three child windows. A frame window is automatically created. Text is written to each so the child windows are visible:
write(11,*) "Hello 11"
write(12,*) "Hello 12"
write(13,*) "Hello 13"
write(13,*) "Windows 11, 12, and 13 can be read and written with normal"
write(13,*) "Fortran I/O statements. The size of each window on the screen"
write(13,*) "can be modified by SETWSIZEQQ. The size of the virtual window"
write(13,*) "(i.e., a data buffer) can be modified by SETWINDOWCONFIG."
When this program is run, the output appears as follows:
To use the default graphics window, you should use units *, 5, or 6.
In the example below, if you comment out the " open(7, …" statement, and substitute the existing unit 7's with either *, or 6 for the WRITES and 5 for the READs, then the program should behave the same. API's such as " SETWSIZEQQ(7 , …" should specify either 5 or 6, because * is not a valid integer. One issue with using a default graphics window is that you cannot change the title of it from the default title.
ifort /threads /Qsave /traceback /libs:qwin simple_example.f90
type(qwinfo) :: FrameSize, Win1Size
integer(2) :: i2Status
integer(4) :: i4Status,i4NumQ, i4Columns, i4LetterX, i4LetterY
logical(4) :: L4Status
character(1) :: c1YesNo
i4LetterX=8 ! Height and width of the text font
! Frame-Window as wide as screen but half the height
FrameSize.H=FrameSize.H/2 !! set window height 1/2 of max height
FrameSize.W=FrameSize.W/3 !! set window width 1/3 of max width
i4Columns=FrameSize.W/i4LetterX -1 ! number of possible columns in each window
! Input-window for Main part
open(7, file='user',title="Main Input"C)
Win_MainInput.title="Main Input"C !! in addition to OPEN, title can also be specified by setwindowconfig()
i4Status=setbkcolorrgb(#FFFFFF) !! white background
i4Status=settextcolorrgb(#000000) !! black text
write(7,'("This is the Main Input window.",/)')
10 write(7,'("Type Y or y to Terminate this program: ",\)')
read(7,'(Q,A)') i4NumQ, c1YesNo
if (i4NumQ /= 1) goto 10
if (c1YesNo == 'Y' .or. c1YesNo == 'y') goto 20
END PROGRAM OneWindow