Skip to main content
completely rewritten, thanks to Leo B.
Source Link
scruss
  • 21.8k
  • 1
  • 47
  • 116

I've tried to replicate this onUsing an emulated IBM 1130 running DM2 with no success. Now, I'll admit I have almost no idea what I'm doing, and I can't for some reason get 1130 FORTRAN tocan confirm WRITE a constant directly without compilation failingLeo B.'s example. If this is usefulIt took a little modification to someone, here'srun on the batch file I've used1130:

// JOB
// FOR IBM1130 FORTRAN - SCRUSS 2021-05
*ONE WORD INTEGERS
*LIST SOURCE PROGRAM
C TRY TO MODIFY*ONE AWORD CONSTANTINTEGERS
      SUBROUTINE IMDFY(IK)
      WRITE(3,10)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
      IK=2
      WRITE(3,15)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
   10 FORMAT(' IN SUB BEFORE')
   15 FORMAT(' IN SUB AFTER')
   20 FORMATZERO(' IK =', I8K)
   30 FORMAT(' 1 K =',= I8)0
      RETURN
      END
// DUP
*DELETE             IMDFYZERO
*STORE      WS  UA  IMDFYZERO
// FOR
*LIST ALL
*IOCS(1132 PRINTER)
*ONE WORD INTEGERS
C     MAIN PROGRAM
    J = J=51
      WRITE(3,10 2)
      WRITE(3,20) J
C CHANGE VALUE OF1) J AND PRINT
      CALL IMDFY(J)
      WRITEZERO(3,151)
      WRITE(3,20) J
      WRITE(3,16)
     = J=11
      WRITE(3,30) J
