home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 14 / CDACTUAL.iso / cdactual / demobin / share / program / c / XXALLOC.ZIP / XXALLOC.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-12-26  |  35.9 KB  |  1,815 lines

  1. /*xxalloc.c**************************************************************/     
  2. /*                                    */
  3. /*                xxalloc                 */
  4. /*                                    */
  5. /*            Placed in the public domain            */
  6. /*             by Harold G. Walters 1988            */
  7. /*                                    */
  8. /*    Bug fixes, ect to walters@ce.okstate.edu until May 1989        */
  9. /*                                    */
  10. /*    This software is provided as is.  No claims are made for    */
  11. /*    this software regarding its fitness and/or correctness for    */
  12. /*     any purpose.  Use of this software is at the user's own risk.    */
  13. /*                                    */
  14. /************************************************************************/
  15.  
  16. #include <stdio.h>
  17.  
  18. extern char *calloc();
  19. extern void free();
  20.  
  21. #define STRLEN 132
  22. static char msg[STRLEN];
  23. static long amount = 0L;
  24.  
  25. extern void xx_error();
  26.  
  27. char *xx_alloc(n)
  28. unsigned n;
  29. {
  30.     char *m;
  31.     amount += n;
  32.     if ((m = calloc(1, n)) == (char *) NULL)
  33.     {
  34.         sprintf(msg, "xx_alloc: memory allocation error at %ld bytes\n",
  35.             amount);
  36.         xx_error(msg);
  37.         return((char *) NULL);
  38.     }
  39.     return((char *) m);
  40. }
  41.  
  42. void xx_free(p, n)
  43. char *p;
  44. unsigned n;
  45. {
  46.     free(p);
  47.     amount -= n;
  48.     return;
  49. }
  50.  
  51. long xx_amount()
  52. {
  53.     return(amount);
  54. }
  55.  
  56. /* end index >= begin index */
  57. static void index_test(b, e)
  58. int b, e;
  59. {
  60.     if (e < b)
  61.     {
  62.         sprintf(msg, "index_test: end index %d < begin index %d\n",
  63.             e, b);
  64.         xx_error(msg);
  65.         /* exit here even if xx_error() returns */
  66.         /* this is a programming error if this ever happens */
  67.         exit(2);
  68.     }
  69.     return;
  70. }
  71.  
  72. char *n1_alloc(ib, ie, n)
  73. int ib, ie, n;
  74. {
  75.     char *m;
  76.     index_test(ib, ie);
  77.     m = (char *) xx_alloc((unsigned) (ie - ib + 1) * n);
  78.     if (m == (char *) NULL) return((char *) NULL);
  79.     m -= ib * n;
  80.     return((char *) m);
  81. }
  82.  
  83. char *n1_renum(m, ib, ie, nib, nie, n)
  84. char *m;
  85. int ib, ie, nib, nie, n;
  86. {
  87.     index_test(ib, ie);
  88.     index_test(nib, nie);
  89.     m += (ib - nib) * n;
  90.     return((char *) m);
  91. }
  92.  
  93. void n1_free(m, ib, ie, n)
  94. char *m;
  95. int ib, ie, n;
  96. {
  97.     index_test(ib, ie);
  98.     xx_free((char*) (m + ib * n), (unsigned) ((ie - ib + 1) * n));
  99.     return;
  100. }
  101.  
  102. void n1_init(m, ib, ie, n, nini)
  103. char *m;
  104. int ib, ie, n;
  105. void (*nini)();
  106. {
  107.     int i;
  108.     index_test(ib, ie);
  109.     if (nini == (void (*)()) NULL)
  110.         return;
  111.     for (i = ib; i <= ie; i++)
  112.         (*nini)(&m[i*n]);
  113.     return;
  114. }
  115.  
  116. void n1_prnt(fp, nprn, m, ib, ie, n)
  117. FILE *fp;
  118. void (*nprn)();
  119. char *m;
  120. int ib, ie, n;
  121. {
  122.     int i;
  123.     index_test(ib, ie);
  124.     if (nprn == (void (*)()) NULL)
  125.         return;
  126.     for (i = ib; i <= ie; i++)
  127.         (*nprn)(fp, &m[i*n]);
  128.     return;
  129. }
  130.  
  131. char **n2_alloc(ib, ie, jb, je, n)
  132. int ib, ie, jb, je, n;
  133. {
  134.     int i;
  135.     char **m;
  136.     index_test(ib, ie);
  137.     index_test(jb, je);
  138.     m = (char **) xx_alloc((unsigned) (ie - ib + 1) * sizeof(char *));
  139.     if (m == (char **) NULL) return((char **) NULL);
  140.     m -= ib;
  141.     for(i = ib; i <= ie; i++)
  142.     {
  143.         m[i] = (char *) xx_alloc((unsigned) (je - jb + 1) * n);
  144.         if (m[i] == (char *) NULL) return((char **) NULL);
  145.         m[i] -= jb * n;
  146.     }
  147.     return((char **) m);
  148. }
  149.  
  150. char **n2_renum(m, ib, ie, jb, je, nib, nie, njb, nje, n)
  151. char **m;
  152. int ib, ie, jb, je, nib, nie, njb, nje, n;
  153. {
  154.     int i;
  155.     index_test(ib, ie);
  156.     index_test(jb, je);
  157.     index_test(nib, nie);
  158.     index_test(njb, nje);
  159.     for(i = ie; i >= ib; i--)
  160.         m[i] += (jb - njb) * n;
  161.     m += (ib - nib);
  162.     return((char **) m);
  163. }
  164.  
  165. void n2_free(m, ib, ie, jb, je, n)
  166. char **m;
  167. int ib, ie, jb, je, n;
  168. {
  169.     int i;
  170.     index_test(ib, ie);
  171.     index_test(jb, je);
  172.     for(i = ie; i >= ib; i--)
  173.         xx_free((char*) (m[i] + jb * n), 
  174.             (unsigned) ((je - jb + 1) * n));
  175.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(char *)));
  176.     return;
  177. }
  178.  
  179. void n2_init(m, ib, ie, jb, je, n, nini)
  180. char **m;
  181. int ib, ie, jb, je, n;
  182. void (*nini)();
  183. {
  184.     int i, j;
  185.     index_test(ib, ie);
  186.     index_test(jb, je);
  187.     if (nini == (void (*)()) NULL)
  188.         return;
  189.     for (i = ib; i <= ie; i++)
  190.         for (j = jb; j <= je; j++)
  191.             (*nini)(&m[i][j*n]);
  192.     return;
  193. }
  194.  
  195. void n2_prnt(fp, nprn, m, ib, ie, jb, je, n)
  196. FILE *fp;
  197. void (*nprn)();
  198. char **m;
  199. int ib, ie, jb, je, n;
  200. {
  201.     int i, j;
  202.     index_test(ib, ie);
  203.     index_test(jb, je);
  204.     if (nprn == (void (*)()) NULL)
  205.         return;
  206.     for (i = ib; i <= ie; i++)
  207.         for (j = jb; j <= je; j++)
  208.             (*nprn)(fp, &m[i][j*n]);
  209.     return;
  210. }
  211.  
  212. char ***n3_alloc(ib, ie, jb, je, kb, ke, n)
  213. int ib, ie, jb, je, kb, ke, n;
  214. {
  215.     int i, j;
  216.     char ***m;
  217.     index_test(ib, ie);
  218.     index_test(jb, je);
  219.     index_test(kb, ke);
  220.     m = (char ***) xx_alloc((unsigned) (ie - ib + 1) * sizeof(char **));
  221.     if (m == (char ***) NULL) return((char ***) NULL);
  222.     m -= ib;
  223.     for(i = ib; i <= ie; i++)
  224.     {
  225.         m[i] = (char **) xx_alloc((unsigned) (je - jb + 1) * 
  226.             sizeof(char *));
  227.         if (m[i] == (char **) NULL) return((char ***) NULL);
  228.         m[i] -= jb;
  229.         for(j = jb; j <= je; j++)
  230.         {
  231.             m[i][j] = (char *) xx_alloc((unsigned) (ke - kb + 1)
  232.                 * n);
  233.             if (m[i][j] == (char *) NULL) return((char ***) NULL);
  234.             m[i][j] -= kb * n;
  235.         }
  236.     }
  237.     return((char ***) m);
  238. }
  239.  
  240. char ***n3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke, n)
  241. char ***m;
  242. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke, n;
  243. {
  244.     int i, j;
  245.     index_test(ib, ie);
  246.     index_test(jb, je);
  247.     index_test(kb, ke);
  248.     index_test(nib, nie);
  249.     index_test(njb, nje);
  250.     index_test(nkb, nke);
  251.     for(i = ie; i >= ib; i--)
  252.         for (j = je; j >= jb; j--)
  253.             m[i][j] += (kb - nkb) * n;
  254.     for(i = ie; i >= ib; i--)
  255.         m[i] += (jb - njb);
  256.     m += (ib - nib);
  257.     return((char ***) m);
  258. }
  259.  
  260. void n3_free(m, ib, ie, jb, je, kb, ke, n)
  261. char ***m;
  262. int ib, ie, jb, je, kb, ke, n;
  263. {
  264.     int i, j;
  265.     index_test(ib, ie);
  266.     index_test(jb, je);
  267.     index_test(kb, ke);
  268.     for(i = ie; i >= ib; i--)
  269.         for (j = je; j >= jb; j--)
  270.             xx_free((char*) (m[i][j] + kb * n),
  271.                 (unsigned) (ke - kb + 1) * n);
  272.     for(i = ie; i >= ib; i--)
  273.         xx_free((char*) (m[i] + jb), 
  274.             (unsigned) ((je - jb + 1) * sizeof(char *)));
  275.     xx_free((char*) (m + ib),
  276.         (unsigned) ((ie - ib + 1) * sizeof(char **)));
  277.     return;
  278. }
  279.  
  280. void n3_init(m, ib, ie, jb, je, kb, ke, n, nini)
  281. char ***m;
  282. int ib, ie, jb, je, kb, ke, n;
  283. void (*nini)();
  284. {
  285.     int i, j, k;
  286.     index_test(ib, ie);
  287.     index_test(jb, je);
  288.     index_test(kb, ke);
  289.     if (nini == (void (*)()) NULL)
  290.         return;
  291.     for (i = ib; i <= ie; i++)
  292.         for (j = jb; j <= je; j++)
  293.             for (k = kb; k <= ke; k++)
  294.                 (*nini)(&m[i][j][k*n]);
  295.     return;
  296. }
  297.  
  298. void n3_prnt(fp, nprn, m, ib, ie, jb, je, kb, ke, n)
  299. FILE *fp;
  300. void (*nprn)();
  301. char ***m;
  302. int ib, ie, jb, je, kb, ke, n;
  303. {
  304.     int i, j, k;
  305.     index_test(ib, ie);
  306.     index_test(jb, je);
  307.     index_test(kb, ke);
  308.     if (nprn == (void (*)()) NULL)
  309.         return;
  310.     for (i = ib; i <= ie; i++)
  311.     {
  312.         fprintf(fp, "%d\n", i);
  313.         for (j = jb; j <= je; j++)
  314.             for (k = kb; k <= ke; k++)
  315.                 (*nprn)(fp, &m[i][j][k*n]);
  316.     }
  317.     return;
  318. }
  319.  
  320.  
  321. /* char allocation */
  322.  
  323. char *c1_alloc(ib, ie)
  324. int ib, ie;
  325. {
  326.     char *m;
  327.     index_test(ib, ie);
  328.     m = (char *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(char));
  329.     if (m == (char *) NULL) return((char *) NULL);
  330.     m -= ib;
  331.     return((char *) m);
  332. }
  333.  
  334. char *c1_renum(m, ib, ie, nib, nie)
  335. char *m;
  336. int ib, ie, nib, nie;
  337. {
  338.     index_test(ib, ie);
  339.     index_test(nib, nie);
  340.     m += (ib - nib);
  341.     return((char *) m);
  342. }
  343.  
  344. void c1_free(m, ib, ie)
  345. char *m;
  346. int ib, ie;
  347. {
  348.     index_test(ib, ie);
  349.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(char)));
  350.     return;
  351. }
  352.  
  353. void c1_init(m, ib, ie, ini)
  354. char *m;
  355. int ib, ie;
  356. char ini;
  357. {
  358.     int i;
  359.     index_test(ib, ie);
  360.     for (i = ib; i <= ie; i++)
  361.         m[i] = ini;
  362.     return;
  363. }
  364.  
  365. void c1_prnt(fp, fmt, m, ib, ie)
  366. FILE *fp;
  367. char *fmt;
  368. char *m;
  369. int ib, ie;
  370. {
  371.     int i;
  372.     index_test(ib, ie);
  373.     for (i = ib; i <= ie; i++)
  374.         fprintf(fp, fmt, m[i]);
  375.     fprintf(fp, "\n");
  376.     return;
  377. }
  378.     
  379. char **c2_alloc(ib, ie, jb, je)
  380. int ib, ie, jb, je;
  381. {
  382.     int i;
  383.     char **m;
  384.     index_test(ib, ie);
  385.     index_test(jb, je);
  386.     m = (char **) xx_alloc((unsigned) (ie - ib + 1) *
  387.         sizeof(char *));
  388.     if (m == (char **) NULL) return((char **) NULL);
  389.     m -= ib;
  390.     for(i = ib; i <= ie; i++)
  391.     {
  392.         m[i] = (char *) xx_alloc((unsigned) (je - jb + 1) *
  393.             sizeof(char));
  394.         if (m[i] == (char *) NULL) return((char **) NULL);
  395.         m[i] -= jb;
  396.     }
  397.     return((char **) m);
  398. }
  399.  
  400. char **c2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  401. char **m;
  402. int ib, ie, jb, je, nib, nie, njb, nje;
  403. {
  404.     int i;
  405.     index_test(ib, ie);
  406.     index_test(jb, je);
  407.     index_test(nib, nie);
  408.     index_test(njb, nje);
  409.     for(i = ie; i >= ib; i--)
  410.         m[i] += (jb - njb);
  411.     m += (ib - nib);
  412.     return((char **) m);
  413. }
  414.  
  415. void c2_free(m, ib, ie, jb, je)
  416. char **m;
  417. int ib, ie, jb, je;
  418. {
  419.     int i;
  420.     index_test(ib, ie);
  421.     index_test(jb, je);
  422.     for(i = ie; i >= ib; i--)
  423.         xx_free((char*) (m[i] + jb), 
  424.             (unsigned) ((je - jb + 1) * sizeof(char)));
  425.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(char *)));
  426.     return;
  427. }
  428.  
  429. void c2_init(m, ib, ie, jb, je, ini)
  430. char **m;
  431. int ib, ie, jb, je;
  432. char ini;
  433. {
  434.     int i, j;
  435.     index_test(ib, ie);
  436.     index_test(jb, je);
  437.     for (i = ib; i <= ie; i++)
  438.         for (j = jb; j <= je; j++)
  439.             m[i][j] = ini;
  440.     return;
  441. }
  442.  
  443. void c2_prnt(fp, fmt, m, ib, ie, jb, je)
  444. FILE *fp;
  445. char *fmt;
  446. char **m;
  447. int ib, ie, jb, je;
  448. {
  449.     int i, j;
  450.     index_test(ib, ie);
  451.     index_test(jb, je);
  452.     for (i = ib; i <= ie; i++)
  453.     {
  454.         for (j = jb; j <= je; j++)
  455.             fprintf(fp, fmt, m[i][j]);
  456.         fprintf(fp, "\n");
  457.     }
  458.     return;
  459. }
  460.  
  461. char ***c3_alloc(ib, ie, jb, je, kb, ke)
  462. int ib, ie, jb, je, kb, ke;
  463. {
  464.     int i, j;
  465.     char ***m;
  466.     index_test(ib, ie);
  467.     index_test(jb, je);
  468.     index_test(kb, ke);
  469.     m = (char ***) xx_alloc((unsigned) (ie - ib + 1) * 
  470.         sizeof(char **));
  471.     if (m == (char ***) NULL) return((char ***) NULL);
  472.     m -= ib;
  473.     for(i = ib; i <= ie; i++)
  474.     {
  475.         m[i] = (char **) xx_alloc((unsigned) (je - jb + 1) * 
  476.             sizeof(char *));
  477.         if (m[i] == (char **) NULL) return((char ***) NULL);
  478.         m[i] -= jb;
  479.         for(j = jb; j <= je; j++)
  480.         {
  481.             m[i][j] = (char *) xx_alloc((unsigned) (ke - kb + 1) *
  482.                 sizeof(char));
  483.             if (m[i][j] == (char *) NULL) return((char ***) NULL);
  484.             m[i][j] -= kb;
  485.         }
  486.     }
  487.     return((char ***) m);
  488. }
  489.  
  490. char ***c3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  491. char ***m;
  492. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  493. {
  494.     int i, j;
  495.     index_test(ib, ie);
  496.     index_test(jb, je);
  497.     index_test(kb, ke);
  498.     index_test(nib, nie);
  499.     index_test(njb, nje);
  500.     index_test(nkb, nke);
  501.     for(i = ie; i >= ib; i--)
  502.         for (j = je; j >= jb; j--)
  503.             m[i][j] += (kb - nkb);
  504.     for(i = ie; i >= ib; i--)
  505.         m[i] += (jb - njb);
  506.     m += (ib - nib);
  507.     return((char ***) m);
  508. }
  509.  
  510. void c3_free(m, ib, ie, jb, je, kb, ke)
  511. char ***m;
  512. int ib, ie, jb, je, kb, ke;
  513. {
  514.     int i, j;
  515.     index_test(ib, ie);
  516.     index_test(jb, je);
  517.     index_test(kb, ke);
  518.     for(i = ie; i >= ib; i--)
  519.         for (j = je; j >= jb; j--)
  520.             xx_free((char*) (m[i][j] + kb),
  521.                 (unsigned) ((ke - kb + 1) * sizeof(char)));
  522.     for(i = ie; i >= ib; i--)
  523.         xx_free((char*) (m[i] + jb), 
  524.             (unsigned) ((je - jb + 1) * sizeof(char *)));
  525.     xx_free((char*) (m + ib),
  526.         (unsigned) ((ie - ib + 1) * sizeof(char **)));
  527.     return;
  528. }
  529.  
  530. void c3_init(m, ib, ie, jb, je, kb, ke, ini)
  531. char ***m;
  532. int ib, ie, jb, je, kb, ke;
  533. char ini;
  534. {
  535.     int i, j, k;
  536.     index_test(ib, ie);
  537.     index_test(jb, je);
  538.     index_test(kb, ke);
  539.     for (i = ib; i <= ie; i++)
  540.         for (j = jb; j <= je; j++)
  541.             for (k = kb; k <= ke; k++)
  542.                 m[i][j][k] = ini;
  543.     return;
  544. }
  545.  
  546. void c3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  547. FILE *fp;
  548. char *fmt;
  549. char ***m;
  550. int ib, ie, jb, je, kb, ke;
  551. {
  552.     int i, j, k;
  553.     index_test(ib, ie);
  554.     index_test(jb, je);
  555.     index_test(kb, ke);
  556.     for (i = ib; i <= ie; i++)
  557.     {
  558.         fprintf(fp, "%d\n", i);
  559.         for (j = jb; j <= je; j++)
  560.         {
  561.             for (k = kb; k <= ke; k++)
  562.                 fprintf(fp, fmt, m[i][j][k]);
  563.             fprintf(fp, "\n");
  564.         }
  565.     }
  566.     return;
  567. }
  568.  
  569.  
  570. /* short allocation */
  571.  
  572. short *s1_alloc(ib, ie)
  573. int ib, ie;
  574. {
  575.     short *m;
  576.     index_test(ib, ie);
  577.     m = (short *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(short));
  578.     if (m == (short *) NULL) return((short *) NULL);
  579.     m -= ib;
  580.     return((short *) m);
  581. }
  582.  
  583. short *s1_renum(m, ib, ie, nib, nie)
  584. short *m;
  585. int ib, ie, nib, nie;
  586. {
  587.     index_test(ib, ie);
  588.     index_test(nib, nie);
  589.     m += (ib - nib);
  590.     return((short *) m);
  591. }
  592.  
  593. void s1_free(m, ib, ie)
  594. short *m;
  595. int ib, ie;
  596. {
  597.     index_test(ib, ie);
  598.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(short)));
  599.     return;
  600. }
  601.  
  602. void s1_init(m, ib, ie, ini)
  603. short *m;
  604. int ib, ie;
  605. short ini;
  606. {
  607.     int i;
  608.     index_test(ib, ie);
  609.     for (i = ib; i <= ie; i++)
  610.         m[i] = ini;
  611.     return;
  612. }
  613.  
  614. void s1_prnt(fp, fmt, m, ib, ie)
  615. FILE *fp;
  616. char *fmt;
  617. short *m;
  618. int ib, ie;
  619. {
  620.     int i;
  621.     index_test(ib, ie);
  622.     for (i = ib; i <= ie; i++)
  623.         fprintf(fp, fmt, m[i]);
  624.     fprintf(fp, "\n");
  625.     return;
  626. }
  627.     
  628. short **s2_alloc(ib, ie, jb, je)
  629. int ib, ie, jb, je;
  630. {
  631.     int i;
  632.     short **m;
  633.     index_test(ib, ie);
  634.     index_test(jb, je);
  635.     m = (short **) xx_alloc((unsigned) (ie - ib + 1) *
  636.         sizeof(short *));
  637.     if (m == (short **) NULL) return((short **) NULL);
  638.     m -= ib;
  639.     for(i = ib; i <= ie; i++)
  640.     {
  641.         m[i] = (short *) xx_alloc((unsigned) (je - jb + 1) *
  642.             sizeof(short));
  643.         if (m[i] == (short *) NULL) return((short **) NULL);
  644.         m[i] -= jb;
  645.     }
  646.     return((short **) m);
  647. }
  648.  
  649. short **s2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  650. short **m;
  651. int ib, ie, jb, je, nib, nie, njb, nje;
  652. {
  653.     int i;
  654.     index_test(ib, ie);
  655.     index_test(jb, je);
  656.     index_test(nib, nie);
  657.     index_test(njb, nje);
  658.     for(i = ie; i >= ib; i--)
  659.         m[i] += (jb - njb);
  660.     m += (ib - nib);
  661.     return((short **) m);
  662. }
  663.  
  664. void s2_free(m, ib, ie, jb, je)
  665. short **m;
  666. int ib, ie, jb, je;
  667. {
  668.     int i;
  669.     index_test(ib, ie);
  670.     index_test(jb, je);
  671.     for(i = ie; i >= ib; i--)
  672.         xx_free((char*) (m[i] + jb), 
  673.             (unsigned) ((je - jb + 1) * sizeof(short)));
  674.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(short *)));
  675.     return;
  676. }
  677.  
  678. void s2_init(m, ib, ie, jb, je, ini)
  679. short **m;
  680. int ib, ie, jb, je;
  681. short ini;
  682. {
  683.     int i, j;
  684.     index_test(ib, ie);
  685.     index_test(jb, je);
  686.     for (i = ib; i <= ie; i++)
  687.         for (j = jb; j <= je; j++)
  688.             m[i][j] = ini;
  689.     return;
  690. }
  691.  
  692. void s2_prnt(fp, fmt, m, ib, ie, jb, je)
  693. FILE *fp;
  694. char *fmt;
  695. short **m;
  696. int ib, ie, jb, je;
  697. {
  698.     int i, j;
  699.     index_test(ib, ie);
  700.     index_test(jb, je);
  701.     for (i = ib; i <= ie; i++)
  702.     {
  703.         for (j = jb; j <= je; j++)
  704.             fprintf(fp, fmt, m[i][j]);
  705.         fprintf(fp, "\n");
  706.     }
  707.     return;
  708. }
  709.  
  710. short ***s3_alloc(ib, ie, jb, je, kb, ke)
  711. int ib, ie, jb, je, kb, ke;
  712. {
  713.     int i, j;
  714.     short ***m;
  715.     index_test(ib, ie);
  716.     index_test(jb, je);
  717.     index_test(kb, ke);
  718.     m = (short ***) xx_alloc((unsigned) (ie - ib + 1) * 
  719.         sizeof(short **));
  720.     if (m == (short ***) NULL) return((short ***) NULL);
  721.     m -= ib;
  722.     for(i = ib; i <= ie; i++)
  723.     {
  724.         m[i] = (short **) xx_alloc((unsigned) (je - jb + 1) * 
  725.             sizeof(short *));
  726.         if (m[i] == (short **) NULL) return((short ***) NULL);
  727.         m[i] -= jb;
  728.         for(j = jb; j <= je; j++)
  729.         {
  730.             m[i][j] = (short *) xx_alloc((unsigned) (ke - kb + 1) *
  731.                 sizeof(short));
  732.             if (m[i][j] == (short *) NULL) return((short ***) NULL);
  733.             m[i][j] -= kb;
  734.         }
  735.     }
  736.     return((short ***) m);
  737. }
  738.  
  739. short ***s3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  740. short ***m;
  741. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  742. {
  743.     int i, j;
  744.     index_test(ib, ie);
  745.     index_test(jb, je);
  746.     index_test(kb, ke);
  747.     index_test(nib, nie);
  748.     index_test(njb, nje);
  749.     index_test(nkb, nke);
  750.     for(i = ie; i >= ib; i--)
  751.         for (j = je; j >= jb; j--)
  752.             m[i][j] += (kb - nkb);
  753.     for(i = ie; i >= ib; i--)
  754.         m[i] += (jb - njb);
  755.     m += (ib - nib);
  756.     return((short ***) m);
  757. }
  758.  
  759. void s3_free(m, ib, ie, jb, je, kb, ke)
  760. short ***m;
  761. int ib, ie, jb, je, kb, ke;
  762. {
  763.     int i, j;
  764.     index_test(ib, ie);
  765.     index_test(jb, je);
  766.     index_test(kb, ke);
  767.     for(i = ie; i >= ib; i--)
  768.         for (j = je; j >= jb; j--)
  769.             xx_free((char*) (m[i][j] + kb),
  770.                 (unsigned) ((ke - kb + 1) * sizeof(short)));
  771.     for(i = ie; i >= ib; i--)
  772.         xx_free((char*) (m[i] + jb), 
  773.             (unsigned) ((je - jb + 1) * sizeof(short *)));
  774.     xx_free((char*) (m + ib),
  775.         (unsigned) ((ie - ib + 1) * sizeof(short **)));
  776.     return;
  777. }
  778.  
  779. void s3_init(m, ib, ie, jb, je, kb, ke, ini)
  780. short ***m;
  781. int ib, ie, jb, je, kb, ke;
  782. short ini;
  783. {
  784.     int i, j, k;
  785.     index_test(ib, ie);
  786.     index_test(jb, je);
  787.     index_test(kb, ke);
  788.     for (i = ib; i <= ie; i++)
  789.         for (j = jb; j <= je; j++)
  790.             for (k = kb; k <= ke; k++)
  791.                 m[i][j][k] = ini;
  792.     return;
  793. }
  794.  
  795. void s3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  796. FILE *fp;
  797. char *fmt;
  798. short ***m;
  799. int ib, ie, jb, je, kb, ke;
  800. {
  801.     int i, j, k;
  802.     index_test(ib, ie);
  803.     index_test(jb, je);
  804.     index_test(kb, ke);
  805.     for (i = ib; i <= ie; i++)
  806.     {
  807.         fprintf(fp, "%d\n", i);
  808.         for (j = jb; j <= je; j++)
  809.         {
  810.             for (k = kb; k <= ke; k++)
  811.                 fprintf(fp, fmt, m[i][j][k]);
  812.             fprintf(fp, "\n");
  813.         }
  814.     }
  815.     return;
  816. }
  817.  
  818.  
  819. /* long allocation */
  820.  
  821. long *l1_alloc(ib, ie)
  822. int ib, ie;
  823. {
  824.     long *m;
  825.     index_test(ib, ie);
  826.     m = (long *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(long));
  827.     if (m == (long *) NULL) return((long *) NULL);
  828.     m -= ib;
  829.     return((long *) m);
  830. }
  831.  
  832. long *l1_renum(m, ib, ie, nib, nie)
  833. long *m;
  834. int ib, ie, nib, nie;
  835. {
  836.     index_test(ib, ie);
  837.     index_test(nib, nie);
  838.     m += (ib - nib);
  839.     return((long *) m);
  840. }
  841.  
  842. void l1_free(m, ib, ie)
  843. long *m;
  844. int ib, ie;
  845. {
  846.     index_test(ib, ie);
  847.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(long)));
  848.     return;
  849. }
  850.  
  851. void l1_init(m, ib, ie, ini)
  852. long *m;
  853. int ib, ie;
  854. long ini;
  855. {
  856.     int i;
  857.     index_test(ib, ie);
  858.     for (i = ib; i <= ie; i++)
  859.         m[i] = ini;
  860.     return;
  861. }
  862.  
  863. void l1_prnt(fp, fmt, m, ib, ie)
  864. FILE *fp;
  865. char *fmt;
  866. long *m;
  867. int ib, ie;
  868. {
  869.     int i;
  870.     index_test(ib, ie);
  871.     for (i = ib; i <= ie; i++)
  872.         fprintf(fp, fmt, m[i]);
  873.     fprintf(fp, "\n");
  874.     return;
  875. }
  876.     
  877. long **l2_alloc(ib, ie, jb, je)
  878. int ib, ie, jb, je;
  879. {
  880.     int i;
  881.     long **m;
  882.     index_test(ib, ie);
  883.     index_test(jb, je);
  884.     m = (long **) xx_alloc((unsigned) (ie - ib + 1) *
  885.         sizeof(long *));
  886.     if (m == (long **) NULL) return((long **) NULL);
  887.     m -= ib;
  888.     for(i = ib; i <= ie; i++)
  889.     {
  890.         m[i] = (long *) xx_alloc((unsigned) (je - jb + 1) *
  891.             sizeof(long));
  892.         if (m[i] == (long *) NULL) return((long **) NULL);
  893.         m[i] -= jb;
  894.     }
  895.     return((long **) m);
  896. }
  897.  
  898. long **l2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  899. long **m;
  900. int ib, ie, jb, je, nib, nie, njb, nje;
  901. {
  902.     int i;
  903.     index_test(ib, ie);
  904.     index_test(jb, je);
  905.     index_test(nib, nie);
  906.     index_test(njb, nje);
  907.     for(i = ie; i >= ib; i--)
  908.         m[i] += (jb - njb);
  909.     m += (ib - nib);
  910.     return((long **) m);
  911. }
  912.  
  913. void l2_free(m, ib, ie, jb, je)
  914. long **m;
  915. int ib, ie, jb, je;
  916. {
  917.     int i;
  918.     index_test(ib, ie);
  919.     index_test(jb, je);
  920.     for(i = ie; i >= ib; i--)
  921.         xx_free((char*) (m[i] + jb), 
  922.             (unsigned) ((je - jb + 1) * sizeof(long)));
  923.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(long *)));
  924.     return;
  925. }
  926.  
  927. void l2_init(m, ib, ie, jb, je, ini)
  928. long **m;
  929. int ib, ie, jb, je;
  930. long ini;
  931. {
  932.     int i, j;
  933.     index_test(ib, ie);
  934.     index_test(jb, je);
  935.     for (i = ib; i <= ie; i++)
  936.         for (j = jb; j <= je; j++)
  937.             m[i][j] = ini;
  938.     return;
  939. }
  940.  
  941. void l2_prnt(fp, fmt, m, ib, ie, jb, je)
  942. FILE *fp;
  943. char *fmt;
  944. long **m;
  945. int ib, ie, jb, je;
  946. {
  947.     int i, j;
  948.     index_test(ib, ie);
  949.     index_test(jb, je);
  950.     for (i = ib; i <= ie; i++)
  951.     {
  952.         for (j = jb; j <= je; j++)
  953.             fprintf(fp, fmt, m[i][j]);
  954.         fprintf(fp, "\n");
  955.     }
  956.     return;
  957. }
  958.  
  959. long ***l3_alloc(ib, ie, jb, je, kb, ke)
  960. int ib, ie, jb, je, kb, ke;
  961. {
  962.     int i, j;
  963.     long ***m;
  964.     index_test(ib, ie);
  965.     index_test(jb, je);
  966.     index_test(kb, ke);
  967.     m = (long ***) xx_alloc((unsigned) (ie - ib + 1) * 
  968.         sizeof(long **));
  969.     if (m == (long ***) NULL) return((long ***) NULL);
  970.     m -= ib;
  971.     for(i = ib; i <= ie; i++)
  972.     {
  973.         m[i] = (long **) xx_alloc((unsigned) (je - jb + 1) * 
  974.             sizeof(long *));
  975.         if (m[i] == (long **) NULL) return((long ***) NULL);
  976.         m[i] -= jb;
  977.         for(j = jb; j <= je; j++)
  978.         {
  979.             m[i][j] = (long *) xx_alloc((unsigned) (ke - kb + 1) *
  980.                 sizeof(long));
  981.             if (m[i][j] == (long *) NULL) return((long ***) NULL);
  982.             m[i][j] -= kb;
  983.         }
  984.     }
  985.     return((long ***) m);
  986. }
  987.  
  988. long ***l3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  989. long ***m;
  990. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  991. {
  992.     int i, j;
  993.     index_test(ib, ie);
  994.     index_test(jb, je);
  995.     index_test(kb, ke);
  996.     index_test(nib, nie);
  997.     index_test(njb, nje);
  998.     index_test(nkb, nke);
  999.     for(i = ie; i >= ib; i--)
  1000.         for (j = je; j >= jb; j--)
  1001.             m[i][j] += (kb - nkb);
  1002.     for(i = ie; i >= ib; i--)
  1003.         m[i] += (jb - njb);
  1004.     m += (ib - nib);
  1005.     return((long ***) m);
  1006. }
  1007.  
  1008. void l3_free(m, ib, ie, jb, je, kb, ke)
  1009. long ***m;
  1010. int ib, ie, jb, je, kb, ke;
  1011. {
  1012.     int i, j;
  1013.     index_test(ib, ie);
  1014.     index_test(jb, je);
  1015.     index_test(kb, ke);
  1016.     for(i = ie; i >= ib; i--)
  1017.         for (j = je; j >= jb; j--)
  1018.             xx_free((char*) (m[i][j] + kb),
  1019.                 (unsigned) ((ke - kb + 1) * sizeof(long)));
  1020.     for(i = ie; i >= ib; i--)
  1021.         xx_free((char*) (m[i] + jb), 
  1022.             (unsigned) ((je - jb + 1) * sizeof(long *)));
  1023.     xx_free((char*) (m + ib),
  1024.         (unsigned) ((ie - ib + 1) * sizeof(long **)));
  1025.     return;
  1026. }
  1027.  
  1028. void l3_init(m, ib, ie, jb, je, kb, ke, ini)
  1029. long ***m;
  1030. int ib, ie, jb, je, kb, ke;
  1031. long ini;
  1032. {
  1033.     int i, j, k;
  1034.     index_test(ib, ie);
  1035.     index_test(jb, je);
  1036.     index_test(kb, ke);
  1037.     for (i = ib; i <= ie; i++)
  1038.         for (j = jb; j <= je; j++)
  1039.             for (k = kb; k <= ke; k++)
  1040.                 m[i][j][k] = ini;
  1041.     return;
  1042. }
  1043.  
  1044. void l3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  1045. FILE *fp;
  1046. char *fmt;
  1047. long ***m;
  1048. int ib, ie, jb, je, kb, ke;
  1049. {
  1050.     int i, j, k;
  1051.     index_test(ib, ie);
  1052.     index_test(jb, je);
  1053.     index_test(kb, ke);
  1054.     for (i = ib; i <= ie; i++)
  1055.     {
  1056.         fprintf(fp, "%d\n", i);
  1057.         for (j = jb; j <= je; j++)
  1058.         {
  1059.             for (k = kb; k <= ke; k++)
  1060.                 fprintf(fp, fmt, m[i][j][k]);
  1061.             fprintf(fp, "\n");
  1062.         }
  1063.     }
  1064.     return;
  1065. }
  1066.  
  1067.  
  1068. /* int allocation */
  1069.  
  1070. int *i1_alloc(ib, ie)
  1071. int ib, ie;
  1072. {
  1073.     int *m;
  1074.     index_test(ib, ie);
  1075.     m = (int *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(int));
  1076.     if (m == (int *) NULL) return((int *) NULL);
  1077.     m -= ib;
  1078.     return((int *) m);
  1079. }
  1080.  
  1081. int *i1_renum(m, ib, ie, nib, nie)
  1082. int *m;
  1083. int ib, ie, nib, nie;
  1084. {
  1085.     index_test(ib, ie);
  1086.     index_test(nib, nie);
  1087.     m += (ib - nib);
  1088.     return((int *) m);
  1089. }
  1090.  
  1091. void i1_free(m, ib, ie)
  1092. int *m;
  1093. int ib, ie;
  1094. {
  1095.     index_test(ib, ie);
  1096.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(int)));
  1097.     return;
  1098. }
  1099.  
  1100. void i1_init(m, ib, ie, ini)
  1101. int *m;
  1102. int ib, ie;
  1103. int ini;
  1104. {
  1105.     int i;
  1106.     index_test(ib, ie);
  1107.     for (i = ib; i <= ie; i++)
  1108.         m[i] = ini;
  1109.     return;
  1110. }
  1111.  
  1112. void i1_prnt(fp, fmt, m, ib, ie)
  1113. FILE *fp;
  1114. char *fmt;
  1115. int *m;
  1116. int ib, ie;
  1117. {
  1118.     int i;
  1119.     index_test(ib, ie);
  1120.     for (i = ib; i <= ie; i++)
  1121.         fprintf(fp, fmt, m[i]);
  1122.     fprintf(fp, "\n");
  1123.     return;
  1124. }
  1125.     
  1126. int **i2_alloc(ib, ie, jb, je)
  1127. int ib, ie, jb, je;
  1128. {
  1129.     int i;
  1130.     int **m;
  1131.     index_test(ib, ie);
  1132.     index_test(jb, je);
  1133.     m = (int **) xx_alloc((unsigned) (ie - ib + 1) *
  1134.         sizeof(int *));
  1135.     if (m == (int **) NULL) return((int **) NULL);
  1136.     m -= ib;
  1137.     for(i = ib; i <= ie; i++)
  1138.     {
  1139.         m[i] = (int *) xx_alloc((unsigned) (je - jb + 1) *
  1140.             sizeof(int));
  1141.         if (m[i] == (int *) NULL) return((int **) NULL);
  1142.         m[i] -= jb;
  1143.     }
  1144.     return((int **) m);
  1145. }
  1146.  
  1147. int **i2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  1148. int **m;
  1149. int ib, ie, jb, je, nib, nie, njb, nje;
  1150. {
  1151.     int i;
  1152.     index_test(ib, ie);
  1153.     index_test(jb, je);
  1154.     index_test(nib, nie);
  1155.     index_test(njb, nje);
  1156.     for(i = ie; i >= ib; i--)
  1157.         m[i] += (jb - njb);
  1158.     m += (ib - nib);
  1159.     return((int **) m);
  1160. }
  1161.  
  1162. void i2_free(m, ib, ie, jb, je)
  1163. int **m;
  1164. int ib, ie, jb, je;
  1165. {
  1166.     int i;
  1167.     index_test(ib, ie);
  1168.     index_test(jb, je);
  1169.     for(i = ie; i >= ib; i--)
  1170.         xx_free((char*) (m[i] + jb), 
  1171.             (unsigned) ((je - jb + 1) * sizeof(int)));
  1172.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(int *)));
  1173.     return;
  1174. }
  1175.  
  1176. void i2_init(m, ib, ie, jb, je, ini)
  1177. int **m;
  1178. int ib, ie, jb, je;
  1179. int ini;
  1180. {
  1181.     int i, j;
  1182.     index_test(ib, ie);
  1183.     index_test(jb, je);
  1184.     for (i = ib; i <= ie; i++)
  1185.         for (j = jb; j <= je; j++)
  1186.             m[i][j] = ini;
  1187.     return;
  1188. }
  1189.  
  1190. void i2_prnt(fp, fmt, m, ib, ie, jb, je)
  1191. FILE *fp;
  1192. char *fmt;
  1193. int **m;
  1194. int ib, ie, jb, je;
  1195. {
  1196.     int i, j;
  1197.     index_test(ib, ie);
  1198.     index_test(jb, je);
  1199.     for (i = ib; i <= ie; i++)
  1200.     {
  1201.         for (j = jb; j <= je; j++)
  1202.             fprintf(fp, fmt, m[i][j]);
  1203.         fprintf(fp, "\n");
  1204.     }
  1205.     return;
  1206. }
  1207.  
  1208. int ***i3_alloc(ib, ie, jb, je, kb, ke)
  1209. int ib, ie, jb, je, kb, ke;
  1210. {
  1211.     int i, j;
  1212.     int ***m;
  1213.     index_test(ib, ie);
  1214.     index_test(jb, je);
  1215.     index_test(kb, ke);
  1216.     m = (int ***) xx_alloc((unsigned) (ie - ib + 1) * 
  1217.         sizeof(int **));
  1218.     if (m == (int ***) NULL) return((int ***) NULL);
  1219.     m -= ib;
  1220.     for(i = ib; i <= ie; i++)
  1221.     {
  1222.         m[i] = (int **) xx_alloc((unsigned) (je - jb + 1) * 
  1223.             sizeof(int *));
  1224.         if (m[i] == (int **) NULL) return((int ***) NULL);
  1225.         m[i] -= jb;
  1226.         for(j = jb; j <= je; j++)
  1227.         {
  1228.             m[i][j] = (int *) xx_alloc((unsigned) (ke - kb + 1) *
  1229.                 sizeof(int));
  1230.             if (m[i][j] == (int *) NULL) return((int ***) NULL);
  1231.             m[i][j] -= kb;
  1232.         }
  1233.     }
  1234.     return((int ***) m);
  1235. }
  1236.  
  1237. int ***i3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  1238. int ***m;
  1239. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  1240. {
  1241.     int i, j;
  1242.     index_test(ib, ie);
  1243.     index_test(jb, je);
  1244.     index_test(kb, ke);
  1245.     index_test(nib, nie);
  1246.     index_test(njb, nje);
  1247.     index_test(nkb, nke);
  1248.     for(i = ie; i >= ib; i--)
  1249.         for (j = je; j >= jb; j--)
  1250.             m[i][j] += (kb - nkb);
  1251.     for(i = ie; i >= ib; i--)
  1252.         m[i] += (jb - njb);
  1253.     m += (ib - nib);
  1254.     return((int ***) m);
  1255. }
  1256.  
  1257. void i3_free(m, ib, ie, jb, je, kb, ke)
  1258. int ***m;
  1259. int ib, ie, jb, je, kb, ke;
  1260. {
  1261.     int i, j;
  1262.     index_test(ib, ie);
  1263.     index_test(jb, je);
  1264.     index_test(kb, ke);
  1265.     for(i = ie; i >= ib; i--)
  1266.         for (j = je; j >= jb; j--)
  1267.             xx_free((char*) (m[i][j] + kb),
  1268.                 (unsigned) ((ke - kb + 1) * sizeof(int)));
  1269.     for(i = ie; i >= ib; i--)
  1270.         xx_free((char*) (m[i] + jb), 
  1271.             (unsigned) ((je - jb + 1) * sizeof(int *)));
  1272.     xx_free((char*) (m + ib),
  1273.         (unsigned) ((ie - ib + 1) * sizeof(int **)));
  1274.     return;
  1275. }
  1276.  
  1277. void i3_init(m, ib, ie, jb, je, kb, ke, ini)
  1278. int ***m;
  1279. int ib, ie, jb, je, kb, ke;
  1280. int ini;
  1281. {
  1282.     int i, j, k;
  1283.     index_test(ib, ie);
  1284.     index_test(jb, je);
  1285.     index_test(kb, ke);
  1286.     for (i = ib; i <= ie; i++)
  1287.         for (j = jb; j <= je; j++)
  1288.             for (k = kb; k <= ke; k++)
  1289.                 m[i][j][k] = ini;
  1290.     return;
  1291. }
  1292.  
  1293. void i3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  1294. FILE *fp;
  1295. char *fmt;
  1296. int ***m;
  1297. int ib, ie, jb, je, kb, ke;
  1298. {
  1299.     int i, j, k;
  1300.     index_test(ib, ie);
  1301.     index_test(jb, je);
  1302.     index_test(kb, ke);
  1303.     for (i = ib; i <= ie; i++)
  1304.     {
  1305.         fprintf(fp, "%d\n", i);
  1306.         for (j = jb; j <= je; j++)
  1307.         {
  1308.             for (k = kb; k <= ke; k++)
  1309.                 fprintf(fp, fmt, m[i][j][k]);
  1310.             fprintf(fp, "\n");
  1311.         }
  1312.     }
  1313.     return;
  1314. }
  1315.  
  1316.  
  1317. /* float allocation */
  1318.  
  1319. float *f1_alloc(ib, ie)
  1320. int ib, ie;
  1321. {
  1322.     float *m;
  1323.     index_test(ib, ie);
  1324.     m = (float *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(float));
  1325.     if (m == (float *) NULL) return((float *) NULL);
  1326.     m -= ib;
  1327.     return((float *) m);
  1328. }
  1329.  
  1330. float *f1_renum(m, ib, ie, nib, nie)
  1331. float *m;
  1332. int ib, ie, nib, nie;
  1333. {
  1334.     index_test(ib, ie);
  1335.     index_test(nib, nie);
  1336.     m += (ib - nib);
  1337.     return((float *) m);
  1338. }
  1339.  
  1340. void f1_free(m, ib, ie)
  1341. float *m;
  1342. int ib, ie;
  1343. {
  1344.     index_test(ib, ie);
  1345.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(float)));
  1346.     return;
  1347. }
  1348.  
  1349. void f1_init(m, ib, ie, ini)
  1350. float *m;
  1351. int ib, ie;
  1352. float ini;
  1353. {
  1354.     int i;
  1355.     index_test(ib, ie);
  1356.     for (i = ib; i <= ie; i++)
  1357.         m[i] = ini;
  1358.     return;
  1359. }
  1360.  
  1361. void f1_prnt(fp, fmt, m, ib, ie)
  1362. FILE *fp;
  1363. char *fmt;
  1364. float *m;
  1365. int ib, ie;
  1366. {
  1367.     int i;
  1368.     index_test(ib, ie);
  1369.     for (i = ib; i <= ie; i++)
  1370.         fprintf(fp, fmt, m[i]);
  1371.     fprintf(fp, "\n");
  1372.     return;
  1373. }
  1374.     
  1375. float **f2_alloc(ib, ie, jb, je)
  1376. int ib, ie, jb, je;
  1377. {
  1378.     int i;
  1379.     float **m;
  1380.     index_test(ib, ie);
  1381.     index_test(jb, je);
  1382.     m = (float **) xx_alloc((unsigned) (ie - ib + 1) *
  1383.         sizeof(float *));
  1384.     if (m == (float **) NULL) return((float **) NULL);
  1385.     m -= ib;
  1386.     for(i = ib; i <= ie; i++)
  1387.     {
  1388.         m[i] = (float *) xx_alloc((unsigned) (je - jb + 1) *
  1389.             sizeof(float));
  1390.         if (m[i] == (float *) NULL) return((float **) NULL);
  1391.         m[i] -= jb;
  1392.     }
  1393.     return((float **) m);
  1394. }
  1395.  
  1396. float **f2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  1397. float **m;
  1398. int ib, ie, jb, je, nib, nie, njb, nje;
  1399. {
  1400.     int i;
  1401.     index_test(ib, ie);
  1402.     index_test(jb, je);
  1403.     index_test(nib, nie);
  1404.     index_test(njb, nje);
  1405.     for(i = ie; i >= ib; i--)
  1406.         m[i] += (jb - njb);
  1407.     m += (ib - nib);
  1408.     return((float **) m);
  1409. }
  1410.  
  1411. void f2_free(m, ib, ie, jb, je)
  1412. float **m;
  1413. int ib, ie, jb, je;
  1414. {
  1415.     int i;
  1416.     index_test(ib, ie);
  1417.     index_test(jb, je);
  1418.     for(i = ie; i >= ib; i--)
  1419.         xx_free((char*) (m[i] + jb), 
  1420.             (unsigned) ((je - jb + 1) * sizeof(float)));
  1421.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(float *)));
  1422.     return;
  1423. }
  1424.  
  1425. void f2_init(m, ib, ie, jb, je, ini)
  1426. float **m;
  1427. int ib, ie, jb, je;
  1428. float ini;
  1429. {
  1430.     int i, j;
  1431.     index_test(ib, ie);
  1432.     index_test(jb, je);
  1433.     for (i = ib; i <= ie; i++)
  1434.         for (j = jb; j <= je; j++)
  1435.             m[i][j] = ini;
  1436.     return;
  1437. }
  1438.  
  1439. void f2_prnt(fp, fmt, m, ib, ie, jb, je)
  1440. FILE *fp;
  1441. char *fmt;
  1442. float **m;
  1443. int ib, ie, jb, je;
  1444. {
  1445.     int i, j;
  1446.     index_test(ib, ie);
  1447.     index_test(jb, je);
  1448.     for (i = ib; i <= ie; i++)
  1449.     {
  1450.         for (j = jb; j <= je; j++)
  1451.             fprintf(fp, fmt, m[i][j]);
  1452.         fprintf(fp, "\n");
  1453.     }
  1454.     return;
  1455. }
  1456.  
  1457. float ***f3_alloc(ib, ie, jb, je, kb, ke)
  1458. int ib, ie, jb, je, kb, ke;
  1459. {
  1460.     int i, j;
  1461.     float ***m;
  1462.     index_test(ib, ie);
  1463.     index_test(jb, je);
  1464.     index_test(kb, ke);
  1465.     m = (float ***) xx_alloc((unsigned) (ie - ib + 1) * 
  1466.         sizeof(float **));
  1467.     if (m == (float ***) NULL) return((float ***) NULL);
  1468.     m -= ib;
  1469.     for(i = ib; i <= ie; i++)
  1470.     {
  1471.         m[i] = (float **) xx_alloc((unsigned) (je - jb + 1) * 
  1472.             sizeof(float *));
  1473.         if (m[i] == (float **) NULL) return((float ***) NULL);
  1474.         m[i] -= jb;
  1475.         for(j = jb; j <= je; j++)
  1476.         {
  1477.             m[i][j] = (float *) xx_alloc((unsigned) (ke - kb + 1) *
  1478.                 sizeof(float));
  1479.             if (m[i][j] == (float *) NULL) return((float ***) NULL);
  1480.             m[i][j] -= kb;
  1481.         }
  1482.     }
  1483.     return((float ***) m);
  1484. }
  1485.  
  1486. float ***f3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  1487. float ***m;
  1488. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  1489. {
  1490.     int i, j;
  1491.     index_test(ib, ie);
  1492.     index_test(jb, je);
  1493.     index_test(kb, ke);
  1494.     index_test(nib, nie);
  1495.     index_test(njb, nje);
  1496.     index_test(nkb, nke);
  1497.     for(i = ie; i >= ib; i--)
  1498.         for (j = je; j >= jb; j--)
  1499.             m[i][j] += (kb - nkb);
  1500.     for(i = ie; i >= ib; i--)
  1501.         m[i] += (jb - njb);
  1502.     m += (ib - nib);
  1503.     return((float ***) m);
  1504. }
  1505.  
  1506. void f3_free(m, ib, ie, jb, je, kb, ke)
  1507. float ***m;
  1508. int ib, ie, jb, je, kb, ke;
  1509. {
  1510.     int i, j;
  1511.     index_test(ib, ie);
  1512.     index_test(jb, je);
  1513.     index_test(kb, ke);
  1514.     for(i = ie; i >= ib; i--)
  1515.         for (j = je; j >= jb; j--)
  1516.             xx_free((char*) (m[i][j] + kb),
  1517.                 (unsigned) ((ke - kb + 1) * sizeof(float)));
  1518.     for(i = ie; i >= ib; i--)
  1519.         xx_free((char*) (m[i] + jb), 
  1520.             (unsigned) ((je - jb + 1) * sizeof(float *)));
  1521.     xx_free((char*) (m + ib),
  1522.         (unsigned) ((ie - ib + 1) * sizeof(float **)));
  1523.     return;
  1524. }
  1525.  
  1526. void f3_init(m, ib, ie, jb, je, kb, ke, ini)
  1527. float ***m;
  1528. int ib, ie, jb, je, kb, ke;
  1529. float ini;
  1530. {
  1531.     int i, j, k;
  1532.     index_test(ib, ie);
  1533.     index_test(jb, je);
  1534.     index_test(kb, ke);
  1535.     for (i = ib; i <= ie; i++)
  1536.         for (j = jb; j <= je; j++)
  1537.             for (k = kb; k <= ke; k++)
  1538.                 m[i][j][k] = ini;
  1539.     return;
  1540. }
  1541.  
  1542. void f3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  1543. FILE *fp;
  1544. char *fmt;
  1545. float ***m;
  1546. int ib, ie, jb, je, kb, ke;
  1547. {
  1548.     int i, j, k;
  1549.     index_test(ib, ie);
  1550.     index_test(jb, je);
  1551.     index_test(kb, ke);
  1552.     for (i = ib; i <= ie; i++)
  1553.     {
  1554.         fprintf(fp, "%d\n", i);
  1555.         for (j = jb; j <= je; j++)
  1556.         {
  1557.             for (k = kb; k <= ke; k++)
  1558.                 fprintf(fp, fmt, m[i][j][k]);
  1559.             fprintf(fp, "\n");
  1560.         }
  1561.     }
  1562.     return;
  1563. }
  1564.  
  1565.  
  1566. /* double allocation */
  1567.  
  1568. double *d1_alloc(ib, ie)
  1569. int ib, ie;
  1570. {
  1571.     double *m;
  1572.     index_test(ib, ie);
  1573.     m = (double *) xx_alloc((unsigned) (ie - ib + 1) * sizeof(double));
  1574.     if (m == (double *) NULL) return((double *) NULL);
  1575.     m -= ib;
  1576.     return((double *) m);
  1577. }
  1578.  
  1579. double *d1_renum(m, ib, ie, nib, nie)
  1580. double *m;
  1581. int ib, ie, nib, nie;
  1582. {
  1583.     index_test(ib, ie);
  1584.     index_test(nib, nie);
  1585.     m += (ib - nib);
  1586.     return((double *) m);
  1587. }
  1588.  
  1589. void d1_free(m, ib, ie)
  1590. double *m;
  1591. int ib, ie;
  1592. {
  1593.     index_test(ib, ie);
  1594.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(double)));
  1595.     return;
  1596. }
  1597.  
  1598. void d1_init(m, ib, ie, ini)
  1599. double *m;
  1600. int ib, ie;
  1601. double ini;
  1602. {
  1603.     int i;
  1604.     index_test(ib, ie);
  1605.     for (i = ib; i <= ie; i++)
  1606.         m[i] = ini;
  1607.     return;
  1608. }
  1609.  
  1610. void d1_prnt(fp, fmt, m, ib, ie)
  1611. FILE *fp;
  1612. char *fmt;
  1613. double *m;
  1614. int ib, ie;
  1615. {
  1616.     int i;
  1617.     index_test(ib, ie);
  1618.     for (i = ib; i <= ie; i++)
  1619.         fprintf(fp, fmt, m[i]);
  1620.     fprintf(fp, "\n");
  1621.     return;
  1622. }
  1623.     
  1624. double **d2_alloc(ib, ie, jb, je)
  1625. int ib, ie, jb, je;
  1626. {
  1627.     int i;
  1628.     double **m;
  1629.     index_test(ib, ie);
  1630.     index_test(jb, je);
  1631.     m = (double **) xx_alloc((unsigned) (ie - ib + 1) *
  1632.         sizeof(double *));
  1633.     if (m == (double **) NULL) return((double **) NULL);
  1634.     m -= ib;
  1635.     for(i = ib; i <= ie; i++)
  1636.     {
  1637.         m[i] = (double *) xx_alloc((unsigned) (je - jb + 1) *
  1638.             sizeof(double));
  1639.         if (m[i] == (double *) NULL) return((double **) NULL);
  1640.         m[i] -= jb;
  1641.     }
  1642.     return((double **) m);
  1643. }
  1644.  
  1645. double **d2_renum(m, ib, ie, jb, je, nib, nie, njb, nje)
  1646. double **m;
  1647. int ib, ie, jb, je, nib, nie, njb, nje;
  1648. {
  1649.     int i;
  1650.     index_test(ib, ie);
  1651.     index_test(jb, je);
  1652.     index_test(nib, nie);
  1653.     index_test(njb, nje);
  1654.     for(i = ie; i >= ib; i--)
  1655.         m[i] += (jb - njb);
  1656.     m += (ib - nib);
  1657.     return((double **) m);
  1658. }
  1659.  
  1660. void d2_free(m, ib, ie, jb, je)
  1661. double **m;
  1662. int ib, ie, jb, je;
  1663. {
  1664.     int i;
  1665.     index_test(ib, ie);
  1666.     index_test(jb, je);
  1667.     for(i = ie; i >= ib; i--)
  1668.         xx_free((char*) (m[i] + jb), 
  1669.             (unsigned) ((je - jb + 1) * sizeof(double)));
  1670.     xx_free((char*) (m + ib), (unsigned) ((ie - ib + 1) * sizeof(double *)));
  1671.     return;
  1672. }
  1673.  
  1674. void d2_init(m, ib, ie, jb, je, ini)
  1675. double **m;
  1676. int ib, ie, jb, je;
  1677. double ini;
  1678. {
  1679.     int i, j;
  1680.     index_test(ib, ie);
  1681.     index_test(jb, je);
  1682.     for (i = ib; i <= ie; i++)
  1683.         for (j = jb; j <= je; j++)
  1684.             m[i][j] = ini;
  1685.     return;
  1686. }
  1687.  
  1688. void d2_prnt(fp, fmt, m, ib, ie, jb, je)
  1689. FILE *fp;
  1690. char *fmt;
  1691. double **m;
  1692. int ib, ie, jb, je;
  1693. {
  1694.     int i, j;
  1695.     index_test(ib, ie);
  1696.     index_test(jb, je);
  1697.     for (i = ib; i <= ie; i++)
  1698.     {
  1699.         for (j = jb; j <= je; j++)
  1700.             fprintf(fp, fmt, m[i][j]);
  1701.         fprintf(fp, "\n");
  1702.     }
  1703.     return;
  1704. }
  1705.  
  1706. double ***d3_alloc(ib, ie, jb, je, kb, ke)
  1707. int ib, ie, jb, je, kb, ke;
  1708. {
  1709.     int i, j;
  1710.     double ***m;
  1711.     index_test(ib, ie);
  1712.     index_test(jb, je);
  1713.     index_test(kb, ke);
  1714.     m = (double ***) xx_alloc((unsigned) (ie - ib + 1) * 
  1715.         sizeof(double **));
  1716.     if (m == (double ***) NULL) return((double ***) NULL);
  1717.     m -= ib;
  1718.     for(i = ib; i <= ie; i++)
  1719.     {
  1720.         m[i] = (double **) xx_alloc((unsigned) (je - jb + 1) * 
  1721.             sizeof(double *));
  1722.         if (m[i] == (double **) NULL) return((double ***) NULL);
  1723.         m[i] -= jb;
  1724.         for(j = jb; j <= je; j++)
  1725.         {
  1726.             m[i][j] = (double *) xx_alloc((unsigned) (ke - kb + 1) *
  1727.                 sizeof(double));
  1728.             if (m[i][j] == (double *) NULL) return((double ***) NULL);
  1729.             m[i][j] -= kb;
  1730.         }
  1731.     }
  1732.     return((double ***) m);
  1733. }
  1734.  
  1735. double ***d3_renum(m, ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke)
  1736. double ***m;
  1737. int ib, ie, jb, je, kb, ke, nib, nie, njb, nje, nkb, nke;
  1738. {
  1739.     int i, j;
  1740.     index_test(ib, ie);
  1741.     index_test(jb, je);
  1742.     index_test(kb, ke);
  1743.     index_test(nib, nie);
  1744.     index_test(njb, nje);
  1745.     index_test(nkb, nke);
  1746.     for(i = ie; i >= ib; i--)
  1747.         for (j = je; j >= jb; j--)
  1748.             m[i][j] += (kb - nkb);
  1749.     for(i = ie; i >= ib; i--)
  1750.         m[i] += (jb - njb);
  1751.     m += (ib - nib);
  1752.     return((double ***) m);
  1753. }
  1754.  
  1755. void d3_free(m, ib, ie, jb, je, kb, ke)
  1756. double ***m;
  1757. int ib, ie, jb, je, kb, ke;
  1758. {
  1759.     int i, j;
  1760.     index_test(ib, ie);
  1761.     index_test(jb, je);
  1762.     index_test(kb, ke);
  1763.     for(i = ie; i >= ib; i--)
  1764.         for (j = je; j >= jb; j--)
  1765.             xx_free((char*) (m[i][j] + kb),
  1766.                 (unsigned) ((ke - kb + 1) * sizeof(double)));
  1767.     for(i = ie; i >= ib; i--)
  1768.         xx_free((char*) (m[i] + jb), 
  1769.             (unsigned) ((je - jb + 1) * sizeof(double *)));
  1770.     xx_free((char*) (m + ib),
  1771.         (unsigned) ((ie - ib + 1) * sizeof(double **)));
  1772.     return;
  1773. }
  1774.  
  1775. void d3_init(m, ib, ie, jb, je, kb, ke, ini)
  1776. double ***m;
  1777. int ib, ie, jb, je, kb, ke;
  1778. double ini;
  1779. {
  1780.     int i, j, k;
  1781.     index_test(ib, ie);
  1782.     index_test(jb, je);
  1783.     index_test(kb, ke);
  1784.     for (i = ib; i <= ie; i++)
  1785.         for (j = jb; j <= je; j++)
  1786.             for (k = kb; k <= ke; k++)
  1787.                 m[i][j][k] = ini;
  1788.     return;
  1789. }
  1790.  
  1791. void d3_prnt(fp, fmt, m, ib, ie, jb, je, kb, ke)
  1792. FILE *fp;
  1793. char *fmt;
  1794. double ***m;
  1795. int ib, ie, jb, je, kb, ke;
  1796. {
  1797.     int i, j, k;
  1798.     index_test(ib, ie);
  1799.     index_test(jb, je);
  1800.     index_test(kb, ke);
  1801.     for (i = ib; i <= ie; i++)
  1802.     {
  1803.         fprintf(fp, "%d\n", i);
  1804.         for (j = jb; j <= je; j++)
  1805.         {
  1806.             for (k = kb; k <= ke; k++)
  1807.                 fprintf(fp, fmt, m[i][j][k]);
  1808.             fprintf(fp, "\n");
  1809.         }
  1810.     }
  1811.     return;
  1812. }
  1813.  
  1814.  
  1815.