[Info-vax] Command Procedure pass value to program READ
HCorte
hmmbcorte at gmail.com
Tue Feb 8 11:38:00 EST 2022
A terça-feira, 8 de fevereiro de 2022 à(s) 15:19:36 UTC, abrsvc escreveu:
> On Tuesday, February 8, 2022 at 10:16:57 AM UTC-5, HCorte wrote:
> > Well the project that am working multiple executables the source code is using in the WRITE statements unit=5 instead of correct unit=6 that originates the following error when running the script to inject the params needed for the input's...
> >
> > %FOR-F-ERRDURWRI, error during write
> > unit 5 file SYS$INPUT:.;
> > user PC 00000000
> >
> > Since it detects that its a unit 5 assumes that is READ/SYS$INPUT when in fact for this specific cases its a Write... can't change the source code since this value is passed as parameter in multiple source code file, so gona have to give up the ideia of automatizing the running of a group of programs.
> >
> > Is there any reason one would use unit=5 for Write??
> >
> > ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > Three unit numbers are automatically associated with specific standard I/O files at the start of program execution. These preconnected units are standard input, standard output, and standard error:
> >
> > Standard input is logical unit 5 (also Fortran 90 unit 100)
> >
> > Standard output is logical unit 6 (also Fortran 90 unit 101)
> >
> > Standard error is logical unit 0 (also Fortran 90 unit 102)
> In older FORTRAN programs, writes to unit 5 were usually prompts to the user. I haven't seen this in many years though.
The source code of this subroutine is from the 90's, gona try later changing this subroutine itself and put a condition if its unit=5 change the value to unit=6.
Getting a behaviour when the WRITE uses format with editor descriptor $ when the script injects the input:
>@script
ENTER FILE NAME:
File Name is:
good
ENTER FILE NAME2: >
File Name is:
well
when the program run directly puts well
>r program_example
ENTER FILE NAME:
good
File Name is:
good
ENTER FILE NAME2: >well
File Name is:
well
is there a way to provide in the script to ignore the $ edit descriptor?
(https://docs.oracle.com/cd/E19957-01/805-4939/z400074387ff/index.html)
-----------------------------------------------------------------------------------------
the script
$!example
$!DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
$RUN PROGRAM_EXAMPLE
good
well
-----------------------------------------------------------------------------------------
the program
PROGRAM PROGRAM_EXAMPLE
IMPLICIT NONE
CHARACTER*60 FILENAME,FILENAME2
WRITE(6,102) 'ENTER FILE NAME:'
READ(5,101) FILENAME
write(6,102) 'File Name is: ',FILENAME
C-------second Read-------------------------
C PAUSE
C WRITE(6,102) 'ENTER FILE NAME2:'
CALL WRITE_TEST(6,'ENTER FILE NAME2:')
READ(5,101) FILENAME2
write(6,102) 'File Name is: ',FILENAME2
101 FORMAT(' ',A)
102 FORMAT(' ',A)
------------------------------------------------------------------------------------------
the subroutine
SUBROUTINE WRITE_TEST(LUN, STRING)
IMPLICIT NONE
C
INTEGER*4 LUN
CHARACTER STRING*(*)
C
C
WRITE(LUN, 1001) ,STRING
1001 FORMAT(' ',A,' >',$)
C
RETURN
END
More information about the Info-vax
mailing list