00001 #include "machine.h"
00002 #include "gentriu.h"
00003 typedef signed char integer1;
00004 typedef short integer2;
00005
00006
00007
00008 #define TRIU(Type) {\
00009 Type *DX;\
00010 DX=(Type *)dx;\
00011 kk = *k;\
00012 nn = *n;\
00013 l = 0;\
00014 if (kk>0) {\
00015 for (i = 0; i < (*m)*kk; ++i) \
00016 DX[i] = 0;\
00017 l = l+ (*m)*kk;\
00018 nn = nn - kk;\
00019 kk = 0;}\
00020 ls = l +1 - kk;\
00021 ll = *m -1 + kk;\
00022 for (j = 1; j <= nn; ++j) {\
00023 if (ll > 0) {\
00024 for (i = 0; i < ll; ++i) \
00025 DX[ls+i] = 0;\
00026 ll--;\
00027 ls = ls + *m +1;\
00028 }\
00029 }\
00030 }
00031
00032 int C2F(gentriu)(integer *typ,integer *m,integer *n,integer *k,int *dx)
00033 {
00034 static integer kk, l, ls, ll, j, i, nn;
00035
00036 switch (*typ) {
00037 case 1:
00038 TRIU(integer1);
00039 break;
00040 case 2:
00041 TRIU(integer2);
00042 break;
00043 case 4:
00044 TRIU(integer);
00045 break;
00046 case 11:
00047 TRIU(unsigned char);
00048 break;
00049 case 12:
00050 TRIU(unsigned short);
00051 break;
00052 case 14:
00053 TRIU(unsigned int);
00054 break;
00055 }
00056 return 0;
00057 }
00058