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