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