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