genmdiag.c

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

Generated on Sun Mar 4 15:03:57 2007 for Scilab [trunk] by  doxygen 1.5.1