[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