00001 #include "machine.h"
00002 typedef signed char integer1;
00003 typedef short integer2;
00004
00005
00006 #define IMPL2(Type) {\
00007 Type FIRST = (Type)*((Type *)first);\
00008 Type LAST = (Type)*((Type *)last);\
00009 Type *RES = (Type *)res;\
00010 Type j;\
00011 i = 0;\
00012 for (j=FIRST;j<=LAST;j++){\
00013 RES[i++]=j;\
00014 }\
00015 }
00016
00017 #define IMPL3(Type) {\
00018 Type FIRST = (Type)*((Type *)first);\
00019 Type STEP = (Type)*((Type *)step);\
00020 Type LAST = (Type)*((Type *)last);\
00021 Type *RES = (Type *)res;\
00022 Type j;\
00023 FIRST=(Type)*((Type *)first);\
00024 LAST=(Type)*((Type *)last);\
00025 STEP=(Type)*((Type *)step);\
00026 RES=(Type *)res;\
00027 i = 0;\
00028 if (STEP<(Type)0) {\
00029 for (j=FIRST;j>=LAST;j+=STEP){\
00030 RES[i++]=j;\
00031 }\
00032 }\
00033 else if (STEP>(Type)0) {\
00034 for (j=FIRST;j<=LAST;j+=STEP){\
00035 RES[i++]=j;\
00036 }\
00037 }\
00038 }
00039
00040 #define IMPL2DIM(Type) {\
00041 Type FIRST = (Type)*((Type *)first);\
00042 Type LAST = (Type)*((Type *)last);\
00043 *res = (integer)(LAST-FIRST)+1;\
00044 }
00045 #define IMPL3DIM(Type) {\
00046 Type FIRST = (Type)*((Type *)first);\
00047 Type STEP = (Type)*((Type *)step);\
00048 Type LAST = (Type)*((Type *)last);\
00049 Type j;\
00050 i = 0;\
00051 if (STEP<(Type)0) {\
00052 for (j=FIRST;j>=LAST;j=j+STEP) {i++;}\
00053 }\
00054 else if (STEP>(Type)0) {\
00055 for (j=FIRST;j<=LAST;j=j+STEP) {i++;}\
00056 }\
00057 else {\
00058 i=-1;\
00059 }\
00060 *res = i;\
00061 }
00062
00063 int C2F(genimpl2)(integer *typ,integer *first,integer *last,integer *res)
00064 {
00065 static int i;
00066
00067 switch (*typ) {
00068 case 1:
00069 IMPL2(integer1);
00070 break;
00071 case 2:
00072 IMPL2(integer2);
00073 break;
00074 case 4:
00075 IMPL2(integer);
00076 break;
00077 case 11:
00078 IMPL2(unsigned char);
00079 break;
00080 case 12:
00081 IMPL2(unsigned short);
00082 break;
00083 case 14:
00084 IMPL2(unsigned int);
00085 break;
00086 }
00087 return 0;
00088 }
00089
00090 int C2F(genimpl3)(integer *typ,integer *first,integer *step,integer *last,integer *res)
00091 {
00092 static int i;
00093
00094 switch (*typ) {
00095 case 1:
00096 IMPL3(integer1);
00097 break;
00098 case 2:
00099 IMPL3(integer2);
00100 break;
00101 case 4:
00102 IMPL3(integer);
00103 break;
00104 case 11:
00105 IMPL3(unsigned char);
00106 break;
00107 case 12:
00108 IMPL3(unsigned short);
00109 break;
00110 case 14:
00111 IMPL3(unsigned int);
00112 break;
00113 }
00114 return 0;
00115 }
00116
00117 int C2F(genimpl2dim)(integer *typ,integer *first,integer *last,integer *res)
00118 {
00119
00120 switch (*typ) {
00121 case 1:
00122 IMPL2DIM(integer1);
00123 break;
00124 case 2:
00125 IMPL2DIM(integer2);
00126 break;
00127 case 4:
00128 IMPL2DIM(integer);
00129 break;
00130 case 11:
00131 IMPL2DIM(unsigned char);
00132 break;
00133 case 12:
00134 IMPL2DIM(unsigned short);
00135 break;
00136 case 14:
00137 IMPL2DIM(unsigned int);
00138 break;
00139 }
00140 return 0;
00141 }
00142 int C2F(genimpl3dim)(integer * typ,integer * first,integer * step,integer * last,integer * res)
00143 {
00144 static int i;
00145
00146 switch (*typ) {
00147 case 1:
00148 IMPL3DIM(integer1);
00149 break;
00150 case 2:
00151 IMPL3DIM(integer2);
00152 break;
00153 case 4:
00154 IMPL3DIM(integer);
00155 break;
00156 case 11:
00157 IMPL3DIM(unsigned char);
00158 break;
00159 case 12:
00160 IMPL3DIM(unsigned short);
00161 break;
00162 case 14:
00163 IMPL3DIM(unsigned int);
00164 break;
00165 }
00166 return 0;
00167 }
00168
00169