00001 #include "machine.h"
00002 #include "genrdiv.h"
00003 typedef signed char integer1;
00004 typedef short integer2;
00005
00006
00007 #define RDIV(Type) {\
00008 Type *A;\
00009 Type *B;\
00010 Type *R;\
00011 A=(Type *)a;\
00012 --A;\
00013 B=(Type *)b;\
00014 --B;\
00015 R=(Type *)r;\
00016 --R;\
00017 jr = 1;jb = 1;ja = 1;\
00018 *ierr = 0;\
00019 if (*ia == 0) {\
00020 for (k = 1; k <= i1; ++k) {\
00021 if (B[jb] == 0) {*ierr = k;return 0;}\
00022 R[jr] = A[ja] / B[jb];\
00023 jr += *ir;jb += *ib;\
00024 }\
00025 }\
00026 else if (*ib == 0) {\
00027 if (B[jb] == 0) {*ierr = 1;return 0;}\
00028 for (k = 1; k <= i1; ++k) {\
00029 R[jr] = A[ja] / B[jb];\
00030 jr += *ir;ja += *ia;\
00031 }\
00032 }\
00033 else {\
00034 for (k = 1; k <= i1; ++k) {\
00035 if (B[jb] == 0) {*ierr = k;return 0;}\
00036 R[jr] = A[ja] / B[jb];\
00037 jr += *ir;jb += *ib;ja += *ia;\
00038 }\
00039 }\
00040 }
00041
00042 int C2F(genrdiv)(integer *typ,int *a, integer *ia, int *b, integer *ib, int *r, integer *ir, integer *n, integer *ierr)
00043 {
00044 integer i1;
00045 static integer k, jb, ja, jr;
00046
00047 i1 = *n;
00048 switch (*typ) {
00049 case 1:
00050 RDIV(integer1);
00051 break;
00052 case 2:
00053 RDIV(integer2);
00054 break;
00055 case 4:
00056 RDIV(integer);
00057 break;
00058 case 11:
00059 RDIV(unsigned char);
00060 break;
00061 case 12:
00062 RDIV(unsigned short);
00063 break;
00064 case 14:
00065 RDIV(unsigned int);
00066 break;
00067 }
00068 return 0;
00069 }
00070