00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifdef WIN32
00010
00011 #include <io.h>
00012 typedef long off_t;
00013
00014 #define cfclos_ __stdcall CFCLOS
00015 #define cfget_ __stdcall CFGET
00016 #define cfseek_ __stdcall CFSEEK
00017 #define ishftr_ __stdcall ISHFTR
00018 #define lshift_ __stdcall LSHIFT
00019 #define vxinvb_ __stdcall VXINVB
00020 #define vxinvc_ __stdcall VXINVC
00021 #define cfopei_ __stdcall CFOPEI
00022 #define cfstati_ __stdcall CFSTATI
00023 #define lnblnk_ __stdcall LNBLNK
00024
00025 #else
00026 #include <unistd.h>
00027 #endif
00028
00029 #include <stdio.h>
00030 #include <stdlib.h>
00031 #include <fcntl.h>
00032 #include <sys/types.h>
00033 #include <sys/stat.h>
00034
00035
00036 char *fchtak(char *ftext, int lgtext)
00037 {
00038 char *ptalc, *ptuse;
00039 char *utext;
00040 int nalc;
00041 int ntx, jcol;
00042
00043 nalc = lgtext + 8;
00044 ptalc = malloc (nalc);
00045 if (ptalc == NULL) goto exit;
00046 utext = ftext;
00047
00048 ptuse = ptalc;
00049 ntx = lgtext;
00050 for (jcol = 0; jcol < ntx; jcol++) *ptuse++ = *utext++;
00051
00052 *ptuse = '\0';
00053 exit: return ptalc;
00054 }
00055
00056
00057
00058 unsigned int ishftr_(unsigned int *arg, int *len)
00059 {
00060 return(*arg >> *len);
00061 }
00062
00063
00064
00065 unsigned int lshift_(unsigned int *arg, int *len)
00066 {
00067 return(*arg << *len);
00068 }
00069
00070
00071
00072 void vxinvb_(int *ixv, int *n)
00073 {
00074 int limit, jloop;
00075 int in;
00076 limit = *n;
00077 for (jloop = 0; jloop < limit; jloop++) {
00078 in = ixv[jloop];
00079 ixv[jloop] =
00080 ((in >> 24) & 0x000000ff) |
00081 ((in >> 8) & 0x0000ff00) |
00082 ((in << 8) & 0x00ff0000) |
00083 ((in << 24) & 0xff000000);
00084 }
00085 return;
00086 }
00087
00088
00089
00090 void vxinvc_ (int *iv, int *ixv, int *n)
00091 {
00092 int limit, jloop;
00093 int in;
00094 limit = *n;
00095 for (jloop = 0; jloop < limit; jloop++) {
00096 in = iv[jloop];
00097 ixv[jloop] =
00098 ((in >> 24) & 0x000000ff) |
00099 ((in >> 8) & 0x0000ff00) |
00100 ((in << 8) & 0x00ff0000) | ((in << 24) & 0xff000000);
00101 }
00102 return;
00103 }
00104
00105
00106
00107 void cfget_(int *lundes, int *medium, int *nwrec, int *nwtak, char *mbuf,
00108 int *astat)
00109 {
00110 int fildes;
00111 int nbdn, nbdo;
00112
00113 if (medium) { }
00114
00115 *astat = 0;
00116 if (*nwtak <= 0) return;
00117
00118 fildes = *lundes;
00119 nbdo = *nwrec * 4;
00120 nbdn = read (fildes, mbuf, nbdo);
00121 if (nbdn == 0) goto heof;
00122 if (nbdn < 0) goto herror;
00123 *nwtak = (nbdn - 1) / 4 + 1;
00124 return;
00125 heof:
00126 *astat = -1;
00127 return;
00128 herror:
00129 *astat = 0;
00130 printf ("error in CFGET\n");
00131 return;
00132 }
00133
00134
00135
00136 void cfseek_(int *lundes, int *medium, int *nwrec, int *jcrec, int *astat)
00137 {
00138 int fildes;
00139 int nbdo;
00140 int isw;
00141
00142 if (medium) { }
00143
00144 fildes = *lundes;
00145 nbdo = *jcrec * *nwrec * 4;
00146 isw = lseek (fildes, nbdo, 0);
00147 if (isw < 0) goto trouble;
00148 *astat = 0;
00149 return;
00150
00151 trouble:
00152 *astat = -1;
00153 printf("error in CFSEEK\n");
00154 }
00155
00156
00157
00158 void cfclos_(int *lundes, int *medium)
00159 {
00160 int fildes;
00161 if (medium) { }
00162 fildes = *lundes;
00163 close (fildes);
00164 return;
00165 }
00166
00167
00168 #ifdef WIN32
00169 int cfstati_(char *fname, int lfname, int *info, int *lgname)
00170 #else
00171 int cfstati_(char *fname, int *info, int *lgname)
00172 #endif
00173 {
00174 struct stat buf;
00175 char *ptname, *fchtak();
00176 int istat=-1, stat();
00177 ptname = fchtak(fname,*lgname);
00178 if (ptname == ((void *)0)) return -1;
00179 istat = stat(ptname, &buf);
00180 if (!istat) {
00181 info[0] = (int) buf.st_dev;
00182 info[1] = (int) buf.st_ino;
00183 info[2] = (int) buf.st_mode;
00184 info[3] = (int) buf.st_nlink;
00185 info[4] = (int) buf.st_uid;
00186 info[5] = (int) buf.st_gid;
00187 info[6] = (int) buf.st_size;
00188 #if defined(__APPLE__) || defined(__FreeBSD__)
00189 info[7] = (int) buf.st_atimespec.tv_sec;
00190 info[8] = (int) buf.st_mtimespec.tv_sec;
00191 info[9] = (int) buf.st_ctimespec.tv_sec;
00192 info[10] = (int) buf.st_blksize;
00193 info[11] = (int) buf.st_blocks;
00194 #elif defined(WIN32)
00195 info[7] = 0;
00196 info[8] = 0;
00197 info[9] = 0;
00198 info[10] = 0;
00199 info[11] = 0;
00200 #else
00201 info[7] = (int) buf.st_atim.tv_sec;
00202 info[8] = (int) buf.st_mtim.tv_sec;
00203 info[9] = (int) buf.st_ctim.tv_sec;
00204 info[10] = (int) buf.st_blksize;
00205 info[11] = (int) buf.st_blocks;
00206 #endif
00207 };
00208 free(ptname);
00209 return istat;
00210 }
00211
00212
00213
00214 int cfopen_perm = 0;
00215 #ifdef WIN32
00216 void cfopei_(int *lundes, int *medium, int *nwrec, int *mode, int *nbuf,
00217 char *ftext, int lftext, int *astat, int *lgtx)
00218 #else
00219 void cfopei_(int *lundes, int *medium, int *nwrec, int *mode, int *nbuf,
00220 char *ftext, int *astat, int *lgtx)
00221 #endif
00222 {
00223 char *pttext, *fchtak();
00224 int flags = 0;
00225 int fildes;
00226 int perm;
00227 if (nwrec || nbuf) { }
00228 *lundes = 0;
00229 *astat = -1;
00230 perm = cfopen_perm;
00231 cfopen_perm = 0;
00232 if (*medium == 1) goto fltp;
00233 if (*medium == 3) goto fltp;
00234 if (mode[0] == 0)
00235 {if (mode[1] == 0)
00236 flags = 00;
00237 else
00238 flags = 02;}
00239 else if (mode[0] == 1)
00240 {if (mode[1] == 0)
00241 flags = 01 | 0100 | 01000;
00242 else
00243 flags = 02 | 0100 | 01000;}
00244 else if (mode[0] == 2)
00245 {if (mode[1] == 0)
00246 flags = 01 | 0100 | 02000;
00247 else
00248 flags = 02 | 0100 | 02000;}
00249 goto act;
00250 fltp:
00251 if (mode[0] == 0)
00252 {if (mode[1] == 0)
00253 flags = 00;
00254 else
00255 flags = 02;}
00256 else if (mode[0] == 1)
00257 {if (mode[1] == 0)
00258 flags = 01;
00259 else
00260 flags = 02;}
00261 else if (mode[0] == 2) return;
00262 act:
00263 pttext = fchtak(ftext,*lgtx);
00264 if (pttext == 0) return;
00265 if (perm == 0) perm = 0644;
00266 fildes = open (pttext, flags, perm);
00267 if (fildes < 0) goto errm;
00268 *lundes = fildes;
00269 *astat = 0;
00270 goto done;
00271 errm:
00272 *astat = 0;
00273 printf("error in CFOPEN\n");
00274 done:
00275 free(pttext);
00276 return;
00277 }
00278
00279
00280
00281 int lnblnk_ (char *chline, int len)
00282 {
00283 char *chcur;
00284 chcur = chline + len;
00285 while (chcur > chline) { if (*--chcur != ' ') goto exit; }
00286 return 0;
00287 exit: return chcur+1 - chline;
00288 }
00289
00290
00291