| 1 | * | 
|---|
| 2 | * $Id: mncomd.F,v 1.1.1.1 2003-06-11 14:18:26 cmv Exp $ | 
|---|
| 3 | * | 
|---|
| 4 | * $Log: not supported by cvs2svn $ | 
|---|
| 5 | * Revision 1.1.1.1  1996/03/07 14:31:29  mclareni | 
|---|
| 6 | * Minuit | 
|---|
| 7 | * | 
|---|
| 8 | * | 
|---|
| 9 | #include "minuit/pilot.h" | 
|---|
| 10 | SUBROUTINE MNCOMD(FCN,CRDBIN,ICONDN,FUTIL) | 
|---|
| 11 | #include "minuit/d506dp.inc" | 
|---|
| 12 | CC        Called by user.  'Reads' a command string and executes. | 
|---|
| 13 | CC     Equivalent to MNEXCM except that the command is given as a | 
|---|
| 14 | CC          character string. | 
|---|
| 15 | CC | 
|---|
| 16 | CC     ICONDN = 0: command executed normally | 
|---|
| 17 | CC              1: command is blank, ignored | 
|---|
| 18 | CC              2: command line unreadable, ignored | 
|---|
| 19 | CC              3: unknown command, ignored | 
|---|
| 20 | CC              4: abnormal termination (e.g., MIGRAD not converged) | 
|---|
| 21 | CC              5: command is a request to read PARAMETER definitions | 
|---|
| 22 | CC              6: 'SET INPUT' command | 
|---|
| 23 | CC              7: 'SET TITLE' command | 
|---|
| 24 | CC              8: 'SET COVAR' command | 
|---|
| 25 | CC              9: reserved | 
|---|
| 26 | CC             10: END command | 
|---|
| 27 | CC             11: EXIT or STOP command | 
|---|
| 28 | CC             12: RETURN command | 
|---|
| 29 | CC | 
|---|
| 30 | #include "minuit/d506cm.inc" | 
|---|
| 31 | DIMENSION PLIST(MAXP) | 
|---|
| 32 | CHARACTER COMAND*(MAXCWD) | 
|---|
| 33 | CHARACTER CLOWER*26, CUPPER*26 | 
|---|
| 34 | LOGICAL LEADER | 
|---|
| 35 | C | 
|---|
| 36 | EXTERNAL FCN,FUTIL | 
|---|
| 37 | CHARACTER*(*) CRDBIN | 
|---|
| 38 | CHARACTER*100 CRDBUF | 
|---|
| 39 | DATA CLOWER/'abcdefghijklmnopqrstuvwxyz'/ | 
|---|
| 40 | DATA CUPPER/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ | 
|---|
| 41 | C | 
|---|
| 42 | LENBUF = LEN(CRDBIN) | 
|---|
| 43 | CRDBUF = CRDBIN | 
|---|
| 44 | ICONDN = 0 | 
|---|
| 45 | C     record not case-sensitive, get upper case, strip leading blanks | 
|---|
| 46 | LEADER = .TRUE. | 
|---|
| 47 | IPOS = 1 | 
|---|
| 48 | DO 110 I= 1, MIN(MAXCWD,LENBUF) | 
|---|
| 49 | IF (CRDBUF(I:I) .EQ. '''') GO TO 111 | 
|---|
| 50 | IF (CRDBUF(I:I) .EQ. ' ')  THEN | 
|---|
| 51 | IF (LEADER) IPOS = IPOS + 1 | 
|---|
| 52 | GO TO 110 | 
|---|
| 53 | ENDIF | 
|---|
| 54 | LEADER = .FALSE. | 
|---|
| 55 | DO 108 IC= 1, 26 | 
|---|
| 56 | IF (CRDBUF(I:I) .EQ. CLOWER(IC:IC)) CRDBUF(I:I)=CUPPER(IC:IC) | 
|---|
| 57 | 108      CONTINUE | 
|---|
| 58 | 110    CONTINUE | 
|---|
| 59 | 111 CONTINUE | 
|---|
| 60 | C                     blank or null command | 
|---|
| 61 | IF (IPOS .GT. LENBUF)  THEN | 
|---|
| 62 | WRITE (ISYSWR,'(A)') ' BLANK COMMAND IGNORED.' | 
|---|
| 63 | ICONDN = 1 | 
|---|
| 64 | GO TO 900 | 
|---|
| 65 | ENDIF | 
|---|
| 66 | C                                           . .   preemptive commands | 
|---|
| 67 | C               if command is 'PARAMETER' | 
|---|
| 68 | IF (CRDBUF(IPOS:IPOS+2) .EQ. 'PAR')    THEN | 
|---|
| 69 | ICONDN = 5 | 
|---|
| 70 | LPHEAD = .TRUE. | 
|---|
| 71 | GO TO 900 | 
|---|
| 72 | ENDIF | 
|---|
| 73 | C               if command is 'SET INPUT' | 
|---|
| 74 | IF (CRDBUF(IPOS:IPOS+6) .EQ. 'SET INP')  THEN | 
|---|
| 75 | ICONDN = 6 | 
|---|
| 76 | LPHEAD = .TRUE. | 
|---|
| 77 | GO TO 900 | 
|---|
| 78 | ENDIF | 
|---|
| 79 | C              if command is 'SET TITLE' | 
|---|
| 80 | IF (CRDBUF(IPOS:IPOS+6) .EQ. 'SET TIT')  THEN | 
|---|
| 81 | ICONDN = 7 | 
|---|
| 82 | LPHEAD = .TRUE. | 
|---|
| 83 | GO TO 900 | 
|---|
| 84 | ENDIF | 
|---|
| 85 | C               if command is 'SET COVARIANCE' | 
|---|
| 86 | IF (CRDBUF(IPOS:IPOS+6) .EQ. 'SET COV')   THEN | 
|---|
| 87 | ICONDN = 8 | 
|---|
| 88 | LPHEAD = .TRUE. | 
|---|
| 89 | GO TO 900 | 
|---|
| 90 | ENDIF | 
|---|
| 91 | C               crack the command . . . . . . . . . . . . . . . . | 
|---|
| 92 | CALL MNCRCK(CRDBUF(IPOS:LENBUF),MAXCWD,COMAND,LNC, | 
|---|
| 93 | +                            MAXP,  PLIST, LLIST, IERR,ISYSWR) | 
|---|
| 94 | IF (IERR .GT. 0) THEN | 
|---|
| 95 | WRITE (ISYSWR,'(A)') ' COMMAND CANNOT BE INTERPRETED' | 
|---|
| 96 | ICONDN = 2 | 
|---|
| 97 | GO TO 900 | 
|---|
| 98 | ENDIF | 
|---|
| 99 | C | 
|---|
| 100 | CALL MNEXCM(FCN,COMAND(1:LNC),PLIST,LLIST,IERR,FUTIL) | 
|---|
| 101 | ICONDN = IERR | 
|---|
| 102 | 900 RETURN | 
|---|
| 103 | END | 
|---|