summaryrefslogtreecommitdiff
path: root/Build/source/texk/ttf2pk/emtexdir.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/ttf2pk/emtexdir.c')
-rw-r--r--Build/source/texk/ttf2pk/emtexdir.c405
1 files changed, 0 insertions, 405 deletions
diff --git a/Build/source/texk/ttf2pk/emtexdir.c b/Build/source/texk/ttf2pk/emtexdir.c
deleted file mode 100644
index a38686aa7eb..00000000000
--- a/Build/source/texk/ttf2pk/emtexdir.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* emtexdir.c -- written by Eberhard Mattes, donated to the public domain */
-
-#if defined (__EMX__)
-#include <emx/syscalls.h>
-#else
-#include "emdir.h"
-#endif
-#if defined(DJGPP) || defined(GO32)
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <io.h>
-#include "emtexdir.h"
-
-#define FALSE 0
-#define TRUE 1
-
-void (*emtex_dir_find_callback)(const char *name, int ok) = NULL;
-
-static int setup_add (struct emtex_dir *dst, const char *path)
-{
- char *p;
-
- if (dst->used >= dst->alloc)
- {
- dst->alloc += 8;
- dst->list = realloc (dst->list, dst->alloc * sizeof (*dst->list));
- if (dst->list == NULL)
- return (FALSE);
- }
- p = strdup (path);
- if (p == NULL)
- return (FALSE);
- dst->list[dst->used++] = p;
- return (TRUE);
-}
-
-
-static int setup_subdir (struct emtex_dir *dst, char *path, size_t add,
- unsigned flags, int recurse)
-{
- int ok, i, end, len;
-#if defined (__EMX__)
- struct _find find;
-#else
- struct ll_findbuffer find;
-#endif
-
- i = dst->used;
- strcpy (path + add, "*.*");
-#if defined (__EMX__)
- ok = __findfirst (path, 0x10, &find) == 0;
-#else
- ok = ll_findfirst (path, 0x10, &find);
-#endif
- while (ok)
- {
- if ((find.attr & 0x10)
- && !(strcmp (find.name, ".") == 0 || strcmp (find.name, "..") == 0))
- {
- len = strlen (find.name);
- memcpy (path + add, find.name, len);
- path[add+len] = '\\';
- path[add+len+1] = 0;
- if (!setup_add (dst, path))
- return (FALSE);
- }
-#if defined (__EMX__)
- ok = __findnext (&find) == 0;
-#else
- ok = ll_findnext (&find);
-#endif
- }
- if (recurse)
- {
- end = dst->used;
- while (i < end)
- {
- strcpy (path, dst->list[i]);
- if (!setup_subdir (dst, path, strlen (path), flags, TRUE))
- return (FALSE);
- ++i;
- }
- }
- return (TRUE);
-}
-
-
-static int setup_dir (struct emtex_dir *dst, char *path,
- const char *base_dir, size_t base_dir_len,
- const char *sub_dir,
- unsigned flags)
-{
- size_t i, len;
-
- memcpy (path, base_dir, base_dir_len);
- i = base_dir_len;
- if ((flags & EDS_BANG) && sub_dir == NULL)
- {
- flags &= ~(EDS_ONESUBDIR|EDS_ALLSUBDIR);
- if (i >= 2 && path[i-1] == '!' && path[i-2] == '!')
- {
- flags |= EDS_ALLSUBDIR;
- i -= 2;
- }
- else if (i >= 1 && path[i-1] == '!')
- {
- flags |= EDS_ONESUBDIR;
- --i;
- }
- }
- if (sub_dir != NULL && *sub_dir != 0)
- {
- if (i != 0 && path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\')
- path[i++] = '\\';
- len = strlen (sub_dir);
- memcpy (path+i, sub_dir, len);
- i += len;
- }
- if (path[i-1] != ':' && path[i-1] != '/' && path[i-1] != '\\')
- path[i++] = '\\';
- path[i] = 0;
- if (!setup_add (dst, path))
- return (FALSE);
- if (flags & EDS_ALLSUBDIR)
- return (setup_subdir (dst, path, i, flags, TRUE));
- else if (flags & EDS_ONESUBDIR)
- return (setup_subdir (dst, path, i, flags, FALSE));
- else
- return (TRUE);
-}
-
-
-int setup_list (struct emtex_dir *dst, char *path,
- const char *list, unsigned flags)
-{
- const char *end;
- size_t i;
-
- for (;;)
- {
- while (*list == ' ' || *list == '\t')
- ++list;
- if (*list == 0)
- return (TRUE);
- end = list;
- while (*end != 0 && *end != ';')
- ++end;
- i = end - list;
- while (i > 0 && (list[i-1] == ' ' || list[i-1] == '\t'))
- --i;
- if (i != 0 && !setup_dir (dst, path, list, i, NULL, flags))
- return (FALSE);
- if (*end == 0)
- return (TRUE);
- list = end + 1;
- }
-}
-
-
-int emtex_dir_setup (struct emtex_dir *ed, const char *env, const char *dir,
- unsigned flags)
-{
- const char *val;
- char path[260];
-
- ed->alloc = 0;
- ed->used = 0;
- ed->list = NULL;
- if (env != NULL && (val = getenv (env)) != NULL)
- return (setup_list (ed, path, val, flags));
- else if ((val = getenv ("EMTEXDIR")) != NULL)
- return (setup_dir (ed, path, val, strlen (val), dir, flags));
- else
- return (setup_dir (ed, path, "\\emtex", 6, dir, flags));
-}
-
-
-static void pretty (char *path, unsigned flags)
-{
- char *p;
-
- if (flags & EDF_FSLASH)
- for (p = path; *p != 0; ++p)
- if (*p == '\\')
- *p = '/';
-}
-
-
-#define ADDCHAR(C) \
- if (dst_size < 1) return (EDT_TOOLONG); \
- *dst++ = (C); --dst_size
-
-int emtex_dir_trunc (char *dst, size_t dst_size, const char *src,
- unsigned flags, int method)
-{
- int len, truncated, dot;
-
- if (src[0] != 0 && src[1] == ':')
- {
- ADDCHAR (src[0]);
- ADDCHAR (src[1]);
- src += 2;
- }
-
- truncated = FALSE; dot = FALSE; len = 0;
- for (;;)
- {
- switch (*src)
- {
- case 0:
- ADDCHAR (0);
- return (truncated ? EDT_CHANGED : EDT_UNCHANGED);
-
- case ':':
- return (EDT_INVALID);
-
- case '/':
- case '\\':
- ADDCHAR (*src);
- len = 0; dot = FALSE;
- break;
-
- case '.':
- if (dot)
- return (EDT_INVALID);
- ADDCHAR (*src);
-
- /* ".." is allowed -- don't return EDT_INVALID for the next
- dot. */
-
- if (!(len == 0 && src[1] == '.'
- && (src[2] == 0 || src[2] == '/' || src[2] == '\\')))
- {
- len = 0; dot = TRUE;
- }
- break;
-
- default:
- if (dot && len == 3)
- truncated = TRUE;
- else if (!dot && len == 8)
- {
- truncated = TRUE;
- if (method == 0)
- {
- dst[-3] = dst[-2];
- dst[-2] = dst[-1];
- dst[-1] = *src;
- }
- }
- else
- {
- ADDCHAR (*src);
- ++len;
- }
- break;
- }
- ++src;
- }
-}
-
-
-static int find2 (const char *name, unsigned flags)
-{
- int ok;
-
- ok = (access (name, 4) == 0);
- if (flags & EDF_TRACE)
- emtex_dir_find_callback (name, ok);
- return (ok);
-}
-
-
-static int find1 (char *path, size_t path_size, const char *dir,
- const char *fname, unsigned flags)
-{
- char buf[260];
- int method, rc;
- size_t len, tmp;
-
- len = 0;
- if (dir != NULL)
- {
- tmp = strlen (dir);
- if (tmp >= sizeof (buf))
- return (FALSE);
- memcpy (buf, dir, tmp);
- len = tmp;
- }
- tmp = strlen (fname);
- if (len + tmp >= sizeof (buf))
- return (FALSE);
- memcpy (buf + len, fname, tmp + 1);
- len += tmp;
-#if 0 /* wkim */
-/* disabled for Win95's long file name support */
-/* -- Wonkoo Kim (wkim+@pitt.edu), May 18, 1997 */
- if (_osmode == DOS_MODE)
- {
- rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_5_PLUS_3);
- if ((rc == EDT_UNCHANGED || rc == EDT_CHANGED) && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- rc = emtex_dir_trunc (path, path_size, buf, flags, EDT_8);
- if (rc == EDT_CHANGED && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- return (FALSE);
- }
- else
-#endif /* wkim */
- {
- if (len < path_size && find2 (buf, flags))
- {
- memcpy (path, buf, len + 1);
- pretty (path, flags);
- return (TRUE);
- }
- for (method = 0; method < 2; ++method)
- {
- rc = emtex_dir_trunc (path, path_size, buf, flags, method);
- if (rc == EDT_CHANGED && find2 (path, flags))
- {
- pretty (path, flags);
- return (TRUE);
- }
- }
- return (FALSE);
- }
-}
-
-
-int emtex_dir_find (char *path, size_t path_size,
- const struct emtex_dir *ed,
- const char *fname, unsigned flags)
-{
- int i, absp;
- const char *p;
-
- absp = FALSE;
- for (p = fname; *p != 0; ++p)
- if (*p == ':' || *p == '/' || *p == '\\')
- {
- absp = TRUE;
- break;
- }
-
- if (absp)
- return (find1 (path, path_size, NULL, fname, flags));
-
- if ((flags & EDF_CWD) && find1 (path, path_size, NULL, fname, flags))
- return (TRUE);
-
- for (i = 0; i < ed->used; ++i)
- if (find1 (path, path_size, ed->list[i], fname, flags))
- return (TRUE);
- return (FALSE);
-}
-
-
-#if defined (TEST)
-
-#include <stdio.h>
-
-int main (int argc, char *argv[])
-{
- struct emtex_dir ed;
- int i;
- unsigned flags1, flags2;
- char path[260];
-
- if (argc != 6)
- {
- puts ("Usage: emtexdir <flags> <flags> <env> <dir> <fname>");
- return (1);
- }
-
- flags1 = (unsigned)strtol (argv[1], NULL, 0);
- flags2 = (unsigned)strtol (argv[2], NULL, 0);
-
- if (!emtex_dir_setup (&ed, argv[3], argv[4], flags1))
- {
- fputs ("emtex_dir_setup failed\n", stderr);
- return (2);
- }
-
- printf ("Directories:\n");
- for (i = 0; i < ed.used; ++i)
- printf (" %s\n", ed.list[i]);
-
- if (!emtex_dir_find (path, sizeof (path), &ed, argv[5], flags2))
- puts ("File not found");
- else
- printf ("Path: %s\n", path);
- return (0);
-}
-
-#endif