genbitops.c

Go to the documentation of this file.
00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004 /*     Copyright INRIA */
00005 
00006 #define BIT2(Type,Op) {\
00007 Type *DX;\
00008 Type *DY;\
00009     DX=(Type *)dx;\
00010     --DX;\
00011     DY=(Type *)dy;\
00012     --DY;\
00013     if (*incx == 1 && *incy == 1)\
00014        for (i = 1; i <= nv; ++i) \
00015          DY[i] = DX[i] Op DY[i];\
00016     else {\
00017       ix = 1; iy = 1;\
00018       if (*incx < 0) ix = (-nv + 1) * *incx + 1;\
00019       if (*incy < 0) iy = (-nv + 1) * *incy + 1;\
00020       for (i = 1; i <= nv; ++i) {\
00021         DY[iy] = DX[ix] Op DY[iy];\
00022         ix += *incx; iy += *incy;\
00023       }\
00024     }\
00025 }
00026 
00027 #define BIT1(Type,Op) {\
00028 Type *DX;\
00029     DX=(Type *)dx;\
00030     --DX;\
00031     if (*incx == 1 && *incy == 1)\
00032        for (i = 1; i <= nv; ++i) \
00033          DX[i] = Op DX[i];\
00034     else {\
00035       ix = 1;\
00036       if (*incx < 0) ix = (-nv + 1) * *incx + 1;\
00037       for (i = 1; i <= nv; ++i) {\
00038         DX[iy] = Op DX[ix];\
00039         ix += *incx;\
00040       }\
00041     }\
00042 }
00043 
00044 int C2F(genbitops)(typ,op, n, dx, incx, dy, incy)
00045 integer *n;
00046 integer *incx;
00047 integer *incy;
00048 integer *typ;
00049 integer *op;
00050 int *dx;
00051 int *dy;
00052 {
00053   static integer i, ix, iy, nv;
00054   nv=*n;
00055   if (nv <= 0) return 0;
00056 
00057   switch (*op) {
00058   case 57:
00059     switch (*typ) {
00060     case 1:
00061       BIT2(integer1,|);
00062       break;
00063     case 2:
00064       BIT2(integer2,|);
00065       break;
00066     case 4:
00067       BIT2(integer,|);
00068       break;
00069     case 11:
00070       BIT2(unsigned char,|);
00071       break;
00072     case 12:
00073       BIT2(unsigned short,|);
00074       break;
00075     case 14:
00076       BIT2(unsigned int,|);
00077       break;
00078     }
00079     break;
00080   case 58:
00081     switch (*typ) {
00082     case 1:
00083       BIT2(integer1,&);
00084       break;
00085     case 2:
00086       BIT2(integer2,&);
00087       break;
00088     case 4:
00089       BIT2(integer,&);
00090       break;
00091     case 11:
00092       BIT2(unsigned char,&);
00093       break;
00094     case 12:
00095       BIT2(unsigned short,&);
00096       break;
00097     case 14:
00098       BIT2(unsigned int,&);
00099       break;
00100     }
00101     break;
00102   case 61:
00103     switch (*typ) {
00104     case 1:
00105       BIT1(integer1,~);
00106       break;
00107     case 2:
00108       BIT1(integer2,~);
00109       break;
00110     case 4:
00111       BIT1(integer,~);
00112       break;
00113     case 11:
00114       BIT1(unsigned char,~);
00115       break;
00116     case 12:
00117       BIT1(unsigned short,~);
00118       break;
00119     case 14:
00120       BIT1(unsigned int,~);
00121       break;
00122     }
00123     break;
00124   }
00125   return 0;
00126 }
00127 
00128 

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