genrdiv.c

Go to the documentation of this file.
00001 #include "machine.h"
00002 #include "genrdiv.h"
00003 typedef signed char integer1;
00004 typedef short integer2;
00005 /*     Copyright INRIA */
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 

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