00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
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