[2403] | 1 | *
|
---|
| 2 | * $Id: mnstin.F,v 1.1.1.1 2003-06-11 14:18:29 cmv Exp $
|
---|
| 3 | *
|
---|
| 4 | * $Log: not supported by cvs2svn $
|
---|
| 5 | * Revision 1.1.1.1 1996/03/07 14:31:32 mclareni
|
---|
| 6 | * Minuit
|
---|
| 7 | *
|
---|
| 8 | *
|
---|
| 9 | #include "minuit/pilot.h"
|
---|
| 10 | SUBROUTINE MNSTIN(CRDBUF,IERR)
|
---|
| 11 | #include "minuit/d506dp.inc"
|
---|
| 12 | CC Called from MNREAD.
|
---|
| 13 | CC Implements the SET INPUT command to change input units.
|
---|
| 14 | CC If command is: 'SET INPUT' 'SET INPUT 0' or '*EOF',
|
---|
| 15 | CC or 'SET INPUT , , ',
|
---|
| 16 | CC reverts to previous input unit number,if any.
|
---|
| 17 | CC
|
---|
| 18 | CC If it is: 'SET INPUT n' or 'SET INPUT n filename',
|
---|
| 19 | CC changes to new input file, added to stack
|
---|
| 20 | CC
|
---|
| 21 | CC IERR = 0: reading terminated normally
|
---|
| 22 | CC 2: end-of-data on primary input file
|
---|
| 23 | CC 3: unrecoverable read error
|
---|
| 24 | CC 4: unable to process request
|
---|
| 25 | CC
|
---|
| 26 | #include "minuit/d506cm.inc"
|
---|
| 27 | CHARACTER CRDBUF*(*),CUNIT*10,CFNAME*64,CGNAME*64,CANSWR*1
|
---|
| 28 | CHARACTER CMODE*16
|
---|
| 29 | LOGICAL LOPEN,LREWIN,NONAME,LNAME,MNUNPT
|
---|
| 30 | NONAME = .TRUE.
|
---|
| 31 | IERR = 0
|
---|
| 32 | IF (INDEX(CRDBUF,'*EOF') .EQ. 1) GO TO 190
|
---|
| 33 | IF (INDEX(CRDBUF,'*eof') .EQ. 1) GO TO 190
|
---|
| 34 | LEND = LEN(CRDBUF)
|
---|
| 35 | C look for end of SET INPUT command
|
---|
| 36 | DO 20 IC= 8,LEND
|
---|
| 37 | IF (CRDBUF(IC:IC) .EQ. ' ') GO TO 25
|
---|
| 38 | IF (CRDBUF(IC:IC) .EQ. ',') GO TO 53
|
---|
| 39 | 20 CONTINUE
|
---|
| 40 | GO TO 200
|
---|
| 41 | 25 CONTINUE
|
---|
| 42 | C look for end of separator between command and first argument
|
---|
| 43 | ICOL = IC+1
|
---|
| 44 | DO 50 IC= ICOL,LEND
|
---|
| 45 | IF (CRDBUF(IC:IC) .EQ. ' ') GO TO 50
|
---|
| 46 | IF (CRDBUF(IC:IC) .EQ. ',') GO TO 53
|
---|
| 47 | GO TO 55
|
---|
| 48 | 50 CONTINUE
|
---|
| 49 | GO TO 200
|
---|
| 50 | 53 IC = IC + 1
|
---|
| 51 | 55 IC1 = IC
|
---|
| 52 | C see if "REWIND" was requested in command
|
---|
| 53 | LREWIN = .FALSE.
|
---|
| 54 | IF (INDEX(CRDBUF(1:IC1),'REW') .GT. 5) LREWIN=.TRUE.
|
---|
| 55 | IF (INDEX(CRDBUF(1:IC1),'rew') .GT. 5) LREWIN=.TRUE.
|
---|
| 56 | C first argument begins in or after col IC1
|
---|
| 57 | DO 75 IC= IC1,LEND
|
---|
| 58 | IF (CRDBUF(IC:IC) .EQ. ' ') GO TO 75
|
---|
| 59 | IF (CRDBUF(IC:IC) .EQ. ',') GO TO 200
|
---|
| 60 | GO TO 80
|
---|
| 61 | 75 CONTINUE
|
---|
| 62 | GO TO 200
|
---|
| 63 | 80 IC1 = IC
|
---|
| 64 | C first argument really begins in col IC1
|
---|
| 65 | DO 100 IC= IC1+1,LEND
|
---|
| 66 | IF (CRDBUF(IC:IC) .EQ. ' ') GO TO 108
|
---|
| 67 | IF (CRDBUF(IC:IC) .EQ. ',') GO TO 108
|
---|
| 68 | 100 CONTINUE
|
---|
| 69 | IC = LEND + 1
|
---|
| 70 | 108 IC2 = IC-1
|
---|
| 71 | C end of first argument is in col IC2
|
---|
| 72 | 110 CONTINUE
|
---|
| 73 | CUNIT = CRDBUF(IC1:IC2)
|
---|
| 74 | WRITE (ISYSWR,'(A,A)') ' UNIT NO. :',CUNIT
|
---|
| 75 | READ (CUNIT,'(BN,F10.0)',ERR=500) FUNIT
|
---|
| 76 | IUNIT = FUNIT
|
---|
| 77 | IF (IUNIT .EQ. 0) GO TO 200
|
---|
| 78 | C skip blanks and commas, find file name
|
---|
| 79 | DO 120 IC= IC2+1,LEND
|
---|
| 80 | IF (CRDBUF(IC:IC) .EQ. ' ') GO TO 120
|
---|
| 81 | IF (CRDBUF(IC:IC) .EQ. ',') GO TO 120
|
---|
| 82 | GO TO 130
|
---|
| 83 | 120 CONTINUE
|
---|
| 84 | GO TO 131
|
---|
| 85 | 130 CONTINUE
|
---|
| 86 | CFNAME = CRDBUF(IC:LEND)
|
---|
| 87 | NONAME = .FALSE.
|
---|
| 88 | WRITE (ISYSWR, '(A,A)') ' FILE NAME IS:',CFNAME
|
---|
| 89 | C ask if file exists, if not ask for name and open it
|
---|
| 90 | 131 CONTINUE
|
---|
| 91 | INQUIRE(UNIT=IUNIT,OPENED=LOPEN,NAMED=LNAME,NAME=CGNAME)
|
---|
| 92 | IF (LOPEN) THEN
|
---|
| 93 | IF (NONAME) THEN
|
---|
| 94 | GO TO 136
|
---|
| 95 | ELSE
|
---|
| 96 | IF (.NOT.LNAME) CGNAME='unknown'
|
---|
| 97 | WRITE (ISYSWR,132) IUNIT,CGNAME,CFNAME
|
---|
| 98 | 132 FORMAT (' UNIT',I3,' ALREADY OPENED WITH NAME:',A/
|
---|
| 99 | + ' NEW NAME IGNORED:',A)
|
---|
| 100 | ENDIF
|
---|
| 101 | ELSE
|
---|
| 102 | C new file, open it
|
---|
| 103 | WRITE (ISYSWR,135) IUNIT
|
---|
| 104 | 135 FORMAT (' UNIT',I3,' IS NOT OPENED.')
|
---|
| 105 | IF (NONAME) THEN
|
---|
| 106 | WRITE (ISYSWR,'(A)') ' NO FILE NAME GIVEN IN COMMAND.'
|
---|
| 107 | IF (ISW(6) .LT. 1) GO TO 800
|
---|
| 108 | WRITE (ISYSWR,'(A)') ' PLEASE GIVE FILE NAME:'
|
---|
| 109 | READ (ISYSRD,'(A)') CFNAME
|
---|
| 110 | ENDIF
|
---|
| 111 | OPEN (UNIT=IUNIT,FILE=CFNAME,STATUS='OLD',ERR=600)
|
---|
| 112 | WRITE (ISYSWR,'(A)') ' FILE OPENED SUCCESSFULLY.'
|
---|
| 113 | ENDIF
|
---|
| 114 | C . . file is correctly opened
|
---|
| 115 | 136 IF (LREWIN) GO TO 150
|
---|
| 116 | IF (ISW(6) .LT. 1) GO TO 300
|
---|
| 117 | WRITE (ISYSWR,137) IUNIT
|
---|
| 118 | 137 FORMAT (' SHOULD UNIT',I3,' BE REWOUND?' )
|
---|
| 119 | READ (ISYSRD,'(A)') CANSWR
|
---|
| 120 | IF (CANSWR.NE.'Y' .AND. CANSWR.NE.'y') GO TO 300
|
---|
| 121 | 150 REWIND IUNIT
|
---|
| 122 | GO TO 300
|
---|
| 123 | C *EOF
|
---|
| 124 | 190 CONTINUE
|
---|
| 125 | IF (NSTKRD .EQ. 0) THEN
|
---|
| 126 | IERR = 2
|
---|
| 127 | GO TO 900
|
---|
| 128 | ENDIF
|
---|
| 129 | C revert to previous input file
|
---|
| 130 | 200 CONTINUE
|
---|
| 131 | IF (NSTKRD .EQ. 0) THEN
|
---|
| 132 | WRITE (ISYSWR, '(A,A)') ' COMMAND IGNORED:',CRDBUF
|
---|
| 133 | WRITE (ISYSWR, '(A)') ' ALREADY READING FROM PRIMARY INPUT'
|
---|
| 134 | ELSE
|
---|
| 135 | ISYSRD = ISTKRD(NSTKRD)
|
---|
| 136 | NSTKRD = NSTKRD - 1
|
---|
| 137 | IF (NSTKRD .EQ. 0) ISW(6) = IABS(ISW(6))
|
---|
| 138 | IF (ISW(5) .GE. 0) THEN
|
---|
| 139 | INQUIRE(UNIT=ISYSRD,NAMED=LNAME,NAME=CFNAME)
|
---|
| 140 | CMODE = 'BATCH MODE '
|
---|
| 141 | IF (ISW(6) .EQ. 1) CMODE = 'INTERACTIVE MODE'
|
---|
| 142 | IF (.NOT.LNAME) CFNAME='unknown'
|
---|
| 143 | IF (MNUNPT(CFNAME)) CFNAME='unprintable'
|
---|
| 144 | WRITE (ISYSWR,290) CMODE,ISYSRD,CFNAME
|
---|
| 145 | 290 FORMAT (' INPUT WILL NOW BE READ IN ',A,' FROM UNIT NO.',I3/
|
---|
| 146 | + ' FILENAME: ',A)
|
---|
| 147 | ENDIF
|
---|
| 148 | ENDIF
|
---|
| 149 | GO TO 900
|
---|
| 150 | C switch to new input file, add to stack
|
---|
| 151 | 300 CONTINUE
|
---|
| 152 | IF (NSTKRD .GE. MAXSTK) THEN
|
---|
| 153 | WRITE (ISYSWR, '(A)') ' INPUT FILE STACK SIZE EXCEEDED.'
|
---|
| 154 | GO TO 800
|
---|
| 155 | ENDIF
|
---|
| 156 | NSTKRD = NSTKRD + 1
|
---|
| 157 | ISTKRD(NSTKRD) = ISYSRD
|
---|
| 158 | ISYSRD = IUNIT
|
---|
| 159 | C ISW(6) = 0 for batch, =1 for interactive, and
|
---|
| 160 | C =-1 for originally interactive temporarily batch
|
---|
| 161 | IF (ISW(6) .EQ. 1) ISW(6) = -1
|
---|
| 162 | GO TO 900
|
---|
| 163 | C format error
|
---|
| 164 | 500 CONTINUE
|
---|
| 165 | WRITE (ISYSWR,'(A,A)') ' CANNOT READ FOLLOWING AS INTEGER:',CUNIT
|
---|
| 166 | GO TO 800
|
---|
| 167 | 600 CONTINUE
|
---|
| 168 | WRITE (ISYSWR, 601) CFNAME
|
---|
| 169 | 601 FORMAT (' SYSTEM IS UNABLE TO OPEN FILE:',A)
|
---|
| 170 | C serious error
|
---|
| 171 | 800 CONTINUE
|
---|
| 172 | IERR = 3
|
---|
| 173 | 900 CONTINUE
|
---|
| 174 | RETURN
|
---|
| 175 | END
|
---|