00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #pragma ident "@(#) libf/fort/fcdstr.c 92.1 06/24/99 10:18:36"
00039 #include <fortran.h>
00040 #include <memory.h>
00041 #include <string.h>
00042
00043 #define BLANK ((int) ' ')
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 int
00065 _fcd_cmp_eq(
00066 _fcd fch1,
00067 _fcd fch2)
00068 {
00069 char *str1, *str2, *str3;
00070 unsigned int len1, len2, len3, len;
00071 int stat;
00072
00073 str1 = _fcdtocp(fch1);
00074 str2 = _fcdtocp(fch2);
00075 len1 = _fcdlen (fch1);
00076 len2 = _fcdlen (fch2);
00077
00078
00079
00080 if (len1 < len2) {
00081 len = len1;
00082 len3 = len2 - len1;
00083 str3 = str2 + len;
00084 }
00085 else {
00086 len = len2;
00087 len3 = len1 - len2;
00088 str3 = str1 + len;
00089 }
00090
00091
00092
00093 stat = memcmp(str1, str2, len);
00094
00095
00096
00097
00098
00099
00100 while (len3 > 0 && stat == 0) {
00101 register char ch;
00102
00103 ch = *str3;
00104 str3 = str3 + 1;
00105 stat = ((int) ch) ^ BLANK;
00106 len3 = len3 - 1;
00107 }
00108
00109 return (stat == 0);
00110 }
00111
00112
00113
00114
00115
00116
00117
00118
00119 int
00120 _fcd_cmp_gt(
00121 _fcd fch1,
00122 _fcd fch2)
00123 {
00124 char *str1, *str2, *str3;
00125 unsigned int len1, len2, len3, len;
00126 int sign, stat;
00127
00128 str1 = _fcdtocp(fch1);
00129 str2 = _fcdtocp(fch2);
00130 len1 = _fcdlen (fch1);
00131 len2 = _fcdlen (fch2);
00132
00133
00134
00135 sign = (len1 < len2);
00136
00137 if (sign) {
00138 len = len1;
00139 len3 = len2 - len1;
00140 str3 = str2 + len;
00141 }
00142 else {
00143 len = len2;
00144 len3 = len1 - len2;
00145 str3 = str1 + len;
00146 }
00147
00148
00149
00150 stat = memcmp(str1, str2, len);
00151
00152
00153
00154
00155
00156
00157 while (len3 > 0 && stat == 0) {
00158 register char ch;
00159
00160 ch = *str3;
00161 str3 = str3 + 1;
00162 stat = sign ? (BLANK - (int) ch) : (((int) ch) - BLANK);
00163 len3 = len3 - 1;
00164 }
00165
00166 return (stat > 0);
00167 }
00168
00169
00170
00171
00172
00173
00174
00175
00176 int
00177 _fcd_cmp_lt(
00178 _fcd fch1,
00179 _fcd fch2)
00180 {
00181 char *str1, *str2, *str3;
00182 unsigned int len1, len2, len3, len;
00183 int sign, stat;
00184
00185 str1 = _fcdtocp(fch1);
00186 str2 = _fcdtocp(fch2);
00187 len1 = _fcdlen (fch1);
00188 len2 = _fcdlen (fch2);
00189
00190
00191
00192 sign = (len1 < len2);
00193
00194 if (sign) {
00195 len = len1;
00196 len3 = len2 - len1;
00197 str3 = str2 + len;
00198 }
00199 else {
00200 len = len2;
00201 len3 = len1 - len2;
00202 str3 = str1 + len;
00203 }
00204
00205
00206
00207 stat = memcmp(str1, str2, len);
00208
00209
00210
00211
00212
00213
00214 while (len3 > 0 && stat == 0) {
00215 register char ch;
00216
00217 ch = *str3;
00218 str3 = str3 + 1;
00219 stat = sign ? BLANK - (int) ch : ((int) ch) - BLANK;
00220 len3 = len3 - 1;
00221 }
00222
00223 return (stat < 0);
00224 }
00225
00226
00227
00228
00229 void
00230 _fcd_blank(
00231 _fcd fch)
00232 {
00233 char *str;
00234 unsigned int len;
00235
00236 str = _fcdtocp(fch);
00237 len = _fcdlen (fch);
00238
00239 if (len > 0)
00240 (void) memset (str, BLANK, len);
00241
00242 return;
00243 }
00244
00245
00246
00247
00248
00249
00250 _fcd
00251 _fcd_copy(
00252 _fcd fch1,
00253 _fcd fch2)
00254 {
00255 char *str1, *str2;
00256 unsigned int len1, len2, len;
00257
00258 str1 = _fcdtocp(fch1);
00259 str2 = _fcdtocp(fch2);
00260 len1 = _fcdlen (fch1);
00261 len2 = _fcdlen (fch2);
00262
00263 len = (len1 > len2) ? len2 : len1;
00264
00265 if (len > 0)
00266 (void) memcpy(str1, str2, len);
00267
00268 return ( _cptofcd(str1 + len, len1 - len) );
00269 }