SUBROUTINE PROMPT(PMTSTR) LOGICAL*1 PMTSTR(2) C CLP DECLARATIONS FOR COMMAND LINE PROCESSING COMMON/CLP/ 1 TYPNUL,TYPEOL,TYPEL,TYPINT,TYPFLT,TYPNAM,TYPSPC, 2 TLU,CLPEFN,CNTLZ,TRACE, 3 LINE,NXTCHR,TOKLEN,TOKTYP,INTVAL,FLTVAL,STRVAL,CHRVAL,USICHR INTEGER*2 TYPNUL,TYPEOL,TYPEL,TYPINT,TYPFLT,TYPNAM,TYPSPC INTEGER*2 TLU,CLPEFN,NXTCHR,TOKLEN,TOKTYP,INTVAL LOGICAL*1 LINE(82),STRVAL(82),CHRVAL,USICHR LOGICAL CNTLZ,TRACE REAL FLTVAL C INITIAL VALUES FOR CLP COMMON DATA TYPNUL/0/,TYPEOL/1/,TYPEL/2/,TYPINT/3/ DATA TYPFLT/4/,TYPNAM/5/,TYPSPC/6/ DATA TLU/2/,CLPEFN/1/,CNTLZ/.FALSE./,TRACE/.FALSE./ DATA LINE/82*0/,NXTCHR/1/,TOKLEN/0/,TOKTYP/0/ DATA INTVAL/0/,FLTVAL/0.0/,STRVAL/82*0/,CHRVAL/0/ C LOCAL DECLARATIONS INTEGER*2 GEEOF DATA GEEOF/-10/ INTEGER*2 LRNLU,LENLIN LOGICAL LEARN DATA LEARN/.FALSE./ LOGICAL*1 IER(2),LRNFN(40),TSKNAM(7) DATA TSKNAM/7*0/ INTEGER*4 MCR DATA MCR/6RMCR.../ 10 FORMAT(80A1) C BEGIN C IF 1ST CALL SET LRNLU AND GET TASK NAME IF(TSKNAM(1).NE.0)GO TO 1000 LRNLU=TLU+1 CALL GETTSK(LINE) CALL R50ASC(6,LINE,TSKNAM) TSKNAM(7)=0 DO 910 I=1,6 IF(TSKNAM(I).EQ.'.')TSKNAM(I)=' ' 910 CONTINUE CALL RLBS(TSKNAM) CALL RTBS(TSKNAM) C MAKE SURE ONLY 1ST THREE CHARACTERS ARE USED TSKNAM(4)=0 1000 CONTINUE C PREPARE PROMPT USING LINE AS WORK AREA CALL MSTR(PMTSTR,LINE) IF(LINE(1).NE.0)CALL CCCHR(LINE,'?') CALL ICHR(LINE,1,'>') CALL ISTR(LINE,1,TSKNAM) CALL ICHR(LINE,1,"12) CALL ICHR(LINE,1,"15) C GET NEXT INPUT LINE CALL LENSTR(LINE,LEN) CALL GCML(LINE,LEN,IER,LINE,80) NXTCHR=1 CALL LENSTR(LINE,LENLIN) IF(IER(1).EQ.0)GO TO 1100 IF(IER(1).NE.GEEOF)GO TO 1010 LINE(1)=0 CALL CCML IF(LEARN)CLOSE(UNIT=LRNLU) CNTLZ=.TRUE. RETURN 1010 WRITE(TLU,100)IER 100 FORMAT(1H ,'GCML ERROR. IER(1)=',I4,' IER(2)=',I4) STOP 'PROMPT' 1100 CONTINUE C PROCESS LEARN,TRACE, AND HELP COMMANDS CALL TOKEN CALL CMPSTR(STRVAL,'LEARN',IRES) IF(IRES.NE.0)GO TO 1200 IF(LEARN)GO TO 1150 C SET FOR LEARN MODE WRITE(TLU,110) 110 FORMAT('$FILE NAME?') READ(TLU,111)LEN,(LRNFN(I),I=1,LEN) 111 FORMAT(Q,80A1) LRNFN(LEN+1)=0 CALL GICHR(LRNFN,':',IND) IF(IND.EQ.0)CALL ISTR(LRNFN,1,'SY:') CALL GICHR(LRNFN,'.',IND) IF(IND.EQ.0)CALL CCSTR(LRNFN,'.CMD') OPEN(UNIT=LRNLU,NAME=LRNFN,TYPE='NEW', 1 CARRIAGECONTROL='LIST') LEARN=.TRUE. GO TO 1000 1150 CONTINUE C TURN OFF LEARN MODE CLOSE(UNIT=LRNLU) LEARN=.FALSE. GO TO 1000 1200 CALL CMPSTR(STRVAL,'TRACE',IRES) IF(IRES.NE.0)GO TO 1300 IF(TRACE)CALL PLINE(STRVAL) IF(LEARN)WRITE(LRNLU,10)(STRVAL(I),I=1,LEN) TRACE=.NOT.TRACE GO TO 1000 1300 CALL CMPSTR(STRVAL,'HELP',IRES) IF(IRES.NE.0)GO TO 2000 C INVOKE MCR TO PROCESS HELP COMMAND C FIRST TASK NAME MUST BE INSERTED AFTER HELP CALL LENSTR(LINE,LEN) IF(TRACE)CALL PLINE(LINE) IF(LEARN)WRITE(LRNLU,10)(LINE(I),I=1,LEN) CALL CCCHR(STRVAL,' ') CALL CCSTR(STRVAL,TSKNAM) CALL DSTR(LINE,1,4) CALL ISTR(LINE,1,STRVAL) CALL LENSTR(LINE,LEN) CALL SPAWN(MCR,,,CLPEFN,,,,LINE,LEN,,,IDS) CALL WAITFR(CLPEFN) GO TO 1000 C TAKE CARE OF TRACE AND LEARN 2000 CALL LENSTR(PMTSTR,LEN) IF(TRACE.AND.LEN.EQ.0)WRITE(TLU,10)'$' IF(TRACE.AND.LEN.GT.0)WRITE(TLU,10)'$',(PMTSTR(I),I=1,LEN),'?' IF(LEARN.AND.LEN.GT.0)WRITE(LRNLU,10)';',(PMTSTR(I),I=1,LEN) CALL LENSTR(LINE,LEN) IF(TRACE)WRITE(TLU,10)'+',(LINE(I),I=1,LEN) IF(LEARN)WRITE(LRNLU,10)(LINE(I),I=1,LEN) NXTCHR=1 TOKLEN=0 C LOOK FOR AND PROCESS PROMPT STRINGS 2100 CALL GICHR(LINE,'?',IBEG) IF(IBEG.EQ.0)RETURN IF(LINE(IBEG+1).NE.'<')RETURN CALL GICHR(LINE(IBEG+2),'>',IEND) IF(IEND.EQ.0)RETURN IEND=IEND+IBEG+1 WRITE(TLU,10)'$',(LINE(I),I=IBEG+2,IEND) CALL DSTR(LINE,IBEG,IEND) READ(TLU,111)LEN,(STRVAL(I),I=1,LEN) STRVAL(LEN+1)=0 CALL ISTR(LINE,IBEG,STRVAL) IF(TRACE)CALL PLINE(LINE) GO TO 2100 END