00001 #include "machine.h"
00002 #include "genmprod.h"
00003 typedef signed char integer1;
00004 typedef short integer2;
00005
00006 static integer c__1 = 1;
00007 #define MPROD(Type) {\
00008 Type *A;\
00009 Type *V;\
00010 A=(Type *)a;\
00011 V=(Type *)v;\
00012 iv = 0;\
00013 if (*job == 0) {\
00014 t = 1;\
00015 for (j = 0; j < *n; ++j) \
00016 t *= C2F(genprod)(typ,m, &A[j * (*na)], &c__1);\
00017 V[0] = (Type)t;}\
00018 else if (*job == 1) {\
00019 for (j = 0; j < *n; ++j) {\
00020 t = C2F(genprod)(typ,m, &A[j * (*na) ], &c__1);\
00021 V[iv] = (Type)t;iv += *nv;\
00022 }}\
00023 else if (*job == 2) {\
00024 for (i = 0; i < *m; ++i) {\
00025 t = C2F(genprod)(typ,n, &A[i], m);\
00026 V[iv] = (Type)t;iv += *nv;\
00027 }\
00028 }\
00029 }
00030
00031 int C2F(genmprod)(integer *typ,integer *job, integer *a, integer *na, integer *m, integer *n, integer *v, integer *nv)
00032 {
00033 extern integer C2F(genprod)();
00034 static integer i, j, t, iv;
00035
00036 switch (*typ) {
00037 case 1:
00038 MPROD(integer1);
00039 break;
00040 case 2:
00041 MPROD(integer2);
00042 break;
00043 case 4:
00044 MPROD(integer);
00045 break;
00046 case 11:
00047 MPROD(unsigned char);
00048 break;
00049 case 12:
00050 MPROD(unsigned short);
00051 break;
00052 case 14:
00053 MPROD(unsigned int);
00054 break;
00055 }
00056 return 0;
00057 }