/* MFMTB1.f -- translated by f2c (version 19960827).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

#include "Data_f2c.h"
#ifdef WNT
#include <MathBase.h>
#else 
#define  __MathBase_API
#endif
/* Table of constant values */

static integer c__8 = 8;

/* Subroutine */ __MathBase_API int mmfmtb1_(maxsz1, table1, isize1, jsize1, maxsz2, table2, 
	isize2, jsize2, iercod)
integer *maxsz1;
doublereal *table1;
integer *isize1, *jsize1, *maxsz2;
doublereal *table2;
integer *isize2, *jsize2, *iercod;
{
    /* System generated locals */
    integer table1_dim1, table1_offset, table2_dim1, table2_offset, i__1, 
	    i__2;

    /* Local variables */
    static doublereal work[1];
    static integer ilong, isize, ii, jj, ier;
    static long int iofst,iipt, jjpt;
    extern /* Subroutine */ int mcrfill_(), mcrdelt_(), mcrrqst_();



/* < */
/* **NOTICE */
/*  THIS SOFTWARE IS THE PROPERTY OF CISIGRAPH. */
/*  THIS CODE MUST NOT BE DISTRIBUTED OR COPIED WITHOUT THE PRIOR */
/*  WRITTEN PERMISSION OF CISIGRAPH AND IS ONLY TO BE USED ON THE */
/*  SITE WHERE IT IS INSTALLED BY CISIGRAPH */
/* **NOTICE */

/************************************************************************
*******/

/*     FONCTION : */
/*     ---------- */
/*     Inversion des elements d'un tableau rectangulaire (T1(i,j) */
/*     est charge dans T2(j,i)) */

/*     MOTS CLES : */
/*     ----------- */
/*      TOUS, MATH_ACCES :: TABLEAU&, INVERSION, &TABLEAU */

/*     ARGUMENTS D'ENTREE : */
/*     ------------------ */
/*     MAXSZ1: Nbre maxi d'elements suivant la 1ere dimension de */
/*             TABLE1. */
/*     TABLE1: Table de reels a deux dimensions. */
/*     ISIZE1: Nbre d'elements utiles de TABLE1 sur la 1ere dimension */
/*     JSIZE1: Nbre d'elements utiles de TABLE1 sur la 2eme dimension */
/*     MAXSZ2: Nbre maxi d'elements suivant la 1ere dimension de */
/*             TABLE2. */

/*     ARGUMENTS DE SORTIE : */
/*     ------------------- */
/*     TABLE2: Table de reels a deux dimensions, contenant la transposee 
*/
/*             du tableau rectangulaire TABLE1. */
/*     ISIZE2: Nbre d'elements utiles de TABLE2 sur la 1ere dimension */
/*     JSIZE2: Nbre d'elements utiles de TABLE2 sur la 2eme dimension */
/*     IERCOD: Code d'erreur. */
/*             = 0, ok. */
/*             = 1, erreur dans le dimensionnement des tables */
/*                  soit MAXSZ1 < ISIZE1 (tableau TABLE1 trop petit). */
/*                  soit MAXSZ2 < JSIZE1 (tableau TABLE2 trop petit). */

/*     COMMONS UTILISES   : */
/*     ---------------- */

/*     REFERENCES APPELEES   : */
/*     ---------------------- */

/*     DESCRIPTION/REMARQUES/LIMITATIONS : */
/*     ----------------------------------- */
/*    On peut utiliser TABLE1 comme tableau d'entree et de sortie i.e. */
/*    l'appel: */
/*    CALL MMFMTB1(MAXSZ1,TABLE1,ISIZE1,JSIZE1,MAXSZ2,TABLE1 */
/*               ,ISIZE2,JSIZE2,IERCOD) */
/*    est valable. */

/* $    HISTORIQUE DES MODIFICATIONS   : */
/*     -------------------------------- */
/*     07-06-91: RBD; Creation d'apres VCRINV de NAK. */
/* > */
/* ********************************************************************** 
*/


    /* Parameter adjustments */
    table1_dim1 = *maxsz1;
    table1_offset = table1_dim1 + 1;
    table1 -= table1_offset;
    table2_dim1 = *maxsz2;
    table2_offset = table2_dim1 + 1;
    table2 -= table2_offset;

    /* Function Body */
    *iercod = 0;
    if (*isize1 > *maxsz1 || *jsize1 > *maxsz2) {
	goto L9100;
    }

    iofst = 0;
    isize = *maxsz2 * *isize1;
    mcrrqst_(&c__8, &isize, work, &iofst, &ier);
    if (ier > 0) {
	goto L9200;
    }

/*             NE PAS CRAINDRE D'ECRASEMENT. */

    i__1 = *isize1;
    for (ii = 1; ii <= i__1; ++ii) {
	iipt = (ii - 1) * *maxsz2 + iofst;
	i__2 = *jsize1;
	for (jj = 1; jj <= i__2; ++jj) {
	    jjpt = iipt + (jj - 1);
	    work[jjpt] = table1[ii + jj * table1_dim1];
/* L200: */
	}
/* L100: */
    }
    ilong = isize << 3;
    mcrfill_(&ilong, &work[iofst], &table2[table2_offset]);

/* -------------- On recupere le nombre d'elements de TABLE2 ------------ 
*/

    ii = *isize1;
    *isize2 = *jsize1;
    *jsize2 = ii;

    goto L9999;

/* ------------------------------- THE END ------------------------------ 
*/
/* --> Entree invalide. */
L9100:
    *iercod = 1;
    goto L9999;
/* --> Pb d'alloc. */
L9200:
    *iercod = 2;
    goto L9999;

L9999:
    if (iofst != 0) {
	mcrdelt_(&c__8, &isize, work, &iofst, &ier);
    }
    if (ier > 0) {
	*iercod = 2;
    }
    return 0;
} /* mmfmtb1_ */

