V10/cmd/matlab/matz

      SUBROUTINE MATZ(A,LDA,M,N,IDA,JOB,IERR)
      INTEGER LDA,M,N,IDA(1),JOB,IERR
      DOUBLE PRECISION A(LDA,N)
C
C     ACCESS MATLAB VARIABLE STACK
C     A IS AN M BY N MATRIX, STORED IN AN ARRAY WITH
C         LEADING DIMENSION LDA.
C     IDA IS THE NAME OF A.
C         IF IDA IS AN INTEGER K LESS THAN 10, THEN THE NAME IS 'A'K
C         OTHERWISE, IDA(1:4) IS FOUR CHARACTERS, FORMAT 4A1.
C     JOB =  0  GET REAL A FROM MATLAB,
C         =  1  PUT REAL A INTO MATLAB,
C         = 10  GET IMAG PART OF A FROM MATLAB,
C         = 11  PUT IMAG PART OF A INTO MATLAB.
C     RETURN WITH NONZERO IERR AFTER MATLAB ERROR MESSAGE.
C
C     USES MATLAB ROUTINES STACKG, STACKP AND ERROR
      DOUBLE PRECISION STKR(5005),STKI(5005)
      INTEGER IDSTK(4,48),LSTK(48),MSTK(48),NSTK(48),VSIZE,LSIZE,BOT,TOP
      INTEGER ALFA(52),ALFB(52),ALFL,CASE
      INTEGER DDT,ERR,FMT,LCT(4),LIN(1024),LPT(6),HIO,RIO,WIO,RTE,WTE
      INTEGER SYM,SYN(4),BUF(256),CHAR,FLP(2),FIN,FUN,LHS,RHS,RAN(2)
      COMMON /VSTK/ STKR,STKI,IDSTK,LSTK,MSTK,NSTK,VSIZE,LSIZE,BOT,TOP
      COMMON /ALFS/ ALFA,ALFB,ALFL,CASE
      COMMON /IOP/ DDT,ERR,FMT,LCT,LIN,LPT,HIO,RIO,WIO,RTE,WTE
      COMMON /COM/ SYM,SYN,BUF,CHAR,FLP,FIN,FUN,LHS,RHS,RAN
C
      INTEGER ID(4),SEMI,BLANK,ACHAR
      LOGICAL IMG
      DATA SEMI/39/,BLANK/36/,ACHAR/10/
C
      IF (IDA(1).LT.0 .OR. IDA(1).GE.10) GO TO 10
         ID(1) = ACHAR
         ID(2) = IDA(1)
         ID(3) = BLANK
         ID(4) = BLANK
         GO TO 15
   10 DO 12 I = 1, 4
         ID(I) = BLANK
         DO 11 J = 1, BLANK
            IF (IDA(I).EQ.ALFA(J) .OR. IDA(I).EQ.ALFB(J)) ID(I) = J-1
   11    CONTINUE
   12 CONTINUE
C
   15 RHS = 0
      LPT(2) = LPT(1)
      ERR = 0
      IERR = 0
      IMG = JOB/10 .NE. 0
      IF (MOD(JOB,10) .NE. 0) GO TO 30
C
C     GET FROM MATLAB
   20 CALL STACKG(ID)
      IF (FIN .EQ. 0) CALL ERROR(4)
      IF (ERR .GT. 0) GO TO 50
      L = LSTK(TOP)
      M = MSTK(TOP)
      N = NSTK(TOP)
      DO 22 J = 1, N
         DO 21 I = 1, M
            IJ = L + I-1 + (J-1)*M
            A(I,J) = STKR(IJ)
            IF (IMG) A(I,J) = STKI(IJ)
   21    CONTINUE
   22 CONTINUE
      TOP = TOP - 1
      RETURN
C
C     PUT INTO MATLAB
   30 ERR = M*N - LSTK(BOT)
      IF (ERR .GT. 0) CALL ERROR(17)
      IF (ERR .GT. 0) GO TO 50
      TOP = TOP + 1
      LSTK(TOP) = 1
      MSTK(TOP) = M
      NSTK(TOP) = N
      DO 32 J = 1, N
         DO 31 I = 1, M
            IJ = I + (J-1)*M
            STKR(IJ) = A(I,J)
            STKI(IJ) = 0.0D0
            IF (IMG) STKR(IJ) = 0.0D0
            IF (IMG) STKI(IJ) = A(I,J)
   31    CONTINUE
   32 CONTINUE
      SYM = SEMI
      CALL STACKP(ID)
      IF (ERR .GT. 0) GO TO 50
      RETURN
C
   50 IERR = ERR
      RETURN
      END