; ;F4P.CMD F4P PROMPT=PROMPT F4P PLINE=PLINE F4P USIBEG=USIBEG F4P USIEND=USIEND F4P TOKEN=TOKEN F4P SYNERR=SYNERR F4P LENSTR=LENSTR F4P ICHR=ICHR F4P CCCHR=CCCHR F4P CCSTR=CCSTR F4P GSTR=GSTR F4P DSTR=DSTR F4P ISTR=ISTR F4P MSTR=MSTR F4P RLBS=RLBS F4P RTBS=RTBS F4P GICHR=GICHR F4P CMPSTR=CMPSTR F4P CSTI=CSTI F4P CSTO=CSTO F4P CSTR=CSTR F4P CITS=CITS F4P CRTS=CRTS F4P GNCL=GNCL F4P GNP=GNP ; ;FOR.CMD FOR PROMPT=PROMPT FOR PLINE=PLINE FOR USIBEG=USIBEG FOR USIEND=USIEND FOR TOKEN=TOKEN FOR SYNERR=SYNERR FOR LENSTR=LENSTR FOR ICHR=ICHR FOR CCCHR=CCCHR FOR CCSTR=CCSTR FOR GSTR=GSTR FOR DSTR=DSTR FOR ISTR=ISTR FOR MSTR=MSTR FOR RLBS=RLBS FOR RTBS=RTBS FOR GICHR=GICHR FOR CMPSTR=CMPSTR FOR CSTI=CSTI FOR CSTO=CSTO FOR CSTR=CSTR FOR CITS=CITS FOR CRTS=CRTS FOR GNCL=GNCL FOR GNP=GNP ; ;MAC.CMD MAC GCML=GCML MAC USIAST=USIAST ; ;CREATEF4P.CMD DEL *.OBJ;* @F4P @MAC PIP LIB.OLB;*/DE PIP TEMP.MOD=*.OBJ LBR LIB/CR=TEMP.MOD DEL TEMP.MOD;* DEL *.OBJ;* ; ;CREATEFOR.CMD DEL *.OBJ;* @FOR @MAC PIP LIB.OLB;*/DE PIP TEMP.MOD=*.OBJ LBR LIB/CR=TEMP.MOD DEL TEMP.MOD;* DEL *.OBJ;* ; ;LISTLIB.CMD DEL LISTLIB.LST;* PIP TEMP.0A=FF.,F4P.CMD,LF.,FOR.CMD,LF.,MAC.CMD,FF. PIP TEMP.0B=CREATEF4P.CMD,LF.,CREATEFOR.CMD,LF. PIP TEMP.0C=LISTLIB.CMD,LF.,TSTCLPBLD.CMD,FF. F4P ,TSTCLP/-SP=TSTCLP PIP TEMP.0D=TSTCLP.LST,FF. PIP TEMP.1B=USIBEG.FTN,LF.,USIEND.FTN,LF.,USIAST.MAC,FF. PIP TEMP.1A=PROMPT.FTN,LF.,PLINE.FTN,FF.,GCML.MAC,FF. PIP TEMP.1C=TOKEN.FTN,LF.,SYNERR.FTN,FF. PIP TEMP.2A=LENSTR.FTN,LF.,ICHR.FTN,LF.,CCCHR.FTN,LF.,CCSTR.FTN,FF. PIP TEMP.2B=GSTR.FTN,LF.,DSTR.FTN,LF.,ISTR.FTN,LF.,MSTR.FTN,FF. PIP TEMP.2C=RLBS.FTN,LF.,RTBS.FTN,LF.,GICHR.FTN,LF.,CMPSTR.FTN,FF. PIP TEMP.2D=CSTI.FTN,LF.,CSTO.FTN,LF.,CSTR.FTN,FF. PIP TEMP.2E=CITS.FTN,LF.,CRTS.FTN,FF. PIP TEMP.3A=GNCL.FTN,FF.,GNP.FTN,FF. PIP LISTLIB.LST=TEMP.* PIP TEMP.*;*,TSTCLP.LST;*/DE ; ;TSTCLPBLD.CMD TSTCLP/CP/FP=TSTCLP,LIB/LB LB:[1,1]F4POTS/LB LB:[1,1]ANSLIB/LB / ASG=TI:1:2,SY:3 RESLIB=LB:[1,1]FCSRES/RO:7 TASK=...CLP // PDP-11 FORTRAN-77 V4.0-1 10:38:59 23-Apr-82 Page 1 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR 0001 PROGRAM TSTCLP C CLP DECLARATIONS FOR COMMAND LINE PROCESSING 0002 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 0003 INTEGER*2 TYPNUL,TYPEOL,TYPEL,TYPINT,TYPFLT,TYPNAM,TYPSPC 0004 INTEGER*2 TLU,CLPEFN,NXTCHR,TOKLEN,TOKTYP,INTVAL 0005 LOGICAL*1 LINE(82),STRVAL(82),CHRVAL,USICHR 0006 LOGICAL CNTLZ,TRACE 0007 REAL FLTVAL C LOCAL DECLARATIONS 0008 EXTERNAL CMDPRC 0009 INTEGER*2 CMDNUM 0010 LOGICAL DUMP 0011 DATA DUMP/.FALSE./ C BEGIN 0012 900 CALL GNCL('TEST DUMP USI GNP',CMDPRC,CMDNUM) 0013 IF(CMDNUM.EQ.-1)STOP 'EXIT' 0014 IF(CMDNUM.EQ.0)GO TO 900 0015 GOTO(1000,2000,3000,4000)CMDNUM 0016 1000 CONTINUE 0017 IF(DUMP)CALL DMPCLP 0018 1100 CALL TOKEN 0019 IF(DUMP)CALL DMPCLP 0020 IF(TOKTYP.EQ.TYPEOL.OR.TOKTYP.EQ.TYPEL)GO TO 900 0021 GO TO 1100 0022 2000 DUMP=.NOT.DUMP 0023 GO TO 900 0024 3000 CALL USIBEG 0025 3010 WRITE(TLU,10)USICHR,USICHR 0026 10 FORMAT(' USICHR=',A1,I4) 0027 IF(USICHR.NE.'E')GOTO 3010 0028 CALL USIEND 0029 GO TO 900 0030 4000 CALL GNP('INTEGER VALUE',TYPINT) 0031 CALL GNP('FLOAT VALUE',TYPFLT) 0032 CALL GNP('NAME VALUE',TYPNAM) 0033 CALL GNP('SPECIAL CHARACTER',TYPSPC) 0034 GO TO 900 0035 END PDP-11 FORTRAN-77 V4.0-1 10:38:59 23-Apr-82 Page 2 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR PROGRAM SECTIONS Number Name Size Attributes 1 $CODE1 000412 133 RW,I,CON,LCL 2 $PDATA 000214 70 RW,D,CON,LCL 4 $VARS 000004 2 RW,D,CON,LCL 8 CLP 000310 100 RW,D,OVR,GBL VARIABLES Name Type Address Name Type Address Name Type Address Name Type Address Name Type Address CHRVAL L*1 8-000306 CLPEFN I*2 8-000020 CMDNUM I*2 4-000000 CNTLZ L*2 8-000022 DUMP L*2 4-000002 FLTVAL R*4 8-000160 INTVAL I*2 8-000156 NXTCHR I*2 8-000150 TLU I*2 8-000016 TOKLEN I*2 8-000152 TOKTYP I*2 8-000154 TRACE L*2 8-000024 TYPEL I*2 8-000004 TYPEOL I*2 8-000002 TYPFLT I*2 8-000010 TYPINT I*2 8-000006 TYPNAM I*2 8-000012 TYPNUL I*2 8-000000 TYPSPC I*2 8-000014 USICHR L*1 8-000307 ARRAYS Name Type Address Size Dimensions LINE L*1 8-000026 000122 41 (82) STRVAL L*1 8-000164 000122 41 (82) LABELS Label Address Label Address Label Address Label Address Label Address 10' 2-000000 900 1-000020 1000 1-000106 1100 1-000132 2000 1-000216 3000 1-000232 3010 1-000250 4000 1-000340 FUNCTIONS AND SUBROUTINES REFERENCED CMDPRC DMPCLP GNCL GNP TOKEN USIBEG USIEND Total Space Allocated = 001142 305 No FPP Instructions Generated PDP-11 FORTRAN-77 V4.0-1 10:39:03 23-Apr-82 Page 3 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR 0001 SUBROUTINE CMDPRC(FOUND) 0002 LOGICAL FOUND C CLP DECLARATIONS FOR COMMAND LINE PROCESSING 0003 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 0004 INTEGER*2 TYPNUL,TYPEOL,TYPEL,TYPINT,TYPFLT,TYPNAM,TYPSPC 0005 INTEGER*2 TLU,CLPEFN,NXTCHR,TOKLEN,TOKTYP,INTVAL 0006 LOGICAL*1 LINE(82),STRVAL(82),CHRVAL,USICHR 0007 LOGICAL CNTLZ,TRACE 0008 REAL FLTVAL C BEGIN 0009 CALL CMPSTR(STRVAL,'EXTRA',IRES) 0010 IF(IRES.NE.0)RETURN 0011 CALL PLINE('FOUND COMMAND EXTRA') 0012 FOUND=.TRUE. 0013 END PDP-11 FORTRAN-77 V4.0-1 10:39:03 23-Apr-82 Page 4 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR PROGRAM SECTIONS Number Name Size Attributes 1 $CODE1 000100 32 RW,I,CON,LCL 2 $PDATA 000046 19 RW,D,CON,LCL 4 $VARS 000002 1 RW,D,CON,LCL 8 CLP 000310 100 RW,D,OVR,GBL ENTRY POINTS Name Type Address Name Type Address Name Type Address Name Type Address Name Type Address CMDPRC 1-000000 VARIABLES Name Type Address Name Type Address Name Type Address Name Type Address Name Type Address CHRVAL L*1 8-000306 CLPEFN I*2 8-000020 CNTLZ L*2 8-000022 FLTVAL R*4 8-000160 FOUND L*2 F-000002* INTVAL I*2 8-000156 IRES I*2 4-000000 NXTCHR I*2 8-000150 TLU I*2 8-000016 TOKLEN I*2 8-000152 TOKTYP I*2 8-000154 TRACE L*2 8-000024 TYPEL I*2 8-000004 TYPEOL I*2 8-000002 TYPFLT I*2 8-000010 TYPINT I*2 8-000006 TYPNAM I*2 8-000012 TYPNUL I*2 8-000000 TYPSPC I*2 8-000014 USICHR L*1 8-000307 ARRAYS Name Type Address Size Dimensions LINE L*1 8-000026 000122 41 (82) STRVAL L*1 8-000164 000122 41 (82) FUNCTIONS AND SUBROUTINES REFERENCED CMPSTR PLINE Total Space Allocated = 000460 152 No FPP Instructions Generated PDP-11 FORTRAN-77 V4.0-1 10:39:04 23-Apr-82 Page 5 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR 0001 SUBROUTINE DMPCLP C CLP DECLARATIONS FOR COMMAND LINE PROCESSING 0002 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 0003 INTEGER*2 TYPNUL,TYPEOL,TYPEL,TYPINT,TYPFLT,TYPNAM,TYPSPC 0004 INTEGER*2 TLU,CLPEFN,NXTCHR,TOKLEN,TOKTYP,INTVAL 0005 LOGICAL*1 LINE(82),STRVAL(82),CHRVAL,USICHR 0006 LOGICAL CNTLZ,TRACE 0007 REAL FLTVAL C LOCAL DECLARATIONS 0008 INTEGER*2 EFN C BEGIN 0009 CALL PLINE(LINE) 0010 EFN=CLPEFN 0011 WRITE(TLU,10)TLU,EFN,CNTLZ,TRACE 0012 10 FORMAT(1H ,'TLU=',I2,' CLPEFN=',I2,' CNTLZ=',L1, 1 ' TRACE=',L1) 0013 WRITE(TLU,30)NXTCHR,TOKLEN,TOKTYP,INTVAL,FLTVAL,CHRVAL,USICHR 0014 30 FORMAT(1H ,'NXTCHR=',I2,' TOKLEN=',I2,' TOKTYP=',I1/ 1 ' INTVAL=',I6,' FLTVAL=',E13.5,' CHRVAL=',A1,' USICHR=',A1) 0015 CALL LENSTR(STRVAL,LEN) 0016 WRITE(TLU,40)LEN,(STRVAL(I),I=1,LEN) 0017 40 FORMAT(1H ,'LEN=',I2,' STRVAL=',80A1) 0018 IF(TOKTYP.NE.TYPFLT)RETURN 0019 CALL CRTS(STRVAL,FLTVAL) 0020 CALL ISTR(STRVAL,1,'RVAL=') 0021 CALL PLINE(STRVAL) 0022 END PDP-11 FORTRAN-77 V4.0-1 10:39:04 23-Apr-82 Page 6 TSTCLP.FTN;15 /F77/TR:BLOCKS/WR PROGRAM SECTIONS Number Name Size Attributes 1 $CODE1 000410 132 RW,I,CON,LCL 2 $PDATA 000306 99 RW,D,CON,LCL 4 $VARS 000006 3 RW,D,CON,LCL 8 CLP 000310 100 RW,D,OVR,GBL ENTRY POINTS Name Type Address Name Type Address Name Type Address Name Type Address Name Type Address DMPCLP 1-000000 VARIABLES Name Type Address Name Type Address Name Type Address Name Type Address Name Type Address CHRVAL L*1 8-000306 CLPEFN I*2 8-000020 CNTLZ L*2 8-000022 EFN I*2 4-000000 FLTVAL R*4 8-000160 I I*2 4-000004 INTVAL I*2 8-000156 LEN I*2 4-000002 NXTCHR I*2 8-000150 TLU I*2 8-000016 TOKLEN I*2 8-000152 TOKTYP I*2 8-000154 TRACE L*2 8-000024 TYPEL I*2 8-000004 TYPEOL I*2 8-000002 TYPFLT I*2 8-000010 TYPINT I*2 8-000006 TYPNAM I*2 8-000012 TYPNUL I*2 8-000000 TYPSPC I*2 8-000014 USICHR L*1 8-000307 ARRAYS Name Type Address Size Dimensions LINE L*1 8-000026 000122 41 (82) STRVAL L*1 8-000164 000122 41 (82) LABELS Label Address Label Address Label Address Label Address Label Address 10' 2-000000 30' 2-000056 40' 2-000210 FUNCTIONS AND SUBROUTINES REFERENCED CRTS ISTR LENSTR PLINE Total Space Allocated = 001234 334 No FPP Instructions Generated SUBROUTINE USIBEG 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 IDS,ISB(2) C BEGIN CALL USIAST(CLPEFN,TLU,IDS,ISB,USICHR) IF(IDS.EQ.+1.AND.ISB(1).EQ.1)RETURN WRITE(TLU,10)IDS,ISB 10 FORMAT(' USIBEG ERROR: IDS=',I5,' ISB=',2I6) STOP END SUBROUTINE USIEND 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 ISB(2),IDS C BEGIN CALL WTQIO("2000,TLU,24,,ISB,,IDS) IF(IDS.EQ.1.AND.ISB(1).EQ.1)RETURN STOP 'USIEND' END .TITLE USIAST ; ; CALL USIAST(EFN,LUN,IDS,ISB,USICHR) .MCALL QIOW$,DIR$,ASTX$S ADRCHR: .WORD 0 QIOREF: QIOW$ IO.ATA!TF.XCC,,,,,,ASTEXT USIAST:: MOV @2(R5),QIOREF+Q.IOEF ;MOVE EVENT FLAG NUMBER MOV @4(R5),QIOREF+Q.IOLU ;GET TERMINAL LOGICAL UNIT MOV 6(R5),QIOREF+Q.IOSB ;MOVE ADDR OF IOSB MOV 12(R5),ADRCHR ;GET ADDR OF USICHR CLRB @12(R5) ;ZERO CHARACTER DIR$ #QIOREF MOV $DSW,@10(R5) ;RETURN DSW RETURN ASTEXT: MOVB (SP)+,@ADRCHR ASTX$S .END 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 SUBROUTINE PLINE(STR) LOGICAL*1 STR(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 BEGIN CALL LENSTR(STR,LEN) WRITE(TLU,10)(STR(I),I=1,LEN) 10 FORMAT(1H ,80A1) END .TITLE GCML ; CALL GCML(PMTSTR,LENPMT,IERR,BUF,LENBUF) ; CALL ECML .MCALL GCMLB$,GCMLD$,GCML$,RCML$,CCML$ GCMLD$ ;ALLOW 2 LEVELS OF INDIRECT COMMAND FILES GCMLB: GCMLB$ 3 GCML:: BICB #GE.CLO,GCMLB+G.MODE MOV 2(R5),R1 MOV @4(R5),R2 GCML$ #GCMLB,R1,R2 BCC 10$ MOV 6(R5),R0 MOVB GCMLB+G.ERR,(R0) MOVB GCMLB+F.ERR,2(R0) RTS PC 10$: CLR @6.(R5) MOV 8.(R5),R0 MOV 10.(R5),R1 MOV GCMLB+G.CMLD,R2 MOV GCMLB+G.CMLD+2,R3 CMP R2,R1 BLT 20$ MOV #GE.RBG,@6(R5) MOV R1,R2 DEC R2 20$: TST R2 BLE 40$ 30$: MOVB (R3)+,(R0)+ SOB R2,30$ 40$: CLRB (R0) RTS PC RCML:: RCML$ #GCMLB RTS PC CCML:: CCML$ #GCMLB RTS PC .END 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 SUBROUTINE SYNERR 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 C BEGIN CALL PLINE(LINE) DO 1010 I=NXTCHR-TOKLEN,NXTCHR-1 LINE(I)='?' 1010 CONTINUE CALL PLINE(LINE) END SUBROUTINE LENSTR(STR,LEN) LOGICAL*1 STR(2) INTEGER*2 LEN DO 1000 I=1,256 LEN=I-1 IF(STR(I).EQ.0)GO TO 1100 1000 CONTINUE CALL PLINE('LENSTR: NO STRING TERMINATER') LEN=0 1100 CONTINUE END SUBROUTINE ICHR(STR,INDEX,CHR) LOGICAL*1 STR(2),CHR INTEGER*2 INDEX IND=INDEX CALL LENSTR(STR,LEN) IF(IND.GT.LEN)IND=LEN+1 DO 1010 I=LEN+1,IND,-1 STR(I+1)=STR(I) 1010 CONTINUE 1020 STR(IND)=CHR RETURN END SUBROUTINE CCCHR(STR,CHR) LOGICAL*1 STR(2),CHR CALL LENSTR(STR,LEN) CALL ICHR(STR,LEN+1,CHR) END SUBROUTINE CCSTR(STR1,STR2) LOGICAL*1 STR1(2),STR2(2) CALL LENSTR(STR1,LEN) CALL ISTR(STR1,LEN+1,STR2) END SUBROUTINE GSTR(STR1,BEG,END,STR2) LOGICAL*1 STR1(2),BEG,END,STR2(2) DO 1000 I=BEG,END 1000 STR2(I-BEG+1)=STR1(I) STR2(END-BEG+2)=0 END SUBROUTINE DSTR(STR,IBEG,IEND) LOGICAL*1 STR(2) INTEGER*2 IBEG,IEND,LEN CALL LENSTR(STR,LEN) IF(IEND.GT.LEN)IEND=LEN IF(IBEG.GT.IEND)RETURN N=LEN-IEND+1 DO 1000 I=1,N 1000 STR(IBEG+I-1)=STR(IEND+I) END SUBROUTINE ISTR(STR1,INDEX,STR2) LOGICAL*1 STR1(2),STR2(2) INTEGER*2 INDEX IND=INDEX CALL LENSTR(STR1,LEN1) CALL LENSTR(STR2,LEN2) IF(LEN2.EQ.0)RETURN IF(IND.GT.LEN1)IND=LEN1+1 DO 1010 I=LEN1+1,IND,-1 STR1(I+LEN2)=STR1(I) 1010 CONTINUE DO 1020 I=1,LEN2 1020 STR1(IND+I-1)=STR2(I) END SUBROUTINE MSTR(STR1,STR2) LOGICAL*1 STR1(2),STR2(2) CALL LENSTR(STR1,LEN) DO 1000 I=1,LEN+1 1000 STR2(I)=STR1(I) END SUBROUTINE RLBS(STR) LOGICAL*1 STR(2) CALL LENSTR(STR,LEN) DO 1000 I=1,LEN IF(STR(I).NE.' ')GO TO 1010 1000 CONTINUE STR(1)=0 RETURN 1010 N=I-1 IF(N.EQ.0)RETURN DO 1020 I=1,LEN-N+1 1020 STR(I)=STR(I+N) END SUBROUTINE RTBS(STR) LOGICAL*1 STR(2) CALL LENSTR(STR,LEN) DO 1000 I=LEN,1,-1 IF(STR(I).NE.' ')GO TO 1010 1000 CONTINUE STR(1)=0 RETURN 1010 STR(I+1)=0 END SUBROUTINE GICHR(STR,CHR,IND) LOGICAL*1 STR(2),CHR INTEGER*2 IND C BEGIN CALL LENSTR(STR,LEN) DO 1000 I=1,LEN IF(STR(I).NE.CHR)GO TO 1000 IND=I RETURN 1000 CONTINUE IND=0 END SUBROUTINE CMPSTR(STR1,STR2,RESULT) LOGICAL*1 STR1(2),STR2(2) INTEGER*2 RESULT CALL LENSTR(STR1,LEN1) CALL LENSTR(STR2,LEN2) LIM=LEN1 IF(LIM.GT.LEN2)LIM=LEN2 IF(LIM.EQ.0)GO TO 1020 DO 1010 I=1,LIM IF(STR1(I).EQ.STR2(I))GO TO 1010 IF(STR1(I).LT.STR2(I))RESULT=-1 IF(STR1(I).GT.STR2(I))RESULT=1 RETURN 1010 CONTINUE 1020 IF(LEN1.LT.LEN2)RESULT=-1 IF(LEN1.EQ.LEN2)RESULT=0 IF(LEN1.GT.LEN2)RESULT=+1 END SUBROUTINE CSTI(STR,IVAL) LOGICAL*1 STR(2) INTEGER*2 IVAL LOGICAL*1 BUF(6) CALL LENSTR(STR,LEN) IF(LEN.GT.6)GO TO 2000 DO 1010 I=1,6-LEN 1010 BUF(I)=' ' DO 1020 I=1,LEN 1020 BUF(I+6-LEN)=STR(I) DECODE(6,10,BUF,ERR=2000)IVAL 10 FORMAT(I6) RETURN 2000 CALL PLINE('CSTI: ILLEGAL STRING') IVAL="100000 END SUBROUTINE CSTO(STR,IVAL) LOGICAL*1 STR(2) INTEGER*2 IVAL LOGICAL*1 BUF(6) CALL LENSTR(STR,LEN) IF(LEN.GT.6)GO TO 2000 DO 1010 I=1,6-LEN 1010 BUF(I)=' ' DO 1020 I=1,LEN 1020 BUF(I+6-LEN)=STR(I) DECODE(6,10,BUF,ERR=2000)IVAL 10 FORMAT(O6) RETURN 2000 CALL PLINE('CSTO: ILLEGAL STRING') IVAL="100000 END SUBROUTINE CSTR(STR,RVAL) LOGICAL*1 STR(2) REAL*4 RVAL LOGICAL*1 BUF(14) CALL LENSTR(STR,LEN) IF(LEN.GT.14)GO TO 2000 DO 1010 I=1,14-LEN 1010 BUF(I)=' ' DO 1020 I=1,LEN 1020 BUF(I+14-LEN)=STR(I) DECODE(14,10,BUF,ERR=2000)RVAL 10 FORMAT(F14.0) RETURN 2000 CALL PLINE('CSTR: ILLEGAL STRING') RVAL=1.0E30 END SUBROUTINE CITS(STR,IVAL) LOGICAL*1 STR(2) INTEGER*2 IVAL ENCODE(6,10,STR)IVAL 10 FORMAT(I6) STR(7)=0 CALL RLBS(STR) END SUBROUTINE CRTS(STR,RVAL) LOGICAL*1 STR(2) REAL*4 RVAL C LOCAL DECLARATIONS LOGICAL*1 FFMT(6) DATA FFMT/'(','F','9','.',' ',')'/ C BEGIN TMP=ABS(RVAL) IF(TMP.LT.1E-1.OR.TMP.GE.1E5)GO TO 2000 FFMT(5)='3' IF(TMP.GT.10.0)FFMT(5)='2' IF(TMP.GT.100.0)FFMT(5)='1' IF(TMP.GE.1000.0)FFMT(5)='0' ENCODE(9,FFMT,STR)RVAL IF(STR(9).EQ.'.')STR(9)=' ' GO TO 2100 2000 CONTINUE ENCODE(9,10,STR)RVAL 10 FORMAT(1PG9.2) 2100 STR(10)=0 CALL RLBS(STR) CALL RTBS(STR) END SUBROUTINE GNCL(CMDLST,COMCP,CMDNUM) LOGICAL*1 CMDLST(2) INTEGER*2 CMDNUM 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 LOGICAL FOUND C BEGIN 1000 CALL PROMPT(0) CMDNUM=-1 IF(CNTLZ)RETURN CMDNUM=0 IF(LINE(1).EQ.0)RETURN C LOOK FOR COMMAND IN CMDLST CALL TOKEN IBEG=1 CALL LENSTR(CMDLST,LENLST) 1100 IF(IBEG.GE.LENLST)GO TO 1200 CMDNUM=CMDNUM+1 CALL GICHR(CMDLST(IBEG),' ',IND) IF(IND.EQ.0)GO TO 1110 CMDLST(IBEG+IND-1)=0 CALL CMPSTR(CMDLST(IBEG),STRVAL,IRES) CMDLST(IBEG+IND-1)=' ' IBEG=IBEG+IND GO TO 1120 1110 CALL CMPSTR(CMDLST(IBEG),STRVAL,IRES) IBEG=LENLST+1 1120 IF(IRES.EQ.0)RETURN GO TO 1100 C CALL COMCP TO LOOK FOR COMMAND 1200 FOUND=.FALSE. CALL COMCP(FOUND) IF(FOUND)GO TO 1000 CALL SYNERR CALL PLINE('ILLEGAL COMMAND') GO TO 1000 END SUBROUTINE GNP(PMTSTR,TYPE) LOGICAL*1 PMTSTR(2) INTEGER*2 TYPE 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 BEGIN CALL TOKEN IF(TOKTYP.EQ.TYPE)RETURN IF(TOKTYP.EQ.TYPEOL)GO TO 1010 1000 CALL SYNERR CALL PLINE('ILLEGAL VALUE') 1010 CALL PROMPT(PMTSTR) CALL TOKEN IF(TOKTYP.NE.TYPE)GO TO 1010 END