00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
00005
00006 #define Abs(x) ( ( (x) >= 0) ? (x) : -( x) )
00007
00008 #define DIAG(Type) {\
00009 Type *DX;\
00010 Type *DY;\
00011 DX=(Type *)dx;\
00012 DY=(Type *)dy;\
00013 --DY;\
00014 for (i = 1; i <= nn*nn; ++i) {\
00015 DY[i] = 0;}\
00016 if (*k>=0) {\
00017 iy=1+(*k)*nn;}\
00018 else {\
00019 iy=1-(*k);}\
00020 for (i = 0; i < *n; ++i) {\
00021 DY[iy+i*(nn+1)] = DX[i];}\
00022 }
00023
00024 int C2F(gendiag)(typ,n,k,dx,dy)
00025 integer *n;
00026 integer *k;
00027 integer *typ;
00028 int *dx;
00029 int *dy;
00030 {
00031 static integer i, iy, nn;
00032
00033 nn = *n+Abs(*k);
00034
00035 switch (*typ) {
00036 case 1:
00037 DIAG(integer1);
00038 break;
00039 case 2:
00040 DIAG(integer2);
00041 break;
00042 case 4:
00043 DIAG(integer);
00044 break;
00045 case 11:
00046 DIAG(unsigned char);
00047 break;
00048 case 12:
00049 DIAG(unsigned short);
00050 break;
00051 case 14:
00052 DIAG(unsigned int);
00053 break;
00054 }
00055 return 0;
00056 }
00057