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
|
---|