SUBROUTINE PUSH(IDATA,ICOUNT) C C THIS SUBROUTINE PUSHES THE ARRAY IDATA(ICOUNT) ONTO THE STACK C INTEGER IDATA(ICOUNT) COMMON /STACK/IS,IMAX,ISTACK(100) DO 10 I = 1,ICOUNT IS = IS + 1 IF(IS .GE. IMAX) GO TO 1000 !IF IS IS TOO BIG GIVE OVERFLOW ERROR ISTACK(IS) = IDATA(I) 10 CONTINUE D WRITE(6,9000) IS,(ISTACK(J),J=1,IS) D9000 FORMAT(40X' PUSH '10I7,(/40X,10I7)) RETURN 1000 STOP '*** STACK OVERFLOW ***' END SUBROUTINE POP(IDATA,ICOUNT) C C THIS SUBROUTINE FILLS ARRAY IDATA(ICOUNT) FROM THE STACK C THE STACK DECREASES BY ICOUNT. C INTEGER IDATA(ICOUNT) COMMON /STACK/IS,IMAX,ISTACK(100) DO 10 I = ICOUNT,1,-1 IDATA(I) = ISTACK(IS) IS = IS - 1 D WRITE(6,9000) IDATA(I),IS,I,ICOUNT D9000 FORMAT(40X' POP '10I7) IF(IS .LE. 0) GO TO 1000 !IS<0 MEANS STACK UNDERFLOW 10 CONTINUE RETURN 1000 STOP '*** STACK UNDERFLOW ***' END