00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
00005
00006 #define ADD(Type) {\
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] + 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] + DY[iy];\
00022 ix += *incx; iy += *incy;\
00023 }\
00024 }\
00025 }
00026
00027 int C2F(genadd1)(typ, n, dx, incx, dy, incy)
00028 integer *n;
00029 integer *incx;
00030 integer *incy;
00031 integer *typ;
00032 int *dx;
00033 int *dy;
00034 {
00035 static integer i, ix, iy, nv;
00036 nv=*n;
00037 if (nv <= 0) return 0;
00038
00039
00040 switch (*typ) {
00041 case 1:
00042 ADD(integer1);
00043 break;
00044 case 2:
00045 ADD(integer2);
00046 break;
00047 case 4:
00048 ADD(integer);
00049 break;
00050 case 11:
00051 ADD(unsigned char);
00052 break;
00053 case 12:
00054 ADD(unsigned short);
00055 break;
00056 case 14:
00057 ADD(unsigned int);
00058 break;
00059 }
00060 return 0;
00061 }
00062