C CHANGE VALUE OF 1 AND PRINT
      CALL IMDFY(1)
      WRITE(3,17)
      J=1
      WRITE(3,30 1) J
   10 FORMAT(' IN PROG BEFORE')
   151 FORMAT(' IN PROG AFTER')
  J 16= FORMAT(' CONST PROG, BEFORE'I1)
   17 FORMAT(' CONST PROG AFTER')
   202 FORMAT(' J  =',BEFORE I8-')
   30 3 FORMAT(' 1  =',AFTER I8-')
      CALL EXIT
      END
// XEQ
IN PROG BEFORE
J  =       5
IN SUB BEFORE
IK =       5
1  =       1
IN SUB AFTER
IK =       2
1  =       1
IN PROG AFTER-
J  =       1
CONST PROG BEFORE
1  =       1
IN SUB BEFORE
IK =       1
1  =       1
IN SUB AFTER
IK =       2
1  =       1
CONST PROG AFTER-
1 J =       10

If I'd been successful in redefiningSince the value of 1J is only ever set to 1, it's clear that the program has set the value of 1 = … lines would be inconsistent.to 0 … 🤔

I've tried to replicate this on an emulated IBM 1130 running DM2 with no success. Now, I'll admit I have almost no idea what I'm doing, and I can't for some reason get 1130 FORTRAN to WRITE a constant directly without compilation failing. If this is useful to someone, here's the batch file I've used:

// JOB
// FOR IBM1130 FORTRAN - SCRUSS 2021-05
*ONE WORD INTEGERS
*LIST SOURCE PROGRAM
C TRY TO MODIFY A CONSTANT
      SUBROUTINE IMDFY(IK)
      WRITE(3,10)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
      IK=2
      WRITE(3,15)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
   10 FORMAT(' IN SUB BEFORE')
   15 FORMAT(' IN SUB AFTER')
   20 FORMAT(' IK =', I8)
   30 FORMAT(' 1  =', I8)
      RETURN
      END
// DUP
*DELETE             IMDFY
*STORE      WS  UA  IMDFY
// FOR
*LIST ALL
*IOCS(1132 PRINTER)
*ONE WORD INTEGERS
C     MAIN PROGRAM
      J=5
      WRITE(3,10)
      WRITE(3,20) J
C CHANGE VALUE OF J AND PRINT
      CALL IMDFY(J)
      WRITE(3,15)
      WRITE(3,20) J
      WRITE(3,16)
      J=1
      WRITE(3,30) J
C CHANGE VALUE OF 1 AND PRINT
      CALL IMDFY(1)
      WRITE(3,17)
      J=1
      WRITE(3,30) J
   10 FORMAT(' IN PROG BEFORE')
   15 FORMAT(' IN PROG AFTER')
   16 FORMAT(' CONST PROG BEFORE')
   17 FORMAT(' CONST PROG AFTER')
   20 FORMAT(' J  =', I8)
   30 FORMAT(' 1  =', I8)
      CALL EXIT
      END
// XEQ
IN PROG BEFORE
J  =       5
IN SUB BEFORE
IK =       5
1  =       1
IN SUB AFTER
IK =       2
1  =       1
IN PROG AFTER
J  =       1
CONST PROG BEFORE
1  =       1
IN SUB BEFORE
IK =       1
1  =       1
IN SUB AFTER
IK =       2
1  =       1
CONST PROG AFTER
1  =       1

If I'd been successful in redefining the value of 1, the 1 = … lines would be inconsistent.

Using an emulated IBM 1130 running DM2, I can confirm Leo B.'s example. It took a little modification to run on the 1130:

// JOB
// FOR
*LIST SOURCE PROGRAM
*ONE WORD INTEGERS
      SUBROUTINE ZERO(K)
      K = 0
      RETURN
      END
// DUP
*DELETE             ZERO
*STORE      WS  UA  ZERO
// FOR
*LIST ALL
*IOCS(1132 PRINTER)
*ONE WORD INTEGERS
      J = 1
      WRITE(3, 2)
      WRITE(3, 1) J
      CALL ZERO(1)
      J = 1
      WRITE(3, 3)
      WRITE(3, 1) J
    1 FORMAT(' J = ', I1)
    2 FORMAT(' BEFORE -')
    3 FORMAT(' AFTER -')
      CALL EXIT
      END
// XEQ
BEFORE -
J = 1
AFTER -
J = 0

Since the value of J is only ever set to 1, it's clear that the program has set the value of 1 to 0 … 🤔

Source Link
scruss
  • 21.8k
  • 1
  • 47
  • 116

I've tried to replicate this on an emulated IBM 1130 running DM2 with no success. Now, I'll admit I have almost no idea what I'm doing, and I can't for some reason get 1130 FORTRAN to WRITE a constant directly without compilation failing. If this is useful to someone, here's the batch file I've used:

// JOB
// FOR IBM1130 FORTRAN - SCRUSS 2021-05
*ONE WORD INTEGERS
*LIST SOURCE PROGRAM
C TRY TO MODIFY A CONSTANT
      SUBROUTINE IMDFY(IK)
      WRITE(3,10)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
      IK=2
      WRITE(3,15)
      WRITE(3,20) IK
      IK=1
      WRITE(3,30) IK
   10 FORMAT(' IN SUB BEFORE')
   15 FORMAT(' IN SUB AFTER')
   20 FORMAT(' IK =', I8)
   30 FORMAT(' 1  =', I8)
      RETURN
      END
// DUP
*DELETE             IMDFY
*STORE      WS  UA  IMDFY
// FOR
*LIST ALL
*IOCS(1132 PRINTER)
*ONE WORD INTEGERS
C     MAIN PROGRAM
      J=5
      WRITE(3,10)
      WRITE(3,20) J
C CHANGE VALUE OF J AND PRINT
      CALL IMDFY(J)
      WRITE(3,15)
      WRITE(3,20) J
      WRITE(3,16)
      J=1
      WRITE(3,30) J
C CHANGE VALUE OF 1 AND PRINT
      CALL IMDFY(1)
      WRITE(3,17)
      J=1
      WRITE(3,30) J
   10 FORMAT(' IN PROG BEFORE')
   15 FORMAT(' IN PROG AFTER')
   16 FORMAT(' CONST PROG BEFORE')
   17 FORMAT(' CONST PROG AFTER')
   20 FORMAT(' J  =', I8)
   30 FORMAT(' 1  =', I8)
      CALL EXIT
      END
// XEQ

The output of the program is:

IN PROG BEFORE
J  =       5
IN SUB BEFORE
IK =       5
1  =       1
IN SUB AFTER
IK =       2
1  =       1
IN PROG AFTER
J  =       1
CONST PROG BEFORE
1  =       1
IN SUB BEFORE
IK =       1
1  =       1
IN SUB AFTER
IK =       2
1  =       1
CONST PROG AFTER
1  =       1

If I'd been successful in redefining the value of 1, the 1 = … lines would be inconsistent.