141 #include <config_auto.h>
147 #include <sys/stat.h>
151 #include "allheaders.h"
153 static const l_uint32 MaxPtrArraySize = 50000000;
174 PROCNAME(
"sarrayCreate");
176 if (n <= 0 || n > MaxPtrArraySize)
180 if ((sa->
array = (
char **)LEPT_CALLOC(n,
sizeof(
char *))) == NULL) {
182 return (
SARRAY *)ERROR_PTR(
"ptr array not made", procName, NULL);
206 PROCNAME(
"sarrayCreateInitialized");
209 return (
SARRAY *)ERROR_PTR(
"n must be > 0", procName, NULL);
211 return (
SARRAY *)ERROR_PTR(
"initstr not defined", procName, NULL);
214 for (i = 0; i < n; i++)
235 char separators[] =
" \n\t";
236 l_int32 i, nsub, size, inword;
239 PROCNAME(
"sarrayCreateWordsFromString");
242 return (
SARRAY *)ERROR_PTR(
"textstr not defined", procName, NULL);
245 size = strlen(
string);
248 for (i = 0; i < size; i++) {
249 if (inword == FALSE &&
250 (
string[i] !=
' ' &&
string[i] !=
'\t' &&
string[i] !=
'\n')) {
253 }
else if (inword == TRUE &&
254 (
string[i] ==
' ' ||
string[i] ==
'\t' ||
string[i] ==
'\n')) {
260 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
261 sarraySplitString(sa,
string, separators);
286 l_int32 i, nsub, size, startptr;
287 char *cstring, *substring;
290 PROCNAME(
"sarrayCreateLinesFromString");
293 return (
SARRAY *)ERROR_PTR(
"textstr not defined", procName, NULL);
296 size = strlen(
string);
298 for (i = 0; i < size; i++) {
299 if (
string[i] ==
'\n')
304 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
308 if ((cstring =
stringNew(
string)) == NULL) {
310 return (
SARRAY *)ERROR_PTR(
"cstring not made", procName, NULL);
314 for (i = 0; i < size; i++) {
315 if (cstring[i] ==
'\n') {
317 if (i > 0 && cstring[i - 1] ==
'\r')
318 cstring[i - 1] =
'\0';
319 if ((substring =
stringNew(cstring + startptr)) == NULL) {
322 return (
SARRAY *)ERROR_PTR(
"substring not made",
330 if (startptr < size) {
331 if ((substring =
stringNew(cstring + startptr)) == NULL) {
334 return (
SARRAY *)ERROR_PTR(
"substring not made",
342 sarraySplitString(sa,
string,
"\r\n");
367 PROCNAME(
"sarrayDestroy");
370 L_WARNING(
"ptr address is NULL!\n", procName);
373 if ((sa = *psa) == NULL)
379 for (i = 0; i < sa->
n; i++) {
381 LEPT_FREE(sa->
array[i]);
383 LEPT_FREE(sa->
array);
403 PROCNAME(
"sarrayCopy");
406 return (
SARRAY *)ERROR_PTR(
"sa not defined", procName, NULL);
409 return (
SARRAY *)ERROR_PTR(
"csa not made", procName, NULL);
411 for (i = 0; i < sa->
n; i++)
427 PROCNAME(
"sarrayClone");
430 return (
SARRAY *)ERROR_PTR(
"sa not defined", procName, NULL);
457 PROCNAME(
"sarrayAddString");
460 return ERROR_INT(
"sa not defined", procName, 1);
462 return ERROR_INT(
"string not defined", procName, 1);
464 return ERROR_INT(
"invalid copyflag", procName, 1);
469 return ERROR_INT(
"extension failed", procName, 1);
475 sa->
array[n] = (
char *)
string;
496 size_t oldsize, newsize;
498 PROCNAME(
"sarrayExtendArray");
501 return ERROR_INT(
"sa not defined", procName, 1);
502 if (sa->
nalloc >= MaxPtrArraySize)
503 return ERROR_INT(
"sa at maximum ptr size; can't extend", procName, 1);
504 oldsize = sa->
nalloc *
sizeof(
char *);
505 if (sa->
nalloc > MaxPtrArraySize / 2) {
506 newsize = MaxPtrArraySize *
sizeof(
char *);
507 sa->
nalloc = MaxPtrArraySize;
509 newsize = 2 * oldsize;
513 oldsize, newsize)) == NULL)
514 return ERROR_INT(
"new ptr array not returned", procName, 1);
533 l_int32 i, n, nalloc;
535 PROCNAME(
"sarrayRemoveString");
538 return (
char *)ERROR_PTR(
"sa not defined", procName, NULL);
541 return (
char *)ERROR_PTR(
"array not returned", procName, NULL);
543 if (index < 0 || index >= n)
544 return (
char *)ERROR_PTR(
"array index out of bounds", procName, NULL);
546 string = array[index];
552 for (i = index; i < n - 1; i++)
553 array[i] = array[i + 1];
587 PROCNAME(
"sarrayReplaceString");
590 return ERROR_INT(
"sa not defined", procName, 1);
592 if (index < 0 || index >= n)
593 return ERROR_INT(
"array index out of bounds", procName, 1);
595 return ERROR_INT(
"newstr not defined", procName, 1);
597 return ERROR_INT(
"invalid copyflag", procName, 1);
599 LEPT_FREE(sa->
array[index]);
604 sa->
array[index] = str;
620 PROCNAME(
"sarrayClear");
623 return ERROR_INT(
"sa not defined", procName, 1);
624 for (i = 0; i < sa->
n; i++) {
625 LEPT_FREE(sa->
array[i]);
645 PROCNAME(
"sarrayGetCount");
648 return ERROR_INT(
"sa not defined", procName, 0);
674 PROCNAME(
"sarrayGetArray");
677 return (
char **)ERROR_PTR(
"sa not defined", procName, NULL);
680 if (pnalloc) *pnalloc = sa->
nalloc;
707 PROCNAME(
"sarrayGetString");
710 return (
char *)ERROR_PTR(
"sa not defined", procName, NULL);
711 if (index < 0 || index >= sa->
n)
712 return (
char *)ERROR_PTR(
"index not valid", procName, NULL);
714 return (
char *)ERROR_PTR(
"invalid copyflag", procName, NULL);
717 return sa->
array[index];
732 PROCNAME(
"sarrayGetRefcount");
735 return ERROR_INT(
"sa not defined", procName, UNDEF);
751 PROCNAME(
"sarrayChangeRefcount");
754 return ERROR_INT(
"sa not defined", procName, UNDEF);
788 PROCNAME(
"sarrayToString");
791 return (
char *)ERROR_PTR(
"sa not defined", procName, NULL);
825 char *dest, *src, *str;
826 l_int32 n, i, last, size, index, len;
828 PROCNAME(
"sarrayToStringRange");
831 return (
char *)ERROR_PTR(
"sa not defined", procName, NULL);
832 if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2 && addnlflag != 3)
833 return (
char *)ERROR_PTR(
"invalid addnlflag", procName, NULL);
849 return (
char *)ERROR_PTR(
"first not valid", procName, NULL);
854 if (first < 0 || first >= n)
855 return (
char *)ERROR_PTR(
"first not valid", procName, NULL);
856 if (nstrings == 0 || (nstrings > n - first))
857 nstrings = n - first;
858 last = first + nstrings - 1;
862 for (i = first; i <= last; i++) {
864 return (
char *)ERROR_PTR(
"str not found", procName, NULL);
865 size += strlen(str) + 2;
867 if ((dest = (
char *)LEPT_CALLOC(size + 1,
sizeof(
char))) == NULL)
868 return (
char *)ERROR_PTR(
"dest not made", procName, NULL);
872 for (i = first; i <= last; i++) {
875 memcpy(dest + index, src, len);
877 if (addnlflag == 1) {
880 }
else if (addnlflag == 2) {
883 }
else if (addnlflag == 3) {
921 l_int32 i, first, ntot, nstr;
926 PROCNAME(
"sarrayConcatUniformly");
929 return (
SARRAY *)ERROR_PTR(
"sa not defined", procName, NULL);
932 return (
SARRAY *)ERROR_PTR(
"n must be >= 1", procName, NULL);
934 L_ERROR(
"n = %d > ntot = %d\n", procName, n, ntot);
937 if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2 && addnlflag != 3)
938 return (
SARRAY *)ERROR_PTR(
"invalid addnlflag", procName, NULL);
942 for (i = 0, first = 0; i < n; i++) {
975 PROCNAME(
"sarrayJoin");
978 return ERROR_INT(
"sa1 not defined", procName, 1);
980 return ERROR_INT(
"sa2 not defined", procName, 1);
983 for (i = 0; i < n; i++) {
986 L_ERROR(
"failed to add string at i = %d\n", procName, i);
1020 PROCNAME(
"sarrayAppendRange");
1023 return ERROR_INT(
"sa1 not defined", procName, 1);
1025 return ERROR_INT(
"sa2 not defined", procName, 1);
1030 if (end < 0 || end >= n)
1033 return ERROR_INT(
"start > end", procName, 1);
1035 for (i = start; i <= end; i++) {
1066 const char *padstring)
1070 PROCNAME(
"sarrayPadToSameSize");
1073 return ERROR_INT(
"both sa1 and sa2 not defined", procName, 1);
1078 for (i = n1; i < n2; i++)
1080 }
else if (n1 > n2) {
1081 for (i = n2; i < n1; i++)
1127 char emptystring[] =
"";
1128 l_int32 n, i, len, totlen;
1131 PROCNAME(
"sarrayConvertWordsToLines");
1134 return (
SARRAY *)ERROR_PTR(
"sa not defined", procName, NULL);
1140 for (i = 0; i < n; i++) {
1153 }
else if (totlen == 0 && len + 1 > linesize) {
1155 }
else if (totlen + len + 1 > linesize) {
1194 sarraySplitString(
SARRAY *sa,
1196 const char *separators)
1198 char *cstr, *substr, *saveptr;
1200 PROCNAME(
"sarraySplitString");
1203 return ERROR_INT(
"sa not defined", procName, 1);
1205 return ERROR_INT(
"str not defined", procName, 1);
1207 return ERROR_INT(
"separators not defined", procName, 1);
1211 substr =
strtokSafe(cstr, separators, &saveptr);
1214 while ((substr =
strtokSafe(NULL, separators, &saveptr)))
1245 l_int32 n, i, offset, found;
1248 PROCNAME(
"sarraySelectBySubstring");
1251 return (
SARRAY *)ERROR_PTR(
"sain not defined", procName, NULL);
1254 if (!substr || n == 0)
1258 for (i = 0; i < n; i++) {
1261 strlen(substr), &offset, &found);
1295 PROCNAME(
"sarraySelectRange");
1298 return (
SARRAY *)ERROR_PTR(
"sain not defined", procName, NULL);
1299 if (first < 0) first = 0;
1301 if (last <= 0) last = n - 1;
1303 L_WARNING(
"last > n - 1; setting to n - 1\n", procName);
1307 return (
SARRAY *)ERROR_PTR(
"first must be >= last", procName, NULL);
1310 for (i = first; i <= last; i++) {
1358 l_int32 *pactualstart,
1365 l_int32 n, i, offset, found;
1367 PROCNAME(
"sarrayParseRange");
1370 return ERROR_INT(
"sa not defined", procName, 1);
1371 if (!pactualstart || !pend || !pnewstart)
1372 return ERROR_INT(
"not all range addresses defined", procName, 1);
1374 *pactualstart = *pend = *pnewstart = n;
1376 return ERROR_INT(
"substr not defined", procName, 1);
1379 if (start < 0 || start >= n)
1381 for (i = start; i < n; i++) {
1384 strlen(substr), &offset, &found);
1388 if (!found || offset != loc)
break;
1396 *pactualstart = start;
1397 for (i = start + 1; i < n; i++) {
1400 strlen(substr), &offset, &found);
1404 if (found && offset == loc)
break;
1414 for (i = start; i < n; i++) {
1417 strlen(substr), &offset, &found);
1421 if (!found || offset != loc)
break;
1446 PROCNAME(
"sarrayRead");
1449 return (
SARRAY *)ERROR_PTR(
"filename not defined", procName, NULL);
1452 return (
SARRAY *)ERROR_PTR(
"stream not opened", procName, NULL);
1456 return (
SARRAY *)ERROR_PTR(
"sa not read", procName, NULL);
1482 l_int32 i, n, size, index, bufsize, version, ignore, success;
1485 PROCNAME(
"sarrayReadStream");
1488 return (
SARRAY *)ERROR_PTR(
"stream not defined", procName, NULL);
1490 if (fscanf(fp,
"\nSarray Version %d\n", &version) != 1)
1491 return (
SARRAY *)ERROR_PTR(
"not an sarray file", procName, NULL);
1493 return (
SARRAY *)ERROR_PTR(
"invalid sarray version", procName, NULL);
1494 if (fscanf(fp,
"Number of strings = %d\n", &n) != 1)
1495 return (
SARRAY *)ERROR_PTR(
"error on # strings", procName, NULL);
1497 return (
SARRAY *)ERROR_PTR(
"num string ptrs <= 0", procName, NULL);
1498 if (n > MaxPtrArraySize)
1499 return (
SARRAY *)ERROR_PTR(
"too many string ptrs", procName, NULL);
1500 if (n == 0) L_INFO(
"the sarray is empty\n", procName);
1504 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
1506 stringbuf = (
char *)LEPT_CALLOC(bufsize,
sizeof(
char));
1508 for (i = 0; i < n; i++) {
1510 if ((fscanf(fp,
"%d[%d]:", &index, &size) != 2) || (size > (1 << 30))) {
1512 L_ERROR(
"error on string size\n", procName);
1516 if (size > bufsize - 5) {
1517 LEPT_FREE(stringbuf);
1518 bufsize = (l_int32)(1.5 * size);
1519 stringbuf = (
char *)LEPT_CALLOC(bufsize,
sizeof(
char));
1522 if (fread(stringbuf, 1, size + 3, fp) != size + 3) {
1524 L_ERROR(
"error reading string\n", procName);
1528 stringbuf[size + 2] =
'\0';
1532 ignore = fscanf(fp,
"\n");
1535 LEPT_FREE(stringbuf);
1555 PROCNAME(
"sarrayReadMem");
1558 return (
SARRAY *)ERROR_PTR(
"data not defined", procName, NULL);
1560 return (
SARRAY *)ERROR_PTR(
"stream not opened", procName, NULL);
1564 if (!sa) L_ERROR(
"sarray not read\n", procName);
1583 PROCNAME(
"sarrayWrite");
1586 return ERROR_INT(
"filename not defined", procName, 1);
1588 return ERROR_INT(
"sa not defined", procName, 1);
1591 return ERROR_INT(
"stream not opened", procName, 1);
1595 return ERROR_INT(
"sa not written to stream", procName, 1);
1619 PROCNAME(
"sarrayWriteStream");
1622 return ERROR_INT(
"stream not defined", procName, 1);
1628 fprintf(fp,
"Number of strings = %d\n", n);
1629 for (i = 0; i < n; i++) {
1630 len = strlen(sa->
array[i]);
1631 fprintf(fp,
" %d[%d]: %s\n", i, len, sa->
array[i]);
1650 PROCNAME(
"sarrayWriteStderr");
1653 return ERROR_INT(
"sa not defined", procName, 1);
1658 for (i = 0; i < n; i++) {
1659 len = strlen(sa->
array[i]);
1688 PROCNAME(
"sarrayWriteMem");
1690 if (pdata) *pdata = NULL;
1691 if (psize) *psize = 0;
1693 return ERROR_INT(
"&data not defined", procName, 1);
1695 return ERROR_INT(
"&size not defined", procName, 1);
1697 return ERROR_INT(
"sa not defined", procName, 1);
1700 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1701 return ERROR_INT(
"stream not opened", procName, 1);
1705 *psize = *psize - 1;
1707 L_INFO(
"work-around: writing to a temp file\n", procName);
1710 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1712 if ((fp = tmpfile()) == NULL)
1713 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1737 PROCNAME(
"sarrayAppend");
1740 return ERROR_INT(
"filename not defined", procName, 1);
1742 return ERROR_INT(
"sa not defined", procName, 1);
1745 return ERROR_INT(
"stream not opened", procName, 1);
1748 return ERROR_INT(
"sa not appended to stream", procName, 1);
1809 PROCNAME(
"getNumberedPathnamesInDirectory");
1812 return (
SARRAY *)ERROR_PTR(
"dirname not defined", procName, NULL);
1815 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
1853 char *fname, *fullname;
1855 SARRAY *sa, *safiles, *saout;
1857 PROCNAME(
"getSortedPathnamesInDirectory");
1860 return (
SARRAY *)ERROR_PTR(
"dirname not defined", procName, NULL);
1863 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
1868 L_WARNING(
"no files found\n", procName);
1874 first = L_MIN(L_MAX(first, 0), n - 1);
1877 last = L_MIN(first + nfiles - 1, n - 1);
1880 for (i = first; i <= last; i++) {
1882 fullname =
pathJoin(dirname, fname);
1914 l_int32 i, nfiles, num, index;
1917 PROCNAME(
"convertSortedToNumberedPathnames");
1920 return (
SARRAY *)ERROR_PTR(
"sa not defined", procName, NULL);
1929 for (i = nfiles - 1; i >= 0; i--) {
1932 if (num < 0)
continue;
1933 num = L_MIN(num + 1, maxnum);
1943 for (i = 0; i < nfiles; i++) {
1946 if (index < 0 || index >= num)
continue;
1948 if (str[0] !=
'\0') {
1949 L_WARNING(
"\n Multiple files with same number: %d\n",
1992 char dir[PATH_MAX + 1];
1993 char *realdir, *stat_path, *ignore;
1997 struct dirent *pdirentry;
2001 PROCNAME(
"getFilenamesInDirectory");
2004 return (
SARRAY *)ERROR_PTR(
"dirname not defined", procName, NULL);
2005 if (dirname[0] ==
'\0')
2006 return (
SARRAY *)ERROR_PTR(
"dirname is empty", procName, NULL);
2022 ignore = realpath(dirname, dir);
2024 return (
SARRAY *)ERROR_PTR(
"dir not made", procName, NULL);
2026 if ((pdir = opendir(realdir)) == NULL) {
2028 return (
SARRAY *)ERROR_PTR(
"pdir not opened", procName, NULL);
2032 while ((pdirentry = readdir(pdir))) {
2034 stat_ret = fstatat(dfd, pdirentry->d_name, &st, 0);
2036 size = strlen(realdir) + strlen(pdirentry->d_name) + 2;
2037 if (size > PATH_MAX) {
2038 L_ERROR(
"size = %zu too large; skipping\n", procName, size);
2041 stat_path = (
char *)LEPT_CALLOC(size, 1);
2042 snprintf(stat_path, size,
"%s/%s", realdir, pdirentry->d_name);
2043 stat_ret = stat(stat_path, &st);
2044 LEPT_FREE(stat_path);
2046 if (stat_ret == 0 && S_ISDIR(st.st_mode))
2058 #include <windows.h>
2065 HANDLE hFind = INVALID_HANDLE_VALUE;
2067 WIN32_FIND_DATAA ffd;
2069 PROCNAME(
"getFilenamesInDirectory");
2072 return (
SARRAY *)ERROR_PTR(
"dirname not defined", procName, NULL);
2078 if (strlen(pszDir) + 1 > MAX_PATH) {
2080 return (
SARRAY *)ERROR_PTR(
"dirname is too long", procName, NULL);
2085 return (
SARRAY *)ERROR_PTR(
"safiles not made", procName, NULL);
2088 hFind = FindFirstFileA(pszDir, &ffd);
2089 if (INVALID_HANDLE_VALUE == hFind) {
2092 return (
SARRAY *)ERROR_PTR(
"hFind not opened", procName, NULL);
2095 while (FindNextFileA(hFind, &ffd) != 0) {
2096 if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
#define SARRAY_VERSION_NUMBER
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
NUMA * numaGetUniformBinSizes(l_int32 ntotal, l_int32 nbins)
numaGetUniformBinSizes()
SARRAY * sarraySelectBySubstring(SARRAY *sain, const char *substr)
sarraySelectBySubstring()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
SARRAY * sarrayRead(const char *filename)
sarrayRead()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_ok sarrayWriteStderr(SARRAY *sa)
sarrayWriteStderr()
static const l_int32 InitialPtrArraySize
l_ok sarrayJoin(SARRAY *sa1, SARRAY *sa2)
sarrayJoin()
SARRAY * sarraySelectRange(SARRAY *sain, l_int32 first, l_int32 last)
sarraySelectRange()
char ** sarrayGetArray(SARRAY *sa, l_int32 *pnalloc, l_int32 *pn)
sarrayGetArray()
char * sarrayToStringRange(SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag)
sarrayToStringRange()
l_ok sarrayPadToSameSize(SARRAY *sa1, SARRAY *sa2, const char *padstring)
sarrayPadToSameSize()
SARRAY * getFilenamesInDirectory(const char *dirname)
getFilenamesInDirectory()
l_ok sarrayReplaceString(SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag)
sarrayReplaceString()
l_ok sarrayAppend(const char *filename, SARRAY *sa)
sarrayAppend()
SARRAY * sarrayConvertWordsToLines(SARRAY *sa, l_int32 linesize)
sarrayConvertWordsToLines()
SARRAY * sarrayReadStream(FILE *fp)
sarrayReadStream()
SARRAY * sarrayClone(SARRAY *sa)
sarrayClone()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
SARRAY * sarrayCreateWordsFromString(const char *string)
sarrayCreateWordsFromString()
SARRAY * sarrayCreateLinesFromString(const char *string, l_int32 blankflag)
sarrayCreateLinesFromString()
l_ok sarrayClear(SARRAY *sa)
sarrayClear()
char * sarrayRemoveString(SARRAY *sa, l_int32 index)
sarrayRemoveString()
static l_int32 sarrayExtendArray(SARRAY *sa)
sarrayExtendArray()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
SARRAY * sarrayReadMem(const l_uint8 *data, size_t size)
sarrayReadMem()
SARRAY * sarrayCreateInitialized(l_int32 n, const char *initstr)
sarrayCreateInitialized()
l_int32 sarrayGetRefcount(SARRAY *sa)
sarrayGetRefCount()
l_ok sarrayWrite(const char *filename, SARRAY *sa)
sarrayWrite()
l_int32 sarrayParseRange(SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc)
sarrayParseRange()
l_ok sarrayChangeRefcount(SARRAY *sa, l_int32 delta)
sarrayChangeRefCount()
char * sarrayToString(SARRAY *sa, l_int32 addnlflag)
sarrayToString()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
SARRAY * sarrayConcatUniformly(SARRAY *sa, l_int32 n, l_int32 addnlflag)
sarrayConcatUniformly()
l_ok sarrayWriteStream(FILE *fp, SARRAY *sa)
sarrayWriteStream()
l_ok sarrayWriteMem(l_uint8 **pdata, size_t *psize, SARRAY *sa)
sarrayWriteMem()
SARRAY * convertSortedToNumberedPathnames(SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum)
convertSortedToNumberedPathnames()
l_ok sarrayAppendRange(SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end)
sarrayAppendRange()
SARRAY * sarrayCopy(SARRAY *sa)
sarrayCopy()
SARRAY * getNumberedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum)
getNumberedPathnamesInDirectory()
SARRAY * sarraySort(SARRAY *saout, SARRAY *sain, l_int32 sortorder)
sarraySort()
void lept_stderr(const char *fmt,...)
lept_stderr()
char * stringNew(const char *src)
stringNew()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
char * strtokSafe(char *cstr, const char *seps, char **psaveptr)
strtokSafe()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
char * pathJoin(const char *dir, const char *fname)
pathJoin()
char * genPathname(const char *dir, const char *fname)
genPathname()
l_ok convertSepCharsInPath(char *path, l_int32 type)
convertSepCharsInPath()
char * stringJoin(const char *src1, const char *src2)
stringJoin()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
FILE * fopenWriteWinTempfile(void)
fopenWriteWinTempfile()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_int32 extractNumberFromFilename(const char *fname, l_int32 numpre, l_int32 numpost)
extractNumberFromFilename()
l_ok arrayFindSequence(const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen, l_int32 *poffset, l_int32 *pfound)
arrayFindSequence()