SUBROUTINE TOKEN 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 LOCAL DECLARATIONS INTEGER*2 SAVFST,FSTCHR,MAXCHR LOGICAL TCOMMA LOGICAL*1 CHR,CHRNXT LOGICAL*1 BELL(2) DATA BELL/"7,0/ C BEGIN INTVAL="100000 FLTVAL=1.0E30 CHRVAL=0 STRVAL(1)=0 1020 SAVFST=NXTCHR CALL LENSTR(LINE,MAXCHR) TOKTYP=TYPEL IF(MAXCHR.EQ.0)RETURN 1100 TOKLEN=0 FSTCHR=NXTCHR IF(FSTCHR.GT.MAXCHR)GO TO 1210 TCOMMA=.FALSE. IF(NXTCHR.EQ.1)GO TO 1110 CHR=LINE(NXTCHR) IF(CHR.NE.',')GO TO 1110 TCOMMA=.TRUE. FSTCHR=FSTCHR+1 IF(FSTCHR.GT.MAXCHR)GO TO 1215 1110 CONTINUE DO 1200 I=FSTCHR,MAXCHR NXTCHR=I CHR=LINE(NXTCHR) IF(CHR.NE.' ')GO TO 1220 1200 CONTINUE 1210 IF(SAVFST.EQ.1.OR.TCOMMA)GO TO 1215 NXTCHR=MAXCHR+1 TOKTYP=TYPEOL GO TO 9000 1215 CALL PROMPT(BELL) GO TO 1020 1220 TCOMMA=.FALSE. IF(CHR.NE.';')GO TO 1300 FSTCHR=NXTCHR+1 IF(FSTCHR.GT.MAXCHR)GO TO 1240 DO 1230 I=FSTCHR,MAXCHR NXTCHR=I CHR=LINE(NXTCHR) IF(CHR.NE.';')GO TO 1230 NXTCHR=NXTCHR+1 GO TO 1100 1230 CONTINUE 1240 NXTCHR=MAXCHR+1 GO TO 1100 1300 IF(CHR.LT.'A'.OR.CHR.GT.'Z')GO TO 1400 C WE HAVE A NAME TOKTYP=TYPNAM CHRVAL=CHR 1310 TOKLEN=TOKLEN+1 CALL CCCHR(STRVAL,CHR) NXTCHR=NXTCHR+1 IF(NXTCHR.GT.MAXCHR)GO TO 9000 CHR=LINE(NXTCHR) IF((CHR.GE.'A'.AND.CHR.LE.'Z').OR. 1 (CHR.GE.'0'.AND.CHR.LE.'9'))GO TO 1310 GO TO 9000 1400 IF(CHR.EQ.'"')GO TO 1800 IF(CHR.GE.'0'.AND.CHR.LE.'9')GO TO 1600 IF(CHR.NE.'-'.AND.CHR.NE.'+')GO TO 1410 CHRNXT=LINE(NXTCHR+1) IF((CHRNXT.GE.'0'.AND.CHRNXT.LE.'9').OR. 1 CHRNXT.EQ.'.')GO TO 1600 1410 CONTINUE IF(CHR.EQ.'.')GO TO 1700 IF(CHR.EQ.',')GO TO 1500 C WE HAVE A SPECIAL CHARACTER TOKTYP=TYPSPC CHRVAL=CHR NXTCHR=NXTCHR+1 GO TO 9000 1500 CONTINUE C WE HAVE A NULL FIELD TOKTYP=TYPNUL GO TO 9000 C WE HAVE A NUMBER 1600 TOKTYP=TYPINT 1610 CALL CCCHR(STRVAL,CHR) NXTCHR=NXTCHR+1 CHR=LINE(NXTCHR) IF(NXTCHR.GT.MAXCHR)GO TO 1620 IF(CHR.GE.'0'.AND.CHR.LE.'9')GO TO 1610 IF(CHR.EQ.'E'.OR.CHR.EQ.'.')GO TO 1700 1620 CALL CSTI(STRVAL,INTVAL) FLTVAL=INTVAL GO TO 9000 1700 TOKTYP=TYPFLT 1710 CALL CCCHR(STRVAL,CHR) NXTCHR=NXTCHR+1 CHR=LINE(NXTCHR) IF(NXTCHR.GT.MAXCHR)GO TO 1720 CHR=LINE(NXTCHR) IF(CHR.EQ.'E'.OR.CHR.EQ.'+'.OR.CHR.EQ.'-' 1 .OR.(CHR.GE.'0'.AND.CHR.LE.'9'))GO TO 1710 1720 CALL CSTR(STRVAL,FLTVAL) IF(FLTVAL.LE.32767.0.AND.FLTVAL.GE.-32768.0)INTVAL=FLTVAL GO TO 9000 C WE HAVE AN OCTAL NUMBER 1800 TOKTYP=TYPINT NXTCHR=NXTCHR+1 CHR=LINE(NXTCHR) 1810 CALL CCCHR(STRVAL,CHR) NXTCHR=NXTCHR+1 CHR=LINE(NXTCHR) IF(NXTCHR.GT.MAXCHR)GO TO 1820 IF(CHR.GE.'0'.AND.CHR.LE.'9')GO TO 1810 1820 CALL CSTO(STRVAL,INTVAL) FLTVAL=INTVAL GO TO 9000 9000 IF(NXTCHR.GT.MAXCHR)GO TO 9010 CHR=LINE(NXTCHR) IF(CHR.NE.' ')GO TO 9010 NXTCHR=NXTCHR+1 GO TO 9000 9010 TOKLEN=NXTCHR-FSTCHR RETURN END