FTN4,L C C C C *************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * C * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * C * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* C * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C *************************************************************** C C C NAME: EDITU C SOURCE: 92074-18002 C RELOC: PART OF 92074-12001 C PGMR: J.D.J. C C C C SUBROUTINE TO FETCH A LINE (MAINTAINS COMMAND STACK) C RETURNS BYTE COUNT AS VALUE AND DATA BY REFERENCE C C INTEGER FUNCTION RDREC(BUF,LU,STATUS,LEN) C,92074-1X002 REV.2034 800818 IMPLICIT INTEGER (A-Z) COMMON /CMDSK/CMDSTK(40,20),STKSIZ(20) INTEGER CMDVAL C C CHECK FOR TERMINAL C CALL REIO(100001B,LU,BUF,-150) 770 GOTO 799 780 CALL ABREG(STATUS,LEN) 222 IF (LEN.LE.0) GOTO 1000 IF (LBYTE(BUF,1) .NE. 57B) GOTO 1000 C C HERE TO ACCESS COMMAND STACK C STOP NUMERIC SCAN AT FIRST NON-NUMERIC C IF(LEN .LT. 150)CALL SBYTE(BUF,LEN+1,40B) CMDIND = 2 CMDSIZ = 1 CMDVAL = 0 J = LBYTE(BUF,CMDSIZ+1) IF(J .EQ. 57B ) GOTO 630 GOTO 331 330 J = LBYTE(BUF,CMDSIZ+1) 331 IF (J.LT.60B.OR.J.GT.71B) GOTO 333 CMDVAL = 10*CMDVAL + J - 60B CMDSIZ = CMDSIZ + 1 GOTO 330 C C COUNT SLASHES C 630 CMDVAL = CMDVAL+1 CMDSIZ = CMDSIZ + 1 J = LBYTE(BUF,CMDSIZ+1) IF( J .EQ. 57B ) GOTO 630 333 IF (CMDVAL .GT. 20) CMDVAL = 0 C C IF OUT OF RANGE OR UNSPECIFIED, DISPLAY ALL C J = 21 - CMDVAL IF( CMDVAL .EQ. 0 ) J = 1 K = 0 C C FIRST PRINT OUT TOP LINE C CALL EXEC(100002B,LU,2H ,-2) 760 GOTO 799 761 CALL EXEC(100002B,LU,14H---Commands---,-14) 762 GOTO 799 763 CONTINUE C C PRINT OUT STACK C DO 140 I=J,20 IF (STKSIZ(I).EQ.0) GOTO 140 CALL EXEC(100002B,LU,CMDSTK(1,I),-STKSIZ(I)) 771 GOTO 799 781 K = K+1 140 CONTINUE C** IF( CMDVAL .EQ. 0 .OR. CMDVAL .GT. K ) GOTO 160 150 CALL EXEC(100002B,2000B+LU, * 44HAAAAAAAAAAAAAAAAAAAAAA, * CMDVAL) 772 GOTO 799 160 CALL REIO(100001B,LU,BUF,128) 773 GOTO 799 783 CALL ABREG(STATUS,DUMMY) LEN = 1 IF (IAND(240B,STATUS).NE.0) LEN = 0 IF (LEN.LE.0) GOTO 1000 CALL EXEC(100002B,LU,9HRJAd_,-9) 774 GOTO 799 784 CALL EXEC(100001B,3000B+LU,BUF,-150) 775 GOTO 799 785 CALL ABREG(STATUS,LEN) IF (IAND(STATUS,240B).NE.0) LEN = 0 GOTO 222 C C C C HERE WITH LEN = LENGTH IN BYTES OF COMMAND C UPDATE COMMAND STACK C 1000 CONTINUE C1000 IF (LEN.LE.0) GOTO 1010 C CALL ADDSK(BUF,LEN) C C RETURN LENGTH OF LINE IN BYTES TO CALLER C 1010 RDREC = LEN RETURN C C GET HERE WHEN THERE IS AN REIO/ EXEC ERROR ERROR C 799 RDREC = -1 RETURN C C C END C C ADD BUFFER TO COMMAND STRAK C C SUBROUTINE ADDSK(BUF,LEN) C,92074-1X002 REV.2034 800818 IMPLICIT INTEGER (A-Z) COMMON /CMDSK/CMDSTK(40,20),STKSIZ(20) C C C IF THE LINE IS ZERO LENGHT JUST FORGET IT C IF( LEN .LE. 0 ) RETURN C C 'PUSH' THE STACK WITH A MOVE WORDS. C CALL BLT(CMDSTK(1,2),CMDSTK(1,1),19*40) CALL BLT(STKSIZ(2),STKSIZ(1),19) CALL BLT(BUF,CMDSTK(1,20),40) STKSIZ(20) = LEN C C IF IT IS AN EXACT DUPLICATE OF AN EXISTING LINE, ZAP OLD ONE C I = 1 1002 IF (I.GE.20) GOTO 1009 IF (LEN.NE.STKSIZ(I)) GOTO 1008 IF (CBYTE(BUF,1,CMDSTK(1,I),1,LEN).NE.0) GOTO 1008 J = I - 1 1003 IF (J.LE.0) GOTO 1005 CALL BLT(CMDSTK(1,J),CMDSTK(1,J+1),40) STKSIZ(J+1) = STKSIZ(J) J = J - 1 GOTO 1003 1005 STKSIZ(1) = 0 1008 I = I + 1 GOTO 1002 1009 CONTINUE RETURN END C BLOCK DATA C,92074-1X002 REV.2034 800818 IMPLICIT INTEGER (A-Z) COMMON /CMDSK/ CMDSTK(40,20),STKSIZ(20) DATA STKSIZ/20*0/ END