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