14 #include <sys/types.h> 36 #define minARTN(x) ((x) > ARTNLEN ? ARTNLEN : (x)) 38 #define eqan(a,b) (strncmp ((a), (b), ARTNLEN) == 0) 39 #define neqan(a,b) (!eqan(a,b)) 106 int cnomf_len = strlen (cnomf);
107 char cnomfy[cnomf_len+20];
112 strcpy (cnomfy, cnomf);
113 strcat (cnomfy,
".d");
116 lfi_abor (
"Cannot mkdir `%s'", cnomfy);
121 sprintf (cnomfy+cnomf_len+2,
"/%6.6d", i);
122 if (stat (cnomfy, &st) < 0)
126 return strdup (cnomfy);
133 if (strncmp (alm->cmagic,
"lfi_altm", 8))
142 for (fh = alm->fh; fh; fh = fh->next)
143 if (fh->inumer == *KNUMER)
146 lfi_abor (
"File number `%lld' is not opened", *KNUMER);
154 d = d >= 0 ? +1 : -1;
156 if ((d < 0) && (iart < 0))
162 if ((iart >= fh->naidx) || (iart < 0))
179 return len > ARTNLEN ? 0 : 1;
188 len = minARTN (CDNOMA_len);
201 memset (_name,
' ', ARTNLEN);
202 memcpy (_name, name, minARTN (name_len));
208 int iart1 = fh->iart-da > 0 ? fh->iart-da : 0;
209 int iart2 = fh->iart+da < fh->naidx ? fh->iart+da : fh->naidx;
210 for (iart = iart1; iart < iart2; iart++)
211 if (eqan (_name, fh->aidx[iart].name))
215 for (iart = 0; iart < fh->naidx; iart++)
216 if (eqan (_name, fh->aidx[iart].name))
234 fp = fopen (fh->cnomf,
"w");
237 lfi_abor (
"Cannot open `%s' for writing", fh->cnomf);
241 for (len = 0, ifh = 0; ifh < fh->nfidx; ifh++)
242 len = len < strlen (fh->fidx[ifh].cnomf) ? strlen (fh->fidx[ifh].cnomf) : len;
246 for (ifh = 0; ifh < fh->nfidx; ifh++)
249 for (iart = 0; iart < fh->naidx; iart++)
251 fh2na[fh->aidx[iart].ifh]++;
255 for (rank = 0, ifh = 0; ifh < fh->nfidx; ifh++)
261 if (fprintf (fp,
"LFI_ALTM\n") != 9)
265 fprintf (fp,
"%lld %lld\n", rank, len);
268 for (ifh = 0; ifh < fh->nfidx; ifh++)
272 const char * cnomf = fh->fidx[ifh].cnomf;
273 if (fprintf (fp,
"%s\n", cnomf) != strlen (cnomf) + 1)
276 else if (fh->unlink && (! fh->fidx[ifh].dead))
279 const char * cnomf = fh->fidx[ifh].cnomf;
280 if (unlink (cnomf) < 0)
281 lfi_abor (
"Cannot unlink `%s'", cnomf);
288 fh->fidx[ifh].dead = 1;
291 for (nart = 0, iart = 0; iart < fh->naidx; iart++)
296 fprintf (fp,
"%lld %d\n", nart, ARTNLEN);
299 for (iart = 0; iart < fh->naidx; iart++)
304 ifh = fh->aidx[iart].ifh;
306 fprintf (fp,
"%lld ", fh2ra[ifh]);
309 if (eqan (fh->aidx[iart].name, fh->aidx[iart].namf))
311 if (fprintf (fp,
"%-16.16s ", fh->aidx[iart].name) != 17)
317 if (fprintf (fp,
"%-16.16s.%-16.16s ", fh->aidx[iart].name, fh->aidx[iart].namf) != 34)
321 lfi_abor (
"Internal error; unexpected negative file rank");
322 if (fprintf (fp,
"\n") != 1)
326 if (fclose (fp) != 0)
335 lfi_abor (
"Cannot write to `%s'", fh->cnomf);
339 lfi_abor (
"Cannot close `%s'", fh->cnomf);
363 if ((!
new) && (fh->ifh_w >= 0))
365 fhw = fh->fidx[fh->ifh_w];
372 fh->ifh_w = fh->nfidx;
373 fh->nfidx = fh->nfidx + 1;
379 fh->fidx[fh->ifh_w].inumer = fh->inumer;
380 fh->fidx[fh->ifh_w].cnomf =
getfname (fh->cnomf);
381 fh->fidx[fh->ifh_w].dead = 0;
383 fhw = fh->fidx[fh->ifh_w];
387 logical LLNOMM = fort_TRUE, LLERFA = fort_FALSE, LLIMST = fort_FALSE;
388 integer64 INIMES = 0, INBARP = 0, INBARI = 0;
394 fhw.als->cb->lfifmd (fhw.als->data, &fh->fmult);
396 fhw.als->cb->lfiouv (fhw.als->data, &IREP, &INUMER, &LLNOMM, CLNOMF, CLSTTO, &LLERFA, &LLIMST, &INIMES, &INBARP, &INBARI,
397 strlen (CLNOMF), strlen (CLSTTO));
399 lfi_abor (
"Failed to open `%s' for writing", CLNOMF);
407 if (fh->cnomf != NULL)
408 free ((
void *)fh->cnomf);
410 fh->cnomf =
lfi_fstrdup (CDNOMF, CDNOMF_len, NULL);
413 static const char *
resolve_filename (
const char * base,
const char * filename,
int filename_len,
char * path)
415 LFI_CSTR (_file, filename);
416 int base_len = strlen (base);
419 path = (
char *)malloc (base_len + filename_len + 10);
425 for (i = base_len-1; i >= 0; i--)
429 strcat (path, _file);
433 strcpy (path, _file);
444 integer64 IREP, INIMES = 0, INBARP = 0, INBARI = 0;
445 logical LLNOMM = fort_TRUE, LLERFA = fort_FALSE, LLIMST = fort_FALSE;
450 als->
cb->
lfiouv (als->
data, &IREP, KNUMER, &LLNOMM, cnomf, CLSTTO, &LLERFA, &LLIMST, &INIMES, &INBARP, &INBARI,
451 strlen (cnomf), strlen (CLSTTO));
455 lfi_abor (
"Failed to open `%s' for reading", cnomf);
458 free ((
void *)cnomf);
472 memset (&fhr, 0,
sizeof (fhr));
477 if (fh->fidx[ifh].als == NULL)
481 integer64 * INUMER = &fh->fidx[ifh].inumer;
482 fh->fidx[ifh].als =
_getfhr (fh->cnomf, CLNOMF, INUMER, CLNOMF_len);
485 return fh->fidx[ifh];
489 lfi_altm_t * alm = lookup_alm (LFI); 490 #define FH_DECL(fatal) \ 491 lfi_altm_fh_t * fh = lookup_fh (alm, KNUMER, fatal); 493 int iart = lookup_rc (fh, CDNOMA, CDNOMA_len); \ 494 integer64 ifh = iart < 0 ? -1 : fh->aidx[iart].ifh; \ 495 lfi_altm_fh_fidx_t fhr = getfhr (fh, ifh); 511 for (fh = alm->fh; fh; fh = fh->next)
512 if (fh->inumer == inumer)
524 fh->inimes = *KNIMES;
525 fh->llerfa = *LDERFA;
526 fh->cstto =
lfi_fstrdup (CDSTTO, CDSTTO_len, NULL);
529 fh->fmult = alm->fmult;
550 fp = fopen (fh->cnomf,
"r");
553 lfi_abor (
"Cannot open `%s' for reading", fh->cnomf);
555 if (fscanf (fp,
"%8s\n", cmagic) < 0)
558 if (fscanf (fp,
"%d %lld\n", &fh->nfidx, &len) != 2)
563 for (ifh = 0; ifh < fh->nfidx; ifh++)
565 fh->fidx[ifh].cnomf = (
const char *)malloc (len+1);
566 fh->fidx[ifh].inumer = *
KNUMER;
567 if (fscanf (fp,
"%s\n", (
char *)fh->fidx[ifh].cnomf) != 1)
571 if (fscanf (fp,
"%d %lld\n", &fh->naidx, &artnlen) != 2)
574 if (artnlen != ARTNLEN)
575 lfi_abor (
"Unexpected article length in unit %lld, `%s'", artnlen, fh->cnomf);
579 for (iart = 0; iart < fh->naidx; iart++)
583 if (fscanf (fp,
"%lld ", &fh->aidx[iart].ifh) != 1)
586 if (fread (fh->aidx[iart].name, 1, ARTNLEN, fp) != ARTNLEN)
589 if (fread (&c, 1, 1, fp) != 1)
594 if (fread (fh->aidx[iart].namf, 1, ARTNLEN, fp) != ARTNLEN)
599 memcpy (fh->aidx[iart].namf, fh->aidx[iart].name, ARTNLEN);
604 if (fclose (fp) != 0)
614 lfi_abor (
"Cannot read from `%s'", fh->cnomf);
618 lfi_abor (
"Cannot close `%s'", fh->cnomf);
629 for (ifh = 0; ifh < fh->nfidx; ifh++)
631 if (fh->fidx[ifh].als != NULL)
632 lfi_abor (
"Attempt to free LFI_ALTM handle while sub-files are still opened");
633 free ((
void *)fh->fidx[ifh].cnomf);
638 free ((
void *)fh->cnomf);
639 free ((
void *)fh->cstto);
650 for (iart = 0; iart < fh->naidx; iart++)
654 for (iartx = iart+1; iartx < fh->naidx; iartx++)
655 if (eqan (fh->aidx[iart].name, fh->aidx[iartx].name))
657 memcpy (fh->aidx[iartx].name,
blank_index, ARTNLEN);
682 DRHOOK_START (
"lfiouv_pure_lfi");
684 fh =
fh_new (LFIOUV_ARGS_LIST);
691 for (ifh = 0; ifh < fh->nfidx; ifh++)
693 fh->fidx[ifh].als = NULL;
694 fh->fidx[ifh].cnomf =
lfi_fstrdup (CDNOMF + CDNOMF_len * (ifh + 1), CDNOMF_len, NULL);
695 fh->fidx[ifh].inumer = *
KNUMER;
696 fh->fidx[ifh].dead = 0;
699 if ((fast) && (*KNNOMF > 1))
700 #pragma omp parallel private (ifh) 702 #pragma omp for schedule (dynamic) 703 for (ifh = 0; ifh < fh->nfidx; ifh++)
709 for (fh->naidx = 0, ifh = 0; ifh < fh->nfidx; ifh++)
712 integer64 INALDO, INTROU, INARES, INAMAX;
713 fhr.als->cb->lfinaf (fhr.als->data, KREP, &fhr.inumer, &INALDO, &INTROU, &INARES, &INAMAX);
723 for (iart = 0, ifh = 0; ifh < fh->nfidx; ifh++)
726 fhr.als->cb->lfipos (fhr.als->data, KREP, KNUMER);
729 fhr.als->cb->lficas (fhr.als->data, KREP, &fhr.inumer, CLNOMA, &ILONG, &IPOSEX, &LLAVAN, CLNOMA_len);
732 memcpy (fh->aidx[iart].name, CLNOMA, ARTNLEN);
733 memcpy (fh->aidx[iart].namf, CLNOMA, ARTNLEN);
734 fh->aidx[iart].ifh = ifh;
753 int fast,
int do_link,
int do_copy,
int do_unlink)
777 DRHOOK_START (
"lfiouv_mixed_lfi");
779 fh =
fh_new (LFIOUV_ARGS_LIST);
781 fh->unlink = do_unlink;
782 fh->rmdir = do_unlink;
784 lm = (_lfi_mixed_t *)malloc (
sizeof (_lfi_mixed_t) * *KNNOMF);
785 memset (lm, 0,
sizeof (_lfi_mixed_t) * *KNNOMF);
790 #pragma omp parallel if (fast) 793 #pragma omp for schedule (dynamic) 794 for (ifi = 0; ifi < *KNNOMF; ifi++)
797 character * CLNOMF = CDNOMF + CDNOMF_len * (ifi + 1);
802 grok =
lfi_grok (CLNOMF, CDNOMF_len);
803 lm[ifi].CLNOMF = CLNOMF;
808 lm[ifi]._errno = ENOENT;
816 lm[ifi].cnomf =
lfi_fstrdup (CLNOMF, CDNOMF_len, NULL);
817 lm[ifi].als =
_getfhr (
"", CLNOMF, &lm[ifi].inumer, CDNOMF_len);
821 integer64 INIMES = 0, INBARP = 0, INBARI = 0;
822 logical LLNOMM = fort_TRUE, LLERFA = fort_FALSE, LLIMST = fort_FALSE;
824 lm[ifi].fh =
lfiouv_mult (LFI, &lm[ifi].irep, &lm[ifi].inumer, &LLNOMM, CLNOMF, CLSTTO, &LLERFA,
825 &LLIMST, &INIMES, &INBARP, &INBARI, CDNOMF_len, strlen (CLSTTO));
826 if (lm[ifi].irep != 0)
848 for (ifi = 0; ifi < *KNNOMF; ifi++)
852 errno = lm[ifi]._errno;
853 *KREP = lm[ifi].irep;
854 lfi_verb (NULL,
"lfiouv_mixed_lfi",
"KREP", KREP,
"CDNOMF", lm[ifi].CLNOMF, CDNOMF_len, NULL);
866 for (ifi = 0; ifi < *KNNOMF; ifi++)
870 fh->nfidx += lm[ifi].fh->nfidx;
879 LFI_CSTR (cnomf, CDNOMF);
882 for (ifi = 0, ifh = 0; ifi < *KNNOMF; ifi++)
885 integer64 INALDO, INTROU, INARES, INAMAX;
894 if ((*KREP =
lfi_smartcopy (lm[ifi].cnomf, cnoml, do_copy)) != 0)
899 cnoml = strdup (lm[ifi].cnomf);
904 if (istrue (*LDRELATIVE))
907 fh->fidx[ifh].als = als;
908 fh->fidx[ifh].cnomf = cnoml;
909 fh->fidx[ifh].inumer = lm[ifi].inumer;
910 fh->fidx[ifh].dead = 0;
912 free ((
void *)lm[ifi].cnomf);
915 lm[ifi].cnomf = NULL;
918 als->
cb->
lfinaf (als->
data, KREP, &fh->fidx[ifh].inumer, &INALDO, &INTROU, &INARES, &INAMAX);
928 for (ifg = 0; ifg < fg->nfidx; ifg++, ifh++)
930 const char * cnomg =
resolve_filename (fg->cnomf, fg->fidx[ifg].cnomf, strlen (fg->fidx[ifg].cnomf), NULL);
943 cnoml = strdup (cnomg);
947 if (istrue (*LDRELATIVE))
950 fh->fidx[ifh].als = NULL;
951 fh->fidx[ifh].cnomf = cnoml;
952 fh->fidx[ifh].inumer = 0;
954 free ((
void *)cnomg);
957 fh->naidx += fg->naidx;
967 for (iart = 0, ifi = 0, ifh = 0; ifi < *KNNOMF; ifi++)
972 if (fhr->als == NULL)
973 lfi_abor (
"Internal error: expected opened sub-file");
975 fhr->als->cb->lfipos (fhr->als->data, KREP, &fhr->inumer);
979 fhr->als->cb->lficas (fhr->als->data, KREP, &fhr->inumer, CLNOMA, &ILONG, &IPOSEX, &LLAVAN, CLNOMA_len);
982 memcpy (fh->aidx[iart].name, CLNOMA, ARTNLEN);
983 memcpy (fh->aidx[iart].namf, CLNOMA, ARTNLEN);
984 fh->aidx[iart].ifh = ifh;
994 for (iartg = 0; iartg < fg->naidx; iartg++, iart++)
996 memcpy (fh->aidx[iart].name, fg->aidx[iartg].name, ARTNLEN);
997 memcpy (fh->aidx[iart].namf, fg->aidx[iartg].namf, ARTNLEN);
998 fh->aidx[iart].ifh = ifh + fg->aidx[iartg].ifh;
1007 for (ifi = 0; ifi < *KNNOMF; ifi++)
1011 *KNBARI = fh->naidx;
1033 DRHOOK_START (
"lfiouv_altm");
1036 if (! istrue (*LDNOMM))
1039 lfi_abor (
"LDNOMM=T is not compatible with KNUMER<=0");
1040 CDNOMF_len = sprintf (CLNOMF,
"fort.%lld", *
KNUMER);
1044 islfi =
lfi_grok (CDNOMF, CDNOMF_len);
1052 islfi =
lfi_grok (CDNOMF, CDNOMF_len);
1078 LFI_CSTR (cnomf1, CDNOMF);
1079 const char * cnomf2;
1090 cnomf1_len = strlen (cnomf1);
1091 cnomf2_len = strlen (cnomf2);
1093 CLNOMF_len = cnomf1_len > cnomf2_len ? cnomf1_len : cnomf2_len;
1095 CLNOMF = (
character *)malloc (2 * CLNOMF_len);
1096 memset (CLNOMF,
' ', 2 * CLNOMF_len);
1098 memcpy (CLNOMF, cnomf1, cnomf1_len);
1099 memcpy (CLNOMF + CLNOMF_len, cnomf2, cnomf2_len);
1101 if (rename (cnomf1, cnomf2) < 0)
1102 lfi_abor (
"Cannot rename `%s' in `%s'", cnomf1, cnomf2);
1107 &INNOMF, CDSTTO, LDERFA, LDIMST, KNIMES,
1108 KNBARP, KNBARI, CLNOMF_len, CDSTTO_len, 0);
1110 free ((
void *)cnomf1);
1111 free ((
void *)cnomf2);
1123 fh =
fh_new (LFIOUV_ARGS_LIST);
1125 if (strcmp (fh->cstto,
"OLD") == 0)
1126 lfi_abor (
"File does not exist `%s'", fh->cnomf);
1135 *KNBARI = fh->naidx;
1140 LFI_CSTR (cnomf, CDNOMF);
1141 lfi_abor (
"Cannot open file `%s'", cnomf);
1161 DRHOOK_START (
"lfifer_altm");
1163 for (fh = alm->fh, fg = NULL; fh; fg = fh, fh = fh->next)
1164 if (fh->inumer == *
KNUMER)
1170 fg->next = fh->next;
1183 for (ifh = 0; ifh < fh->nfidx; ifh++)
1188 void * LFI = als->
data;
1190 fh->fidx[ifh].als->cb->lfifer (LFIFER_ARGS_LIST);
1191 fh->fidx[ifh].als->destroy (fh->fidx[ifh].als);
1193 fh->fidx[ifh].als = NULL;
1216 DRHOOK_START (
"lficas_altm");
1219 memset (
CDNOMA,
' ', CDNOMA_len);
1236 void * LFI = fhr.als->data;
1238 memcpy (CDNOMA, fh->aidx[iart].namf, ARTNLEN);
1239 fhr.als->cb->lfinfo (LFINFO_ARGS_LIST);
1240 if ((*
KREP != 0) || ((*KLONG == 0) && (*KPOSEX == 0)))
1241 lfi_abor (
"Internal error in unit %lld, `%s'", fh->inumer, fh->cnomf);
1244 memcpy (
CDNOMA, fh->aidx[iart].name, minARTN (CDNOMA_len));
1246 if (CDNOMA_len <
lfi_fstrlen (fh->aidx[iart].name, ARTNLEN))
1252 if (istrue (*LDAVAN))
1263 DRHOOK_START (
"lfipos_altm");
1278 DRHOOK_START (
"lfinfo_altm");
1288 void * LFI = fhr.als->data;
1290 KNUMER = &fh->fidx[ifh].inumer;
1291 fhr.als->cb->lfinfo (LFINFO_ARGS_LIST);
1294 if ((*
KREP != 0) || ((*KLONG == 0) && (*
KREP == 0)))
1295 lfi_abor (
"Internal error in unit %lld, `%s'", fh->inumer, fh->cnomf);
1312 DRHOOK_START (
"lfilaf_altm");
1316 for (iart = 0; iart < fh->naidx; iart++)
1321 int ifh = fh->aidx[iart].ifh;
1325 fhr.als->cb->lfinfo (fhr.als->data,
KREP,
KNUMER, fh->aidx[iart].namf, &ILONG, &IPOSEX, ARTNLEN);
1330 "%7lld-eme article de donnees: \"%16.16s\", %6lld mots, position %8lld a %8lld, \"%16.16s\" dans fichier '%s'\n",
1331 idonn++, fh->aidx[iart].name, ILONG, IPOSEX, IPOSEX + ILONG-1, fh->aidx[iart].namf, fh->fidx[ifh].cnomf);
1345 DRHOOK_START (
"lfinum_altm");
1347 *KRANG = fh == NULL ? 0 : 1;
1357 DRHOOK_START (
"lfilec_altm");
1366 fhr.als->cb->lfilec (fhr.als->data,
KREP, &fh->fidx[ifh].inumer, fh->aidx[iart].namf, KTAB, KLONG, ARTNLEN);
1382 DRHOOK_START (
"lfilas_altm");
1394 fhr.als->cb->lfilec (fhr.als->data,
KREP, &fhr.inumer, fh->aidx[iart].namf, KTAB, KLONG, ARTNLEN);
1398 memset (
CDNOMA,
' ', CDNOMA_len);
1399 memcpy (
CDNOMA, fh->aidx[iart].name, minARTN (CDNOMA_len));
1401 if (CDNOMA_len <
lfi_fstrlen (fh->aidx[iart].name, ARTNLEN))
1419 DRHOOK_START (
"lfilap_altm");
1431 fhr.als->cb->lfilec (fhr.als->data,
KREP, &fhr.inumer, fh->aidx[iart].namf, KTAB, KLONG, ARTNLEN);
1435 memset (
CDNOMA,
' ', CDNOMA_len);
1436 memcpy (
CDNOMA, fh->aidx[iart].name, minARTN (CDNOMA_len));
1438 if (CDNOMA_len <
lfi_fstrlen (fh->aidx[iart].name, ARTNLEN))
1456 DRHOOK_START (
"lficap_altm");
1458 memset (
CDNOMA,
' ', CDNOMA_len);
1469 int ifh = fh->aidx[iart].ifh;
1474 void * LFI = fhr.als->data;
1476 memcpy (CDNOMA, fh->aidx[iart].namf, minARTN (CDNOMA_len));
1477 fhr.als->cb->lfinfo (LFINFO_ARGS_LIST);
1478 if ((*
KREP != 0) || ((*KLONG == 0) && (*KPOSEX == 0)))
1479 lfi_abor (
"Internal error in unit %lld, `%s'", fh->inumer, fh->cnomf);
1482 memcpy (
CDNOMA, fh->aidx[iart].name, minARTN (CDNOMA_len));
1483 if (CDNOMA_len <
lfi_fstrlen (fh->aidx[iart].name, ARTNLEN))
1489 if (istrue (*LDRECU))
1502 DRHOOK_START (
"lfisup_altm");
1512 fhr.als->cb->lfinfo (fhr.als->data,
KREP, &fh->fidx[ifh].inumer, &fh->aidx[ifh].namf[0], KLONUT, &IPOSEX, ARTNLEN);
1516 memcpy (fh->aidx[iart].name,
blank_index, ARTNLEN);
1517 memcpy (fh->aidx[iart].namf,
blank_index, ARTNLEN);
1531 DRHOOK_START (
"lfinaf_altm");
1539 for (iart = 0; iart < fh->naidx; iart++)
1550 int iart1 =
lookup_rc (fh, CDNOM1, CDNOM1_len);
1551 int iart2 =
lookup_rc (fh, CDNOM2, CDNOM2_len);
1552 DRHOOK_START (
"lfiren_altm");
1560 if (!
check_an (CDNOM2, CDNOM2_len))
1574 memcpy (fh->aidx[iart1].name,
blank_index, ARTNLEN);
1575 memcpy (fh->aidx[iart1].name, CDNOM2, minARTN (CDNOM2_len));
1591 DRHOOK_START (
"lfiecr_altm");
1603 for (iart = 0; iart < fh->naidx; iart++)
1609 naidx = 2 * fh->naidx + 1;
1612 for (iart = fh->naidx; iart < naidx; iart++)
1614 memcpy (fh->aidx[iart].name,
blank_index, ARTNLEN);
1615 memcpy (fh->aidx[iart].namf,
blank_index, ARTNLEN);
1616 fh->aidx[iart].ifh = -1;
1628 fhw.als->cb->lfinfo (fhw.als->data,
KREP, &fhw.inumer,
CDNOMA, &ILONG, &IPOSEX, CDNOMA_len);
1634 if ((ILONG != 0) || (IPOSEX != 0))
1638 memcpy (CLNOMA,
CDNOMA, minARTN (CDNOMA_len));
1639 if (! (eqan (CLNOMA, fh->aidx[iart].name) && eqan (CLNOMA, fh->aidx[iart].namf)))
1644 integer64 INALDO, INTROU, INARES, INAMAX;
1645 fhw.als->cb->lfinaf (fhw.als->data,
KREP, &fhw.inumer, &INALDO, &INTROU, &INARES, &INAMAX);
1650 if ((INALDO + INTROU) > alm->maxartals)
1656 memcpy (fh->aidx[iart].name,
blank_index, ARTNLEN);
1657 memcpy (fh->aidx[iart].name,
CDNOMA, minARTN (CDNOMA_len));
1658 memcpy (fh->aidx[iart].namf,
blank_index, ARTNLEN);
1659 memcpy (fh->aidx[iart].namf,
CDNOMA, minARTN (CDNOMA_len));
1661 fh->aidx[iart].ifh = fh->ifh_w;
1666 void * LFI = fhw.als->data;
1667 fhw.als->cb->lfiecr (LFIECR_ARGS_LIST);
1685 DRHOOK_START (
"lfiopt_altm");
1693 memset (CDNOMF,
' ', CDNOMF_len);
1694 memset (CDSTTO,
' ', CDSTTO_len);
1696 memcpy (CDNOMF, fh->cnomf, CDNOMF_len > strlen (fh->cnomf) ? strlen (fh->cnomf) : CDNOMF_len);
1697 memcpy (CDSTTO, fh->cstto, CDSTTO_len > strlen (fh->cstto) ? strlen (fh->cstto) : CDSTTO_len);
1699 *LDNOMM = fort_TRUE;
1700 *LDIMST = fort_FALSE;
1701 *LDERFA = fh->llerfa;
1702 *KNIMES = fh->inimes;
1715 DRHOOK_START (
"lfinaf_altm");
1719 if ((*KNIMES > 2) || (*KNIMES < 0))
1725 fh->inimes = *KNIMES;
1737 DRHOOK_START (
"lfierf_altm");
1739 fh->llerfa = *LDERFA;
1750 DRHOOK_START (
"lfioef_altm");
1752 *LDERFA = fh->llerfa;
1761 DRHOOK_START (
"lfifmd_altm");
1764 alm->fmult = *KFACMD;
1773 DRHOOK_START (
"lfiofd_altm");
1775 *KFACMD = alm->fmult;
1784 DRHOOK_START (
"lfiofm_altm");
1789 *KFACTM = fh->fmult;
1790 *LDOUVR = fort_TRUE;
1794 *KFACTM = alm->fmult;
1796 *LDOUVR = fort_FALSE;
1806 DRHOOK_START (
"lfiafm_altm");
1813 else if (*KFACTM < 0)
1830 DRHOOK_START (
"lfisfm_altm");
1849 DRHOOK_START (
"lfineg_altm");
1858 DRHOOK_START (
"lfioeg_altm");
1866 DRHOOK_START (
"lfiomg_altm");
1868 *KULOUT = alm->iulout;
1875 DRHOOK_START (
"lfinmg_altm");
1877 alm->iulout = *KULOUT;
1927 lfi_altm_t * alm = lookup_alm (lfi->data); 1934 lfi_abor (
"Attempt to release lfi handler with opened files");
1944 return fh == NULL ? 0 : 1;
1951 return fh->inimes == 2 ? 1 : 0;
1958 return (alm->nerfag == 0) || ((alm->nerfag == 1) && istrue (fh->llerfa));
1971 memcpy (alm->cmagic,
"lfi_altm", 8);
1974 alm->fmult_list = NULL;
1975 alm->maxartals = 3000;
2002 integer64 INIMES = 2, INBARP = 0, INBARI = 0;
2003 logical LLNOMM = fort_TRUE, LLERFA = fort_TRUE, LLIMST = fort_TRUE;
2008 alm, KREP, &INUMER, &LLNOMM, CDNOMF,
2009 KNNOMF, CLSTTO, &LLERFA, &LLIMST, &INIMES,
2010 &INBARP, &INBARI, LDRELATIVE, CDNOMF_len, CLSTTO_len,
2023 lfi->
cb->
lfifer (alm, KREP, &INUMER, CLSTTO, CLSTTO_len);
2036 lfi_verb (NULL,
"lfi_altm_merge",
"KREP", KREP, NULL);
2055 integer64 INIMES = 2, INBARP = 0, INBARI = 0;
2056 logical LLNOMM = fort_TRUE, LLERFA = fort_TRUE, LLIMST = fort_TRUE;
2061 alm, KREP, &INUMER, &LLNOMM, CDNOMF,
2062 KNNOMF, CLSTTO, &LLERFA, &LLIMST, &INIMES,
2063 &INBARP, &INBARI, LDRELATIVE, CDNOMF_len, CLSTTO_len,
2076 lfi->
cb->
lfifer (alm, KREP, &INUMER, CLSTTO, CLSTTO_len);
2089 lfi_verb (NULL,
"lfi_altm_index",
"KREP", KREP, NULL);
2112 LFI_CSTR (cnomf2, CDNOMF2);
2114 if ((*KREP =
lfi_fsmartcopy (CDNOMF1, CDNOMF2, 1, CDNOMF1_len, CDNOMF2_len)) != 0)
2119 int errno_save = errno;
2133 integer64 INIMES = 2, INBARP = 0, INBARI = 0;
2134 logical LLNOMM = fort_TRUE, LLERFA = fort_TRUE, LLIMST = fort_TRUE;
2138 lfi->
cb->
lfiouv (alm, KREP, &INUMER, &LLNOMM, CDNOMF1, CLSTTO, &LLERFA, &LLIMST,
2139 &INIMES, &INBARP, &INBARI, CDNOMF1_len, CLSTTO_len);
2150 LFI_CSTR (cnomf2, CDNOMF2);
2155 for (ifh = 0; ifh < fh->nfidx; ifh++)
2158 strlen (fh->fidx[ifh].cnomf),
2160 const char * cnoml2;
2168 free ((
void *)cnoml1);
2171 free ((
void *)fh->fidx[ifh].cnomf);
2174 if (istrue (*LDRELATIVE))
2177 fh->fidx[ifh].cnomf = cnoml2;
2197 lfi->
cb->
lfifer (alm, KREP, &INUMER, CLSTTC, CLSTTC_len);
2207 int errno_save = errno;
2209 for (ifh1 = 0; ifh1 < ifh; ifh1++)
2213 unlink (fh->fidx[ifh1].cnomf);
2237 lfi_abor (
"Unknown return code from lfi_grok");
2246 lfi_verb (NULL,
"lfi_altm_copy",
"KREP", KREP, NULL);
2266 LFI_CSTR (cnomf, CDNOMF);
2281 integer64 INIMES = 2, INBARP = 0, INBARI = 0;
2282 logical LLNOMM = fort_TRUE, LLERFA = fort_TRUE, LLIMST = fort_TRUE;
2286 lfi->
cb->
lfiouv (alm, KREP, &INUMER, &LLNOMM, CDNOMF, CLSTTO, &LLERFA, &LLIMST,
2287 &INIMES, &INBARP, &INBARI, CDNOMF_len, CLSTTO_len);
2301 for (ifh = 0; ifh < fh->nfidx; ifh++)
2304 strlen (fh->fidx[ifh].cnomf), NULL);
2309 if (unlink (cnoml) != 0)
2311 if (istrue (*LDFORCE))
2324 free ((
void *)cnoml);
2325 free ((
void *)dirnl);
2335 lfi->
cb->
lfifer (alm, KREP, &INUMER, CLSTTC, CLSTTC_len);
2343 LFI_CSTR (cnomf, CDNOMF)
2366 lfi_abor (
"Unknown return code from lfi_grok");
2375 lfi_verb (NULL,
"lfi_altm_remove",
"KREP", KREP,
"CDNOMF", CDNOMF, CDNOMF_len, NULL);
static void lfierf_altm(LFIERF_ARGS_DECL)
static lfi_altm_fh_t * lfiouv_pure_lfi(void *LFI, integer64 *KREP, integer64 *KNUMER, logical *LDNOMM, character *CDNOMF, integer64 *KNNOMF, character *CDSTTO, logical *LDERFA, logical *LDIMST, integer64 *KNIMES, integer64 *KNBARP, integer64 *KNBARI, character_len CDNOMF_len, character_len CDSTTO_len, int fast)
lfi_fmul_t * lfi_fmul_get(lfi_fmul_t *fmul, const integer64 *KNUMER, integer64 *KFACTM)
int(* is_fatl)(struct lfi_hndl_t *, integer64 *)
void(* lfinaf)(LFINAF_ARGS_DECL)
void lfi_altm_index_(integer64 *KREP, character *CDNOMF, integer64 *KNNOMF, logical *LDRELATIVE, character_len CDNOMF_len)
static const char * blank_index
void lfifra_dumm(LFIFRA_ARGS_DECL)
void lfiosf_miss(LFIOSF_ARGS_DECL)
lfi_hndl_t * lfi_get_altm_hndl(void *data)
static void lfinaf_altm(LFINAF_ARGS_DECL)
void lfiosg_dumm(LFIOSG_ARGS_DECL)
static void lfifer_mult(lfi_altm_fh_t *fh)
static void lfiren_altm(LFIREN_ARGS_DECL)
lfi_fmul_t * lfi_fmul_set(lfi_fmul_t **fmul, const integer64 *KNUMER, const integer64 *KFACTM)
struct lfi_altm_fh_t lfi_altm_fh_t
void lfiver_dumm(LFIVER_ARGS_DECL)
static void lfiecr_altm(LFIECR_ARGS_DECL)
lfi_hndl_t * lfi_get_alts_hndl(void *data)
int lfi_mkdir(const char *path)
static void lfiafm_altm(LFIAFM_ARGS_DECL)
static void lfilas_altm(LFILAS_ARGS_DECL)
void lfi_altm_copy_(integer64 *KREP, character *CDNOMF1, character *CDNOMF2, logical *LDRELATIVE, character_len CDNOMF1_len, character_len CDNOMF2_len)
INTERFACE SUBROUTINE FACILO KNIVAU
INTERFACE SUBROUTINE FACILO && KREP
static void lfifer_altm(LFIFER_ARGS_DECL)
static void lfinmg_altm(LFINMG_ARGS_DECL)
void lfimst_dumm(LFIMST_ARGS_DECL)
static void lfi_del_altm_hndl(lfi_hndl_t *lfi)
quick &counting sorts only inumt inumt name
void lficfg_dumm(LFICFG_ARGS_DECL)
static int check_an(const char *CDNOMA, const character_len CDNOMA_len)
static void lfiopt_altm(LFIOPT_ARGS_DECL)
int(* is_verb)(struct lfi_hndl_t *, integer64 *)
static void lfiofm_altm(LFIOFM_ARGS_DECL)
void(* destroy)(struct lfi_hndl_t *)
static const char * resolve_filename(const char *base, const char *filename, int filename_len, char *path)
static void lfilec_altm(LFILEC_ARGS_DECL)
static int lfi_fat_altm_hndl(lfi_hndl_t *lfi, integer64 *KNUMER)
static const char * getfname(const char *cnomf)
static lfi_altm_t * lookup_alm(void *LFI)
static void lfilaf_altm(LFILAF_ARGS_DECL)
static lfi_altm_fh_t * lookup_fh(lfi_altm_t *alm, integer64 *KNUMER, int fatal)
void lfista_dumm(LFISTA_ARGS_DECL)
static void lfineg_altm(LFINEG_ARGS_DECL)
static lfi_hndl_t * _getfhr(const char *base, character *CDNOMF, integer64 *KNUMER, character_len CDNOMF_len)
static int remove_duplicates(lfi_altm_fh_t *fh)
static void fh_write_hdr(lfi_altm_fh_t *fh, integer64 *KREP)
char * lfi_fstrdup(const character *fstr, const character_len len, char *cstr)
int lfi_smartcopy(const char *f1, const char *f2, int copy)
const char * lfi_dirname(const char *path)
static void lfinfo_altm(LFINFO_ARGS_DECL)
void lfipxf_miss(LFIPXF_ARGS_DECL)
void(* lfiouv)(LFIOUV_ARGS_DECL)
static void lfinim_altm(LFINIM_ARGS_DECL)
static void lfinum_altm(LFINUM_ARGS_DECL)
static void lfipos_altm(LFIPOS_ARGS_DECL)
lfi_grok_t lfi_grok(const character *file, character_len file_len)
struct lfi_altm_fh_aidx_t lfi_altm_fh_aidx_t
void lfideb_dumm(LFIDEB_ARGS_DECL)
static int check_an_len(const char *CDNOMA, const character_len CDNOMA_len)
void lfi_abor(const char *fmt,...)
static lfi_altm_fh_fidx_t getfhw(lfi_altm_fh_t *fh, int new)
void lfiini_dumm(LFIINI_ARGS_DECL)
static void lficas_altm(LFICAS_ARGS_DECL)
char * lfi_make_relative_path(const char *base, char *path)
void lfiomf_dumm(LFIOMF_ARGS_DECL)
character_len lfi_fstrlen(const character *fstr, const character_len len)
static void lfisup_altm(LFISUP_ARGS_DECL)
void lfi_altm_merge_(integer64 *KREP, character *CDNOMF, integer64 *KNNOMF, logical *LDRELATIVE, character_len CDNOMF_len)
const char * lfi_cleanup_path(char *path)
static void lfiouv_altm(LFIOUV_ARGS_DECL)
void(* lfifer)(LFIFER_ARGS_DECL)
static void lfisfm_altm(LFISFM_ARGS_DECL)
static lfi_altm_fh_t * fh_new(LFIOUV_ARGS_DECL)
static void fh_set_filename(lfi_altm_fh_t *fh, character *CDNOMF, character_len CDNOMF_len)
static void lfiomg_altm(LFIOMG_ARGS_DECL)
struct lfi_altm_t lfi_altm_t
struct lfi_altm_fh_fidx_t lfi_altm_fh_fidx_t
int lfi_fstrcmp(const character *s1, const character *s2, character_len len1, character_len len2)
static int lfi_vrb_altm_hndl(lfi_hndl_t *lfi, integer64 *KNUMER)
static int lfi_opn_altm_hndl(lfi_hndl_t *lfi, integer64 *KNUMER)
int lfi_fsmartcopy(const character *cnomf1, const character *cnomf2, int copy, character_len cnomf1_len, character_len cnomf2_len)
static void lfioeg_altm(LFIOEG_ARGS_DECL)
integer64 lfi_fmul_del(lfi_fmul_t **fmul, const integer64 *KNUMER)
static int seek_rc(lfi_altm_fh_t *fh, int d)
void lfinsg_dumm(LFINSG_ARGS_DECL)
static void lficap_altm(LFICAP_ARGS_DECL)
int lfi_rmdir(const char *path)
static lfi_altm_fh_fidx_t getfhr(lfi_altm_fh_t *fh, int ifh)
static void lfilap_altm(LFILAP_ARGS_DECL)
INTERFACE SUBROUTINE FACILO KNUMER
static int lookup_rc(lfi_altm_fh_t *fh, character *name, character_len name_len)
static void lfifmd_altm(LFIFMD_ARGS_DECL)
static void lfiofd_altm(LFIOFD_ARGS_DECL)
static integer64 iulout(lfi_hndl_t *lfi)
void lfi_altm_remove_(integer64 *KREP, character *CDNOMF, logical *LDFORCE, character_len CDNOMF_len)
INTERFACE SUBROUTINE FACONO CDNOMA
static lfi_altm_fh_t * lfiouv_mult(LFIOUV_ARGS_DECL)
int(* is_open)(struct lfi_hndl_t *, integer64 *)
static lfi_altm_fh_t * lfiouv_mixed_lfi(void *LFI, integer64 *KREP, integer64 *KNUMER, logical *LDNOMM, character *CDNOMF, integer64 *KNNOMF, character *CDSTTO, logical *LDERFA, logical *LDIMST, integer64 *KNIMES, integer64 *KNBARP, integer64 *KNBARI, logical *LDRELATIVE, character_len CDNOMF_len, character_len CDSTTO_len, int fast, int do_link, int do_copy, int do_unlink)
static void lfioef_altm(LFIOEF_ARGS_DECL)
void lfi_verb(lfi_hndl_t *lfi, const char *func,...)
static void fh_modified(lfi_altm_fh_t *fh)