source: Sophya/trunk/SophyaExt/CodeMinuit/code/mnstin.F@ 3447

Last change on this file since 3447 was 2403, checked in by cmv, 22 years ago

Creation du module de code source de MINUIT (CERNLIB) extrait par CMV

cmv 11/06/2003

File size: 5.9 KB
Line 
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"
12CC Called from MNREAD.
13CC Implements the SET INPUT command to change input units.
14CC If command is: 'SET INPUT' 'SET INPUT 0' or '*EOF',
15CC or 'SET INPUT , , ',
16CC reverts to previous input unit number,if any.
17CC
18CC If it is: 'SET INPUT n' or 'SET INPUT n filename',
19CC changes to new input file, added to stack
20CC
21CC IERR = 0: reading terminated normally
22CC 2: end-of-data on primary input file
23CC 3: unrecoverable read error
24CC 4: unable to process request
25CC
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)
35C 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
42C 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
52C 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.
56C 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
64C 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
71C 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
78C 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
89C 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
102C 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
114C . . 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
123C *EOF
124 190 CONTINUE
125 IF (NSTKRD .EQ. 0) THEN
126 IERR = 2
127 GO TO 900
128 ENDIF
129C 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
150C 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
159C ISW(6) = 0 for batch, =1 for interactive, and
160C =-1 for originally interactive temporarily batch
161 IF (ISW(6) .EQ. 1) ISW(6) = -1
162 GO TO 900
163C 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)
170C serious error
171 800 CONTINUE
172 IERR = 3
173 900 CONTINUE
174 RETURN
175 END
Note: See TracBrowser for help on using the repository browser.