00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
00005
00006 #define MMAX(Type) {\
00007 Type *DX;\
00008 Type *DY;\
00009 DX=(Type *)dx;\
00010 --DX;\
00011 DY=(Type *)dy;\
00012 --DY;\
00013 if (*job==2) {\
00014 for (l = 1; l <= *m; ++l){\
00015 DY[l] = DX[l];DK[l] = 1;\
00016 for (k = 1; k < *n; ++k) {\
00017 if (DX[l+k*ix] > DY[l]) {\
00018 DY[l] = DX[l+k*ix];DK[l] = k+1;}}}}\
00019 if (*job==1) {\
00020 for (k = 0; k < *n; ++k){\
00021 kk = k*ix;\
00022 DY[1+k*iy] = DX[1+kk];DK[1+k*iy] = 1;\
00023 for (l = 2; l <= *m; ++l) {\
00024 if (DX[l+kk] > DY[1+k*iy]) {\
00025 DY[1+k*iy] = DX[l+kk];DK[1+k*iy] = l;}}}}\
00026 if (*job==0) {\
00027 DY[1] = DX[1];DK[1] = 1;\
00028 for (k = 0; k < *n; ++k){\
00029 kk = k*ix;\
00030 for (l = 1; l <= *m; ++l) {\
00031 if (DX[l+kk] > DY[1]) {\
00032 DY[1] = DX[l+kk];DK[1] = l + kk;}}}}\
00033 }
00034
00035
00036 int C2F(genmmax)(typ, job, m, n, dx, incx, dy, dk, incy)
00037 integer *m, *n;
00038 integer *incx;
00039 integer *incy;
00040 integer *typ;
00041 integer *job;
00042 int *dx;
00043 int *dy;
00044 int *dk;
00045 {
00046 static integer ix, iy, l, k, kk, *DK;
00047
00048 DK=--dk;
00049 ix = *incx;
00050 iy = *incy;
00051
00052 switch (*typ) {
00053 case 1:
00054 MMAX(integer1);
00055 break;
00056 case 2:
00057 MMAX(integer2);
00058 break;
00059 case 4:
00060 MMAX(integer);
00061 break;
00062 case 11:
00063 MMAX(unsigned char);
00064 break;
00065 case 12:
00066 MMAX(unsigned short);
00067 break;
00068 case 14:
00069 MMAX(unsigned int);
00070 break;
00071 }
00072 return 0;
00073 }
00074