FPT and WinFPT Reference Manual - Command-line Commands
| SimCon Home | Reference Manual Home |
Syntax:
[DO NOT] CHANGE [ALL] I/O TO SUB-PROGRAM CALLS |
Licensing:
This command is supported by a special version of FPT developed in collaboration with Sector7 Inc. An additional licence is required for its use. Please contact customer support if this is required.
Important Note - Libraries for Use with this Command:
Please see the notes on Fortran compilation for the VX/Tools libraries.
Function:
This command is used when migrating code from VMS to other operating systems.
All Fortran I/O statements are replaced by calls to Sector7's VX/Tools RMS library routines. These are the statements introduced by the keywords:
ACCEPT BACKSPACE CLOSE DELETE
ENDFILE INQUIRE OPEN PRINT
READ REWRITE TYPE UNLOCK
WRITE
Note that terminal I/O statements are changed by this command. To leave terminal I/O unchanged, please use the command CHANGE FILE I/O TO SUB-PROGRAM CALLS.
Labelled Statements and IF Statement Clauses
When FPT modifies an I/O statement, it may replace a single statement with two or more statements. It is therefore necessary to remove labels, and to change IF statements which contain I/O sub-statements to IF-THEN-ELSE constructs. For example, the labelled statement:
DO 110 I=1,6 110 READ(4,IOSTAT=ISTAT)CAND(I)
becomes
DO 110 I=1,6 !110 READ(4, IOSTAT=ISTAT)CAND(I) CALL VXRMS_READ('UNIT=',4,'IOSTAT=',ISTAT,%VAL(0)) CALL VXRMS_FROM_BUFFER(CAND(I),124) 110 CONTINUE
In this case, the original statement label is moved to a CONTINUE statement after the original statement. If the label is a GOTO destination, the CONTINUE statement is written before the original statement. Please see the commands REMOVE LABELS FROM EXECUTABLE STATEMENTS and CHANGE IF TO IF-THEN for a description of this process.
Replacement of the I/O Statements
The original I/O statement is left in place in the code, but is commented-out. It is replaced by a subroutine call. The subroutines are:
Keyword |
Subroutine |
ACCEPT |
VXRMS_READ |
BACKSPACE |
VXRMS_BACKSPACE |
CLOSE |
VXRMS_CLOSE |
DELETE |
VXRMS_DELETE |
ENDFILE |
VXRMS_ENDFILE |
INQUIRE |
VXRMS_INQUIRE |
OPEN |
VXRMS_OPEN |
|
VXRMS_WRITE |
READ |
VXRMS_READ or VXRMS_FORMATTED_READ |
REWRITE |
VXRMS_REWRITE |
TYPE |
VXRMS_WRITE |
UNLOCK |
VXRMS_UNLOCK |
WRITE |
VXRMS_WRITE or VXRMS_FORMATTED_WRITE |
The I/O statement control list is replaced by a series of arguments in which the original argument labels are replaced by strings. Thus, for example:
OPEN (COLORLUN,FILE='COLOR.ISM',STATUS='OLD' 1 ,ORGANIZATION='INDEXED' 1 ,KEY=(1:8,9:16,17:40),ACCESS='KEYED',RECL=128, 1 ,IOSTAT=IOS)
becomes
CALL VXRMS_OPEN('UNIT=',COLORLUN,'FILE=','COLOR.ISM', 1 'STATUS=','OLD','ORGANIZATION=','INDEXED','KEY=',1,8, 1 'CHARACTER','ASCENDING','KEY=',9,16,'CHARACTER', 1 'ASCENDING','KEY=',17,40,'CHARACTER','ASCENDING', 1 'ACCESS=','KEYED','RECL=',128,'IOSTAT=',IOS,%VAL(0))
Note that the defaults UNIT= for the unit number and CHARACTER and ASCENDING for the key attributes have been supplied. The argument list is terminated by a null, written as %VAL(0).
In most cases, the argument labels are replaced by the label text, including the '=' sign if this is present, converted to a string. The argument labels KEY= in a READ statement (where it is a synonym for KEYEQ=), KEYEQ=, KEYGE=, KEYGT=, KEYLE= and KEYLT= are changed to strings which indicate the data type of the key. They become:
Label |
INTEGER*2 |
INTEGER*4 |
String |
|
Argument |
Argument |
Argument |
KEY= |
'I2KEYEQ=' |
'I4KEYEQ=' |
'SKEYEQ=' |
KEYEQ= |
'I2KEYEQ=' |
'I4KEYEQ=' |
'SKEYEQ=' |
KEYGE= |
'I2KEYGE=' |
'I4KEYGE=' |
'SKEYGE=' |
KEYGT= |
'I2KEYGT=' |
'I4KEYGT=' |
'SKEYGT= |
KEYLE= |
'I2KEYLE=' |
'I4KEYLE=' |
'SKEYLE=' |
KEYLT= |
'I2KEYLT=' |
'I4KEYLT=' |
'SKEYLT=' |
When an I/O list is also present, in READ, WRITE and REWRITE statements, the treatment depends on whether or not the file is formatted. If a format is specified, FPT writes data to, or reads data from an internal character array or file. The data is transferred to or from the target file by the VXRMS_READ, VXRMS_WRITE or VXRMS_REWRITE call. For example:
WRITE (INDXFMLUN,'(2A1,I12)') 1 CHAR(ICHAR('A')-1+I),CHAR(ICHAR('Z')+1-I),I
becomes
C WRITE (INDXFMLUN,'(2A1,I12)',IOSTAT=IOS) C 1 CHAR(ICHAR('A')-1+I),CHAR(ICHAR('Z')+1-I),I WRITE (VXRMS_BUFFER,FMT='(2A1,I12)')CHAR(ICHAR('A')-1+I), 1 CHAR(ICHAR('Z')+1-I),I CALL VXRMS_WRITE('UNIT=',INDXFMLUN,'IOSTAT=',IOS,%VAL(0))
If the I/O statement is unformatted, FPT writes the data to, or reads the data from a buffer, and the buffer is packed or unpacked by calls to the subroutines VXRMS_TO_BUFFER or VXRMS_FROM_BUFFER. These routines keep track of internal pointers into the buffer. The pointers are initialised by a call to VXRMS_INIT_BUFFER. For example:
READ (KEYEQ=4,UNIT=INDXUFLUN,IOSTAT=IOS)J,K
becomes
C READ (KEYEQ=4,UNIT=INDXUFLUN,IOSTAT=IOS)J,K CALL VXRMS_INIT_BUFFER CALL VXRMS_READ('I4KEYEQ=',4,'UNIT=',INDXUFLUN, 1 'IOSTAT=',IOS,%VAL(0)) CALL VXRMS_FROM_BUFFER(J,4) CALL VXRMS_FROM_BUFFER(K,4)
Diagnostic Returns
In cases where IOSTAT is not captured and there is no END= or ERR= handler, the VX/Tools run-time system handles any fatal error.
Insertion of Declarations
The COMMON block containing VXRMS_IOSTAT and the attributes of the other sub-programs are declared in the INCLUDE file vxrms_cmn.fpi. An INCLUDE statement is automatically inserted in the header of every sub-program which requires these declarations. vxrms_cmn.fpi is distributed as part of the VX/Tools library.
Where to use this command:
Operating system command line |
Yes |
|
Configuration file, config.fsp |
Yes |
|
Specification (FSP) files, *.fsp |
Yes |
|
Interactively, to FPT> prompt: |
Yes |
|
Interactive command files |
Yes |
|
Embedded in the Fortran code |
Yes |
|
Default:
I/O statements are not changed by default.
Copyright ©1995 to 2014 Software Validation Ltd. All rights reserved.