3 * Copyright (C) INRIA - Alan LAYEC
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 * See the file ./license.txt
21 /*--------------------------------------------------------------------------*/
23 #include "machine.h" /* C2F */
24 #include "extractblklist.h"
25 #include "MlistGetFieldNumber.h"
28 /*--------------------------------------------------------------------------*/
29 extern int *listentry(int *header, int i);
30 /*--------------------------------------------------------------------------*/
31 int extractblklist(int *il, scicos_block *Block, int *ierr)
35 * ierr = 0 : no errors
36 * ierr = -39 : allocation error
37 * ierr = 98 : invalid field name
41 /* variables for scilab stack */
48 /* local counter variables */
55 n = MlistGetFieldNumber(il, "nevprt");
61 ilh = (int *) (listentry(il, n));
64 Block->nevprt = (int) * ((double *)(&ilh[4]));
67 n = MlistGetFieldNumber(il, "funpt");
73 ilh = (int *) (listentry(il, n));
76 // pointer value is stored on double values, restoring as a copy will take
77 // care of alignement issues and pointer size issues.
78 memcpy(&Block->funpt, &ilh[4], sizeof(voidg));
81 n = MlistGetFieldNumber(il, "type");
87 ilh = (int *) (listentry(il, n));
90 Block->type = (int) * ((double *)(&ilh[4]));
93 n = MlistGetFieldNumber(il, "scsptr");
99 ilh = (int *) (listentry(il, n));
102 Block->scsptr = (int) * ((double *)(&ilh[4]));
105 n = MlistGetFieldNumber(il, "nz");
111 ilh = (int *) (listentry(il, n));
114 Block->nz = (int) * ((double *)(&ilh[4]));
117 n = MlistGetFieldNumber(il, "z");
123 ilh = (int *) (listentry(il, n));
129 if ((Block->z = (double *) MALLOC(Block->nz * sizeof(double))) == NULL)
134 for (j = 0; j < Block->nz; j++)
136 Block->z[j] = *((double *)(&ilh[4]) + j);
141 n = MlistGetFieldNumber(il, "noz");
148 ilh = (int *) (listentry(il, n));
151 Block->noz = (int) * ((double *)(&ilh[4]));
154 n = MlistGetFieldNumber(il, "ozsz");
161 ilh = (int *) (listentry(il, n));
167 if ((Block->ozsz = (int *) MALLOC(2 * Block->noz * sizeof(int))) == NULL)
175 for (j = 0; j < 2 * Block->noz; j++)
177 Block->ozsz[j] = (int) * ((double *)(&ilh[4]) + j);
181 n = MlistGetFieldNumber(il, "oztyp");
189 ilh = (int *) (listentry(il, n));
195 if ((Block->oztyp = (int *) MALLOC(Block->noz * sizeof(int))) == NULL)
203 for (j = 0; j < Block->noz; j++)
205 Block->oztyp[j] = (int) * ((double *)(&ilh[4]) + j);
209 n = MlistGetFieldNumber(il, "oz");
218 ilh = (int *) (listentry(il, n));
224 if ((Block->ozptr = (void **) MALLOC(Block->noz * sizeof(void *))) == NULL)
233 for (i = 0; i < Block->noz; i++)
235 ilh2 = (int *) (listentry(ilh, i + 1));
238 Block->ozptr[i] = NULL;
239 switch (Block->oztyp[i])
242 if ((Block->ozptr[i] = (double *) MALLOC(mh2 * nh2 * sizeof(double))) == NULL)
247 for (j = 0; j < i; j++)
249 FREE(Block->ozptr[j]);
254 memcpy((double *)Block->ozptr[i], \
255 (double *)(&ilh2[4]), \
256 mh2 * nh2 * sizeof(double));
260 if ((Block->ozptr[i] = (double *) MALLOC(2 * mh2 * nh2 * sizeof(double))) == NULL)
265 for (j = 0; j < i; j++)
267 FREE(Block->ozptr[j]);
272 memcpy((double *)Block->ozptr[i], \
273 (double *)(&ilh2[4]), \
274 2 * mh2 * nh2 * sizeof(double));
278 if ((Block->ozptr[i] = (long *) MALLOC(mh2 * nh2 * sizeof(long))) == NULL)
283 for (j = 0; j < i; j++)
285 FREE(Block->ozptr[j]);
290 memcpy((long *)Block->ozptr[i], \
291 (long *)(&ilh2[4]), \
292 mh2 * nh2 * sizeof(long));
296 if ((Block->ozptr[i] = (short *) MALLOC(mh2 * nh2 * sizeof(short))) == NULL)
301 for (j = 0; j < i; j++)
303 FREE(Block->ozptr[j]);
308 memcpy((short *)Block->ozptr[i], \
309 (short *)(&ilh2[4]), \
310 mh2 * nh2 * sizeof(short));
314 if ((Block->ozptr[i] = (char *) MALLOC(mh2 * nh2 * sizeof(char))) == NULL)
319 for (j = 0; j < i; j++)
321 FREE(Block->ozptr[j]);
326 memcpy((char *)Block->ozptr[i], \
327 (char *)(&ilh2[4]), \
328 mh2 * nh2 * sizeof(char));
332 if ((Block->ozptr[i] = (unsigned long *) MALLOC(mh2 * nh2 * sizeof(unsigned long))) == NULL)
337 for (j = 0; j < i; j++)
339 FREE(Block->ozptr[j]);
344 memcpy((unsigned long *)Block->ozptr[i], \
345 (unsigned long *)(&ilh2[4]), \
346 mh2 * nh2 * sizeof(unsigned long));
350 if ((Block->ozptr[i] = (unsigned short *) MALLOC(mh2 * nh2 * sizeof(unsigned short))) == NULL)
355 for (j = 0; j < i; j++)
357 FREE(Block->ozptr[j]);
362 memcpy((unsigned short *)Block->ozptr[i], \
363 (unsigned short *)(&ilh2[4]), \
364 mh2 * nh2 * sizeof(unsigned short));
368 if ((Block->ozptr[i] = (unsigned char *) MALLOC(mh2 * nh2 * sizeof(unsigned char))) == NULL)
373 for (j = 0; j < i; j++)
375 FREE(Block->ozptr[j]);
380 memcpy((unsigned char *)Block->ozptr[i], \
381 (unsigned char *)(&ilh2[4]), \
382 mh2 * nh2 * sizeof(unsigned char));
389 n = MlistGetFieldNumber(il, "nx");
395 for (j = 0; j < Block->noz; j++)
397 FREE(Block->ozptr[j]);
403 ilh = (int *) (listentry(il, n));
406 Block->nx = (int) * ((double *)(&ilh[4]));
409 n = MlistGetFieldNumber(il, "x");
415 for (j = 0; j < Block->noz; j++)
417 FREE(Block->ozptr[j]);
423 ilh = (int *) (listentry(il, n));
429 if ((Block->x = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
434 for (j = 0; j < Block->noz; j++)
436 FREE(Block->ozptr[j]);
443 for (j = 0; j < (mh * nh); j++)
445 Block->x[j] = *((double *)(&ilh[4]) + j);
449 n = MlistGetFieldNumber(il, "xd");
455 for (j = 0; j < Block->noz; j++)
457 FREE(Block->ozptr[j]);
464 ilh = (int *) (listentry(il, n));
470 if ((Block->xd = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
475 for (j = 0; j < Block->noz; j++)
477 FREE(Block->ozptr[j]);
485 for (j = 0; j < (mh * nh); j++)
487 Block->xd[j] = *((double *)(&ilh[4]) + j);
491 n = MlistGetFieldNumber(il, "res");
497 for (j = 0; j < Block->noz; j++)
499 FREE(Block->ozptr[j]);
507 ilh = (int *) (listentry(il, n));
513 if ((Block->res = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
518 for (j = 0; j < Block->noz; j++)
520 FREE(Block->ozptr[j]);
530 for (j = 0; j < (mh * nh); j++)
532 Block->res[j] = *((double *)(&ilh[4]) + j);
536 n = MlistGetFieldNumber(il, "nin");
542 for (j = 0; j < Block->noz; j++)
544 FREE(Block->ozptr[j]);
553 ilh = (int *) (listentry(il, n));
556 Block->nin = (int) * ((double *)(&ilh[4]));
559 n = MlistGetFieldNumber(il, "insz");
565 for (j = 0; j < Block->noz; j++)
567 FREE(Block->ozptr[j]);
576 ilh = (int *) (listentry(il, n));
582 if ((Block->insz = (int *) MALLOC(3 * Block->nin * sizeof(int))) == NULL)
587 for (j = 0; j < Block->noz; j++)
589 FREE(Block->ozptr[j]);
599 for (j = 0; j < 3 * Block->nin; j++)
601 Block->insz[j] = (int) * ((double *)(&ilh[4]) + j);
605 n = MlistGetFieldNumber(il, "inptr");
611 for (j = 0; j < Block->noz; j++)
613 FREE(Block->ozptr[j]);
623 ilh = (int *) (listentry(il, n));
629 if ((Block->inptr = (void **) MALLOC(Block->nin * sizeof(void *))) == NULL)
634 for (j = 0; j < Block->noz; j++)
636 FREE(Block->ozptr[j]);
646 for (i = 0; i < Block->nin; i++)
648 ilh2 = (int *) (listentry(ilh, i + 1));
651 Block->inptr[i] = NULL;
652 switch (Block->insz[2 * Block->nin + i])
655 if ((Block->inptr[i] = (double *) MALLOC(mh2 * nh2 * sizeof(double))) == NULL)
660 for (j = 0; j < Block->noz; j++)
662 FREE(Block->ozptr[j]);
669 for (j = 0; j < i; j++)
671 FREE(Block->inptr[j]);
676 memcpy((double *)Block->inptr[i], \
677 (double *)(&ilh2[4]), \
678 mh2 * nh2 * sizeof(double));
682 if ((Block->inptr[i] = (double *) MALLOC(2 * mh2 * nh2 * sizeof(double))) == NULL)
687 for (j = 0; j < Block->noz; j++)
689 FREE(Block->ozptr[j]);
696 for (j = 0; j < i; j++)
698 FREE(Block->inptr[j]);
703 memcpy((double *)Block->inptr[i], \
704 (double *)(&ilh2[4]), \
705 2 * mh2 * nh2 * sizeof(double));
709 if ((Block->inptr[i] = (long *) MALLOC(mh2 * nh2 * sizeof(long))) == NULL)
714 for (j = 0; j < Block->noz; j++)
716 FREE(Block->ozptr[j]);
723 for (j = 0; j < i; j++)
725 FREE(Block->inptr[j]);
730 memcpy((long *)Block->inptr[i], \
731 (long *)(&ilh2[4]), \
732 mh2 * nh2 * sizeof(long));
736 if ((Block->inptr[i] = (short *) MALLOC(mh2 * nh2 * sizeof(short))) == NULL)
741 for (j = 0; j < Block->noz; j++)
743 FREE(Block->ozptr[j]);
750 for (j = 0; j < i; j++)
752 FREE(Block->inptr[j]);
757 memcpy((short *)Block->inptr[i], \
758 (short *)(&ilh2[4]), \
759 mh2 * nh2 * sizeof(short));
763 if ((Block->inptr[i] = (char *) MALLOC(mh2 * nh2 * sizeof(char))) == NULL)
768 for (j = 0; j < Block->noz; j++)
770 FREE(Block->ozptr[j]);
777 for (j = 0; j < i; j++)
779 FREE(Block->inptr[j]);
784 memcpy((char *)Block->inptr[i], \
785 (char *)(&ilh2[4]), \
786 mh2 * nh2 * sizeof(char));
790 if ((Block->inptr[i] = (unsigned long *) MALLOC(mh2 * nh2 * sizeof(unsigned long))) == NULL)
795 for (j = 0; j < Block->noz; j++)
797 FREE(Block->ozptr[j]);
804 for (j = 0; j < i; j++)
806 FREE(Block->inptr[j]);
811 memcpy((unsigned long *)Block->inptr[i], \
812 (unsigned long *)(&ilh2[4]), \
813 mh2 * nh2 * sizeof(unsigned long));
817 if ((Block->inptr[i] = (unsigned short *) MALLOC(mh2 * nh2 * sizeof(unsigned short))) == NULL)
822 for (j = 0; j < Block->noz; j++)
824 FREE(Block->ozptr[j]);
831 for (j = 0; j < i; j++)
833 FREE(Block->inptr[j]);
838 memcpy((unsigned short *)Block->inptr[i], \
839 (unsigned short *)(&ilh2[4]), \
840 mh2 * nh2 * sizeof(unsigned short));
844 if ((Block->inptr[i] = (unsigned char *) MALLOC(mh2 * nh2 * sizeof(unsigned char))) == NULL)
849 for (j = 0; j < Block->noz; j++)
851 FREE(Block->ozptr[j]);
858 for (j = 0; j < i; j++)
860 FREE(Block->inptr[j]);
865 memcpy((unsigned char *)Block->inptr[i], \
866 (unsigned char *)(&ilh2[4]), \
867 mh2 * nh2 * sizeof(unsigned char));
874 n = MlistGetFieldNumber(il, "nout");
880 for (j = 0; j < Block->noz; j++)
882 FREE(Block->ozptr[j]);
889 for (j = 0; j < Block->nin; j++)
891 FREE(Block->inptr[j]);
897 ilh = (int *) (listentry(il, n));
900 Block->nout = (int) * ((double *)(&ilh[4]));
903 n = MlistGetFieldNumber(il, "outsz");
909 for (j = 0; j < Block->noz; j++)
911 FREE(Block->ozptr[j]);
918 for (j = 0; j < Block->nin; j++)
920 FREE(Block->inptr[j]);
927 ilh = (int *) (listentry(il, n));
933 if ((Block->outsz = (int *) MALLOC(3 * Block->nout * sizeof(int))) == NULL)
938 for (j = 0; j < Block->noz; j++)
940 FREE(Block->ozptr[j]);
947 for (j = 0; j < Block->nin; j++)
949 FREE(Block->inptr[j]);
957 for (j = 0; j < 3 * Block->nout; j++)
959 Block->outsz[j] = (int) * ((double *)(&ilh[4]) + j);
963 n = MlistGetFieldNumber(il, "outptr");
969 for (j = 0; j < Block->noz; j++)
971 FREE(Block->ozptr[j]);
978 for (j = 0; j < Block->nin; j++)
980 FREE(Block->inptr[j]);
987 ilh = (int *) (listentry(il, n));
990 Block->outptr = NULL;
991 if (Block->nout != 0)
993 if ((Block->outptr = (void **) MALLOC(Block->nout * sizeof(void *))) == NULL)
998 for (j = 0; j < Block->noz; j++)
1000 FREE(Block->ozptr[j]);
1007 for (j = 0; j < Block->nin; j++)
1009 FREE(Block->inptr[j]);
1016 for (i = 0; i < Block->nout; i++)
1018 ilh2 = (int *) (listentry(ilh, i + 1));
1021 Block->outptr[i] = NULL;
1022 switch (Block->outsz[2 * Block->nout + i])
1025 if ((Block->outptr[i] = (double *) MALLOC(mh2 * nh2 * sizeof(double))) == NULL)
1030 for (j = 0; j < Block->noz; j++)
1032 FREE(Block->ozptr[j]);
1039 for (j = 0; j < Block->nin; j++)
1041 FREE(Block->inptr[j]);
1045 for (j = 0; j < i; j++)
1047 FREE(Block->outptr[j]);
1052 memcpy((double *)Block->outptr[i], \
1053 (double *)(&ilh2[4]), \
1054 mh2 * nh2 * sizeof(double));
1058 if ((Block->outptr[i] = (double *) MALLOC(2 * mh2 * nh2 * sizeof(double))) == NULL)
1063 for (j = 0; j < Block->noz; j++)
1065 FREE(Block->ozptr[j]);
1072 for (j = 0; j < Block->nin; j++)
1074 FREE(Block->inptr[j]);
1078 for (j = 0; j < i; j++)
1080 FREE(Block->outptr[j]);
1085 memcpy((double *)Block->outptr[i], \
1086 (double *)(&ilh2[4]), \
1087 2 * mh2 * nh2 * sizeof(double));
1091 if ((Block->outptr[i] = (long *) MALLOC(mh2 * nh2 * sizeof(long))) == NULL)
1096 for (j = 0; j < Block->noz; j++)
1098 FREE(Block->ozptr[j]);
1105 for (j = 0; j < Block->nin; j++)
1107 FREE(Block->inptr[j]);
1111 for (j = 0; j < i; j++)
1113 FREE(Block->outptr[j]);
1118 memcpy((long *)Block->outptr[i], \
1119 (long *)(&ilh2[4]), \
1120 mh2 * nh2 * sizeof(long));
1124 if ((Block->outptr[i] = (short *) MALLOC(mh2 * nh2 * sizeof(short))) == NULL)
1129 for (j = 0; j < Block->noz; j++)
1131 FREE(Block->ozptr[j]);
1138 for (j = 0; j < Block->nin; j++)
1140 FREE(Block->inptr[j]);
1144 for (j = 0; j < i; j++)
1146 FREE(Block->outptr[j]);
1151 memcpy((short *)Block->outptr[i], \
1152 (short *)(&ilh2[4]), \
1153 mh2 * nh2 * sizeof(short));
1157 if ((Block->outptr[i] = (char *) MALLOC(mh2 * nh2 * sizeof(char))) == NULL)
1162 for (j = 0; j < Block->noz; j++)
1164 FREE(Block->ozptr[j]);
1171 for (j = 0; j < Block->nin; j++)
1173 FREE(Block->inptr[j]);
1177 for (j = 0; j < i; j++)
1179 FREE(Block->outptr[j]);
1184 memcpy((char *)Block->outptr[i], \
1185 (char *)(&ilh2[4]), \
1186 mh2 * nh2 * sizeof(char));
1190 if ((Block->outptr[i] = (unsigned long *) MALLOC(mh2 * nh2 * sizeof(unsigned long))) == NULL)
1195 for (j = 0; j < Block->noz; j++)
1197 FREE(Block->ozptr[j]);
1204 for (j = 0; j < Block->nin; j++)
1206 FREE(Block->inptr[j]);
1210 for (j = 0; j < i; j++)
1212 FREE(Block->outptr[j]);
1217 memcpy((unsigned long *)Block->outptr[i], \
1218 (unsigned long *)(&ilh2[4]), \
1219 mh2 * nh2 * sizeof(unsigned long));
1223 if ((Block->outptr[i] = (unsigned short *) MALLOC(mh2 * nh2 * sizeof(unsigned short))) == NULL)
1228 for (j = 0; j < Block->noz; j++)
1230 FREE(Block->ozptr[j]);
1237 for (j = 0; j < Block->nin; j++)
1239 FREE(Block->inptr[j]);
1243 for (j = 0; j < i; j++)
1245 FREE(Block->outptr[j]);
1250 memcpy((unsigned short *)Block->outptr[i], \
1251 (unsigned short *)(&ilh2[4]), \
1252 mh2 * nh2 * sizeof(unsigned short));
1256 if ((Block->outptr[i] = (unsigned char *) MALLOC(mh2 * nh2 * sizeof(unsigned char))) == NULL)
1261 for (j = 0; j < Block->noz; j++)
1263 FREE(Block->ozptr[j]);
1270 for (j = 0; j < Block->nin; j++)
1272 FREE(Block->inptr[j]);
1276 for (j = 0; j < i; j++)
1278 FREE(Block->outptr[j]);
1283 memcpy((unsigned char *)Block->outptr[i], \
1284 (unsigned char *)(&ilh2[4]), \
1285 mh2 * nh2 * sizeof(unsigned char));
1292 n = MlistGetFieldNumber(il, "nevout");
1298 for (j = 0; j < Block->noz; j++)
1300 FREE(Block->ozptr[j]);
1307 for (j = 0; j < Block->nin; j++)
1309 FREE(Block->inptr[j]);
1313 for (j = 0; j < Block->nout; j++)
1315 FREE(Block->outptr[j]);
1317 FREE(Block->outptr);
1321 ilh = (int *) (listentry(il, n));
1324 Block->nevout = (int) * ((double *)(&ilh[4]));
1327 n = MlistGetFieldNumber(il, "evout");
1333 for (j = 0; j < Block->noz; j++)
1335 FREE(Block->ozptr[j]);
1342 for (j = 0; j < Block->nin; j++)
1344 FREE(Block->inptr[j]);
1348 for (j = 0; j < Block->nout; j++)
1350 FREE(Block->outptr[j]);
1352 FREE(Block->outptr);
1356 ilh = (int *) (listentry(il, n));
1359 Block->evout = NULL;
1362 if ((Block->evout = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
1367 for (j = 0; j < Block->noz; j++)
1369 FREE(Block->ozptr[j]);
1376 for (j = 0; j < Block->nin; j++)
1378 FREE(Block->inptr[j]);
1382 for (j = 0; j < Block->nout; j++)
1384 FREE(Block->outptr[j]);
1386 FREE(Block->outptr);
1392 for (j = 0; j < (mh * nh); j++)
1394 Block->evout[j] = *((double *)(&ilh[4]) + j);
1398 n = MlistGetFieldNumber(il, "nrpar");
1404 for (j = 0; j < Block->noz; j++)
1406 FREE(Block->ozptr[j]);
1413 for (j = 0; j < Block->nin; j++)
1415 FREE(Block->inptr[j]);
1419 for (j = 0; j < Block->nout; j++)
1421 FREE(Block->outptr[j]);
1423 FREE(Block->outptr);
1428 ilh = (int *) (listentry(il, n));
1431 Block->nrpar = (int) * ((double *)(&ilh[4]));
1434 n = MlistGetFieldNumber(il, "rpar");
1440 for (j = 0; j < Block->noz; j++)
1442 FREE(Block->ozptr[j]);
1449 for (j = 0; j < Block->nin; j++)
1451 FREE(Block->inptr[j]);
1455 for (j = 0; j < Block->nout; j++)
1457 FREE(Block->outptr[j]);
1459 FREE(Block->outptr);
1464 ilh = (int *) (listentry(il, n));
1470 if ((Block->rpar = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
1475 for (j = 0; j < Block->noz; j++)
1477 FREE(Block->ozptr[j]);
1484 for (j = 0; j < Block->nin; j++)
1486 FREE(Block->inptr[j]);
1490 for (j = 0; j < Block->nout; j++)
1492 FREE(Block->outptr[j]);
1494 FREE(Block->outptr);
1501 for (j = 0; j < (mh * nh); j++)
1503 Block->rpar[j] = *((double *)(&ilh[4]) + j);
1507 n = MlistGetFieldNumber(il, "nipar");
1513 for (j = 0; j < Block->noz; j++)
1515 FREE(Block->ozptr[j]);
1522 for (j = 0; j < Block->nin; j++)
1524 FREE(Block->inptr[j]);
1528 for (j = 0; j < Block->nout; j++)
1530 FREE(Block->outptr[j]);
1532 FREE(Block->outptr);
1538 ilh = (int *) (listentry(il, n));
1541 Block->nipar = (int) * ((double *)(&ilh[4]));
1544 n = MlistGetFieldNumber(il, "ipar");
1550 for (j = 0; j < Block->noz; j++)
1552 FREE(Block->ozptr[j]);
1559 for (j = 0; j < Block->nin; j++)
1561 FREE(Block->inptr[j]);
1565 for (j = 0; j < Block->nout; j++)
1567 FREE(Block->outptr[j]);
1569 FREE(Block->outptr);
1575 ilh = (int *) (listentry(il, n));
1581 if ((Block->ipar = (int *) MALLOC((mh * nh) * sizeof(int))) == NULL)
1586 for (j = 0; j < Block->noz; j++)
1588 FREE(Block->ozptr[j]);
1595 for (j = 0; j < Block->nin; j++)
1597 FREE(Block->inptr[j]);
1601 for (j = 0; j < Block->nout; j++)
1603 FREE(Block->outptr[j]);
1605 FREE(Block->outptr);
1612 for (j = 0; j < (mh * nh); j++)
1614 Block->ipar[j] = (int) * ((double *)(&ilh[4]) + j);
1618 n = MlistGetFieldNumber(il, "nopar");
1624 for (j = 0; j < Block->noz; j++)
1626 FREE(Block->ozptr[j]);
1633 for (j = 0; j < Block->nin; j++)
1635 FREE(Block->inptr[j]);
1639 for (j = 0; j < Block->nout; j++)
1641 FREE(Block->outptr[j]);
1643 FREE(Block->outptr);
1650 ilh = (int *) (listentry(il, n));
1653 Block->nopar = (int) * ((double *)(&ilh[4]));
1656 n = MlistGetFieldNumber(il, "oparsz");
1662 for (j = 0; j < Block->noz; j++)
1664 FREE(Block->ozptr[j]);
1671 for (j = 0; j < Block->nin; j++)
1673 FREE(Block->inptr[j]);
1677 for (j = 0; j < Block->nout; j++)
1679 FREE(Block->outptr[j]);
1681 FREE(Block->outptr);
1688 ilh = (int *) (listentry(il, n));
1691 Block->oparsz = NULL;
1694 if ((Block->oparsz = (int *) MALLOC(2 * Block->nopar * sizeof(int))) == NULL)
1699 for (j = 0; j < Block->noz; j++)
1701 FREE(Block->ozptr[j]);
1708 for (j = 0; j < Block->nin; j++)
1710 FREE(Block->inptr[j]);
1714 for (j = 0; j < Block->nout; j++)
1716 FREE(Block->outptr[j]);
1718 FREE(Block->outptr);
1727 for (j = 0; j < 2 * Block->nopar; j++)
1729 Block->oparsz[j] = (int) * ((double *)(&ilh[4]) + j);
1733 n = MlistGetFieldNumber(il, "opartyp");
1739 for (j = 0; j < Block->noz; j++)
1741 FREE(Block->ozptr[j]);
1748 for (j = 0; j < Block->nin; j++)
1750 FREE(Block->inptr[j]);
1754 for (j = 0; j < Block->nout; j++)
1756 FREE(Block->outptr[j]);
1758 FREE(Block->outptr);
1762 FREE(Block->oparsz);
1766 ilh = (int *) (listentry(il, n));
1769 Block->opartyp = NULL;
1772 if ((Block->opartyp = (int *) MALLOC(Block->nopar * sizeof(int))) == NULL)
1777 for (j = 0; j < Block->noz; j++)
1779 FREE(Block->ozptr[j]);
1786 for (j = 0; j < Block->nin; j++)
1788 FREE(Block->inptr[j]);
1792 for (j = 0; j < Block->nout; j++)
1794 FREE(Block->outptr[j]);
1796 FREE(Block->outptr);
1800 FREE(Block->oparsz);
1806 for (j = 0; j < Block->nopar; j++)
1808 Block->opartyp[j] = (int) * ((double *)(&ilh[4]) + j);
1812 n = MlistGetFieldNumber(il, "opar");
1818 for (j = 0; j < Block->noz; j++)
1820 FREE(Block->ozptr[j]);
1827 for (j = 0; j < Block->nin; j++)
1829 FREE(Block->inptr[j]);
1833 for (j = 0; j < Block->nout; j++)
1835 FREE(Block->outptr[j]);
1837 FREE(Block->outptr);
1841 FREE(Block->oparsz);
1842 FREE(Block->opartyp);
1846 ilh = (int *) (listentry(il, n));
1849 Block->oparptr = NULL;
1850 if (Block->nopar != 0)
1852 if ((Block->oparptr = (void **) MALLOC(Block->nopar * sizeof(void *))) == NULL)
1857 for (j = 0; j < Block->noz; j++)
1859 FREE(Block->ozptr[j]);
1866 for (j = 0; j < Block->nin; j++)
1868 FREE(Block->inptr[j]);
1872 for (j = 0; j < Block->nout; j++)
1874 FREE(Block->outptr[j]);
1876 FREE(Block->outptr);
1880 FREE(Block->oparsz);
1881 FREE(Block->opartyp);
1886 for (i = 0; i < Block->nopar; i++)
1888 ilh2 = (int *) (listentry(ilh, i + 1));
1891 Block->oparptr[i] = NULL;
1892 switch (Block->opartyp[i])
1895 if ((Block->oparptr[i] = (double *) MALLOC(mh2 * nh2 * sizeof(double))) == NULL)
1900 for (j = 0; j < Block->noz; j++)
1902 FREE(Block->ozptr[j]);
1909 for (j = 0; j < Block->nin; j++)
1911 FREE(Block->inptr[j]);
1915 for (j = 0; j < Block->nout; j++)
1917 FREE(Block->outptr[j]);
1919 FREE(Block->outptr);
1923 FREE(Block->oparsz);
1924 FREE(Block->opartyp);
1925 for (j = 0; j < i; j++)
1927 FREE(Block->oparptr[j]);
1932 memcpy((double *)Block->oparptr[i], \
1933 (double *)(&ilh2[4]), \
1934 mh2 * nh2 * sizeof(double));
1938 if ((Block->oparptr[i] = (double *) MALLOC(2 * mh2 * nh2 * sizeof(double))) == NULL)
1943 for (j = 0; j < Block->noz; j++)
1945 FREE(Block->ozptr[j]);
1952 for (j = 0; j < Block->nin; j++)
1954 FREE(Block->inptr[j]);
1958 for (j = 0; j < Block->nout; j++)
1960 FREE(Block->outptr[j]);
1962 FREE(Block->outptr);
1966 FREE(Block->oparsz);
1967 FREE(Block->opartyp);
1968 for (j = 0; j < i; j++)
1970 FREE(Block->oparptr[j]);
1975 memcpy((double *)Block->oparptr[i], \
1976 (double *)(&ilh2[4]), \
1977 2 * mh2 * nh2 * sizeof(double));
1981 if ((Block->oparptr[i] = (long *) MALLOC(mh2 * nh2 * sizeof(long))) == NULL)
1986 for (j = 0; j < Block->noz; j++)
1988 FREE(Block->ozptr[j]);
1995 for (j = 0; j < Block->nin; j++)
1997 FREE(Block->inptr[j]);
2001 for (j = 0; j < Block->nout; j++)
2003 FREE(Block->outptr[j]);
2005 FREE(Block->outptr);
2009 FREE(Block->oparsz);
2010 FREE(Block->opartyp);
2011 for (j = 0; j < i; j++)
2013 FREE(Block->oparptr[j]);
2018 memcpy((long *)Block->oparptr[i], \
2019 (long *)(&ilh2[4]), \
2020 mh2 * nh2 * sizeof(long));
2024 if ((Block->oparptr[i] = (short *) MALLOC(mh2 * nh2 * sizeof(short))) == NULL)
2029 for (j = 0; j < Block->noz; j++)
2031 FREE(Block->ozptr[j]);
2038 for (j = 0; j < Block->nin; j++)
2040 FREE(Block->inptr[j]);
2044 for (j = 0; j < Block->nout; j++)
2046 FREE(Block->outptr[j]);
2048 FREE(Block->outptr);
2052 FREE(Block->oparsz);
2053 FREE(Block->opartyp);
2054 for (j = 0; j < i; j++)
2056 FREE(Block->oparptr[j]);
2061 memcpy((short *)Block->oparptr[i], \
2062 (short *)(&ilh2[4]), \
2063 mh2 * nh2 * sizeof(short));
2067 if ((Block->oparptr[i] = (char *) MALLOC(mh2 * nh2 * sizeof(char))) == NULL)
2072 for (j = 0; j < Block->noz; j++)
2074 FREE(Block->ozptr[j]);
2081 for (j = 0; j < Block->nin; j++)
2083 FREE(Block->inptr[j]);
2087 for (j = 0; j < Block->nout; j++)
2089 FREE(Block->outptr[j]);
2091 FREE(Block->outptr);
2095 FREE(Block->oparsz);
2096 FREE(Block->opartyp);
2097 for (j = 0; j < i; j++)
2099 FREE(Block->oparptr[j]);
2104 memcpy((char *)Block->oparptr[i], \
2105 (char *)(&ilh2[4]), \
2106 mh2 * nh2 * sizeof(char));
2110 if ((Block->oparptr[i] = (unsigned long *) MALLOC(mh2 * nh2 * sizeof(unsigned long))) == NULL)
2115 for (j = 0; j < Block->noz; j++)
2117 FREE(Block->ozptr[j]);
2124 for (j = 0; j < Block->nin; j++)
2126 FREE(Block->inptr[j]);
2130 for (j = 0; j < Block->nout; j++)
2132 FREE(Block->outptr[j]);
2134 FREE(Block->outptr);
2138 FREE(Block->oparsz);
2139 FREE(Block->opartyp);
2140 for (j = 0; j < i; j++)
2142 FREE(Block->oparptr[j]);
2147 memcpy((unsigned long *)Block->oparptr[i], \
2148 (unsigned long *)(&ilh2[4]), \
2149 mh2 * nh2 * sizeof(unsigned long));
2153 if ((Block->oparptr[i] = (unsigned short *) MALLOC(mh2 * nh2 * sizeof(unsigned short))) == NULL)
2158 for (j = 0; j < Block->noz; j++)
2160 FREE(Block->ozptr[j]);
2167 for (j = 0; j < Block->nin; j++)
2169 FREE(Block->inptr[j]);
2173 for (j = 0; j < Block->nout; j++)
2175 FREE(Block->outptr[j]);
2177 FREE(Block->outptr);
2181 FREE(Block->oparsz);
2182 FREE(Block->opartyp);
2183 for (j = 0; j < i; j++)
2185 FREE(Block->oparptr[j]);
2190 memcpy((unsigned short *)Block->oparptr[i], \
2191 (unsigned short *)(&ilh2[4]), \
2192 mh2 * nh2 * sizeof(unsigned short));
2196 if ((Block->oparptr[i] = (unsigned char *) MALLOC(mh2 * nh2 * sizeof(unsigned char))) == NULL)
2201 for (j = 0; j < Block->noz; j++)
2203 FREE(Block->ozptr[j]);
2210 for (j = 0; j < Block->nin; j++)
2212 FREE(Block->inptr[j]);
2216 for (j = 0; j < Block->nout; j++)
2218 FREE(Block->outptr[j]);
2220 FREE(Block->outptr);
2224 FREE(Block->oparsz);
2225 FREE(Block->opartyp);
2226 for (j = 0; j < i; j++)
2228 FREE(Block->oparptr[j]);
2233 memcpy((unsigned char *)Block->oparptr[i], \
2234 (unsigned char *)(&ilh2[4]), \
2235 mh2 * nh2 * sizeof(unsigned char));
2242 n = MlistGetFieldNumber(il, "ng");
2248 for (j = 0; j < Block->noz; j++)
2250 FREE(Block->ozptr[j]);
2257 for (j = 0; j < Block->nin; j++)
2259 FREE(Block->inptr[j]);
2263 for (j = 0; j < Block->nout; j++)
2265 FREE(Block->outptr[j]);
2267 FREE(Block->outptr);
2271 FREE(Block->oparsz);
2272 FREE(Block->opartyp);
2273 for (j = 0; j < Block->nopar; j++)
2275 FREE(Block->oparptr[j]);
2277 FREE(Block->oparptr);
2281 ilh = (int *) (listentry(il, n));
2284 Block->ng = (int) * ((double *)(&ilh[4]));
2287 n = MlistGetFieldNumber(il, "g");
2293 for (j = 0; j < Block->noz; j++)
2295 FREE(Block->ozptr[j]);
2302 for (j = 0; j < Block->nin; j++)
2304 FREE(Block->inptr[j]);
2308 for (j = 0; j < Block->nout; j++)
2310 FREE(Block->outptr[j]);
2312 FREE(Block->outptr);
2316 FREE(Block->oparsz);
2317 FREE(Block->opartyp);
2318 for (j = 0; j < Block->nopar; j++)
2320 FREE(Block->oparptr[j]);
2322 FREE(Block->oparptr);
2326 ilh = (int *) (listentry(il, n));
2332 if ((Block->g = (double *) MALLOC((mh * nh) * sizeof(double))) == NULL)
2337 for (j = 0; j < Block->noz; j++)
2339 FREE(Block->ozptr[j]);
2346 for (j = 0; j < Block->nin; j++)
2348 FREE(Block->inptr[j]);
2352 for (j = 0; j < Block->nout; j++)
2354 FREE(Block->outptr[j]);
2356 FREE(Block->outptr);
2360 FREE(Block->oparsz);
2361 FREE(Block->opartyp);
2362 for (j = 0; j < Block->nopar; j++)
2364 FREE(Block->oparptr[j]);
2366 FREE(Block->oparptr);
2372 for (j = 0; j < (mh * nh); j++)
2374 Block->g[j] = *((double *)(&ilh[4]) + j);
2378 n = MlistGetFieldNumber(il, "ztyp");
2384 for (j = 0; j < Block->noz; j++)
2386 FREE(Block->ozptr[j]);
2393 for (j = 0; j < Block->nin; j++)
2395 FREE(Block->inptr[j]);
2399 for (j = 0; j < Block->nout; j++)
2401 FREE(Block->outptr[j]);
2403 FREE(Block->outptr);
2407 FREE(Block->oparsz);
2408 FREE(Block->opartyp);
2409 for (j = 0; j < Block->nopar; j++)
2411 FREE(Block->oparptr[j]);
2413 FREE(Block->oparptr);
2418 ilh = (int *) (listentry(il, n));
2421 Block->ztyp = (int) * ((double *)(&ilh[4]));
2424 n = MlistGetFieldNumber(il, "jroot");
2430 for (j = 0; j < Block->noz; j++)
2432 FREE(Block->ozptr[j]);
2439 for (j = 0; j < Block->nin; j++)
2441 FREE(Block->inptr[j]);
2445 for (j = 0; j < Block->nout; j++)
2447 FREE(Block->outptr[j]);
2449 FREE(Block->outptr);
2453 FREE(Block->oparsz);
2454 FREE(Block->opartyp);
2455 for (j = 0; j < Block->nopar; j++)
2457 FREE(Block->oparptr[j]);
2459 FREE(Block->oparptr);
2464 ilh = (int *) (listentry(il, n));
2467 Block->jroot = NULL;
2470 if ((Block->jroot = (int *) MALLOC((mh * nh) * sizeof(int))) == NULL)
2475 for (j = 0; j < Block->noz; j++)
2477 FREE(Block->ozptr[j]);
2484 for (j = 0; j < Block->nin; j++)
2486 FREE(Block->inptr[j]);
2490 for (j = 0; j < Block->nout; j++)
2492 FREE(Block->outptr[j]);
2494 FREE(Block->outptr);
2498 FREE(Block->oparsz);
2499 FREE(Block->opartyp);
2500 for (j = 0; j < Block->nopar; j++)
2502 FREE(Block->oparptr[j]);
2504 FREE(Block->oparptr);
2511 for (j = 0; j < (mh * nh); j++)
2513 Block->jroot[j] = (int) * ((double *)(&ilh[4]) + j);
2517 n = MlistGetFieldNumber(il, "label");
2523 for (j = 0; j < Block->noz; j++)
2525 FREE(Block->ozptr[j]);
2532 for (j = 0; j < Block->nin; j++)
2534 FREE(Block->inptr[j]);
2538 for (j = 0; j < Block->nout; j++)
2540 FREE(Block->outptr[j]);
2542 FREE(Block->outptr);
2546 FREE(Block->oparsz);
2547 FREE(Block->opartyp);
2548 for (j = 0; j < Block->nopar; j++)
2550 FREE(Block->oparptr[j]);
2552 FREE(Block->oparptr);
2558 ilh = (int *) (listentry(il, n));
2564 len_str = ilh[5] - 1;
2567 if ((Block->label = (char *) MALLOC((len_str + 1) * sizeof(char))) == NULL)
2572 for (j = 0; j < Block->noz; j++)
2574 FREE(Block->ozptr[j]);
2581 for (j = 0; j < Block->nin; j++)
2583 FREE(Block->inptr[j]);
2587 for (j = 0; j < Block->nout; j++)
2589 FREE(Block->outptr[j]);
2591 FREE(Block->outptr);
2595 FREE(Block->oparsz);
2596 FREE(Block->opartyp);
2597 for (j = 0; j < Block->nopar; j++)
2599 FREE(Block->oparptr[j]);
2601 FREE(Block->oparptr);
2607 Block->label[len_str] = '\0';
2608 C2F(cvstr)(&len_str, &ilh[6], Block->label, (j = 1, &j), len_str);
2613 n = MlistGetFieldNumber(il, "work");
2619 for (j = 0; j < Block->noz; j++)
2621 FREE(Block->ozptr[j]);
2628 for (j = 0; j < Block->nin; j++)
2630 FREE(Block->inptr[j]);
2634 for (j = 0; j < Block->nout; j++)
2636 FREE(Block->outptr[j]);
2638 FREE(Block->outptr);
2642 FREE(Block->oparsz);
2643 FREE(Block->opartyp);
2644 for (j = 0; j < Block->nopar; j++)
2646 FREE(Block->oparptr[j]);
2648 FREE(Block->oparptr);
2658 ilh = (int *) (listentry(il, n));
2661 Block->work = (void**) ((int) * ((double *)(&ilh[4])));
2664 n = MlistGetFieldNumber(il, "nmode");
2670 for (j = 0; j < Block->noz; j++)
2672 FREE(Block->ozptr[j]);
2679 for (j = 0; j < Block->nin; j++)
2681 FREE(Block->inptr[j]);
2685 for (j = 0; j < Block->nout; j++)
2687 FREE(Block->outptr[j]);
2689 FREE(Block->outptr);
2693 FREE(Block->oparsz);
2694 FREE(Block->opartyp);
2695 for (j = 0; j < Block->nopar; j++)
2697 FREE(Block->oparptr[j]);
2699 FREE(Block->oparptr);
2709 ilh = (int *) (listentry(il, n));
2712 Block->nmode = (int) * ((double *)(&ilh[4]));
2715 n = MlistGetFieldNumber(il, "mode");
2721 for (j = 0; j < Block->noz; j++)
2723 FREE(Block->ozptr[j]);
2730 for (j = 0; j < Block->nin; j++)
2732 FREE(Block->inptr[j]);
2736 for (j = 0; j < Block->nout; j++)
2738 FREE(Block->outptr[j]);
2740 FREE(Block->outptr);
2744 FREE(Block->oparsz);
2745 FREE(Block->opartyp);
2746 for (j = 0; j < Block->nopar; j++)
2748 FREE(Block->oparptr[j]);
2750 FREE(Block->oparptr);
2760 ilh = (int *) (listentry(il, n));
2766 if ((Block->mode = (int *) MALLOC((mh * nh) * sizeof(int))) == NULL)
2771 for (j = 0; j < Block->noz; j++)
2773 FREE(Block->ozptr[j]);
2780 for (j = 0; j < Block->nin; j++)
2782 FREE(Block->inptr[j]);
2786 for (j = 0; j < Block->nout; j++)
2788 FREE(Block->outptr[j]);
2790 FREE(Block->outptr);
2794 FREE(Block->oparsz);
2795 FREE(Block->opartyp);
2796 for (j = 0; j < Block->nopar; j++)
2798 FREE(Block->oparptr[j]);
2800 FREE(Block->oparptr);
2812 for (j = 0; j < (mh * nh); j++)
2814 Block->mode[j] = (int) * ((double *)(&ilh[4]) + j);
2818 n = MlistGetFieldNumber(il, "xprop");
2824 for (j = 0; j < Block->noz; j++)
2826 FREE(Block->ozptr[j]);
2833 for (j = 0; j < Block->nin; j++)
2835 FREE(Block->inptr[j]);
2839 for (j = 0; j < Block->nout; j++)
2841 FREE(Block->outptr[j]);
2843 FREE(Block->outptr);
2847 FREE(Block->oparsz);
2848 FREE(Block->opartyp);
2849 for (j = 0; j < Block->nopar; j++)
2851 FREE(Block->oparptr[j]);
2853 FREE(Block->oparptr);
2864 ilh = (int *) (listentry(il, n));
2867 Block->xprop = NULL;
2870 if ((Block->xprop = (int *) MALLOC((mh * nh) * sizeof(int))) == NULL)
2875 for (j = 0; j < Block->noz; j++)
2877 FREE(Block->ozptr[j]);
2884 for (j = 0; j < Block->nin; j++)
2886 FREE(Block->inptr[j]);
2890 for (j = 0; j < Block->nout; j++)
2892 FREE(Block->outptr[j]);
2894 FREE(Block->outptr);
2898 FREE(Block->oparsz);
2899 FREE(Block->opartyp);
2900 for (j = 0; j < Block->nopar; j++)
2902 FREE(Block->oparptr[j]);
2904 FREE(Block->oparptr);
2917 for (j = 0; j < (mh * nh); j++)
2919 Block->xprop[j] = (int) * ((double *)(&ilh[4]) + j);
2924 /*--------------------------------------------------------------------------*/