summaryrefslogtreecommitdiff
path: root/source/luametatex/source/utilities/auxfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/utilities/auxfile.h')
-rw-r--r--source/luametatex/source/utilities/auxfile.h166
1 files changed, 166 insertions, 0 deletions
diff --git a/source/luametatex/source/utilities/auxfile.h b/source/luametatex/source/utilities/auxfile.h
new file mode 100644
index 000000000..19a4815c2
--- /dev/null
+++ b/source/luametatex/source/utilities/auxfile.h
@@ -0,0 +1,166 @@
+/*
+ See license.txt in the root of this project.
+*/
+
+# ifndef LMT_UTILITIES_FILE_H
+# define LMT_UTILITIES_FILE_H
+
+/*tex
+
+ We have to deal with wide characters on windows when it comes to filenames. The same is true for
+ the commandline and environment variables. Basically we go from utf8 to wide and back.
+
+ \starttyping
+ libraries/zlib/crc32.c : fopen -> minimalistic, goes via lua anyway
+ libraries/zlib/trees.c : fopen -> minimalistic, goes via lua anyway
+ libraries/zlib/zutil.h : fopen -> minimalistic, goes via lua anyway
+
+ lua/llualib.c : fopen -> utf8_fopen
+ lua/lenginelib.c : fopen -> utf8_fopen
+
+ luacore/lua54/src/lauxlib.c : fopen -> see below
+ luacore/lua54/src/liolib.c : fopen -> see below
+ luacore/lua54/src/loadlib.c : fopen -> see below
+
+ luaffi/call.c : fopen -> not used
+
+ mp/mpw/mp.w : fopen -> overloaded by callback
+
+ libraries/pplib/ppload.c : fopen -> will be abstraction (next pplib)
+
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+ libraries/pplib/util/utiliof.c : fopen -> not used
+
+ tex/texfileio.c 12: : fopen -> utf8_fopen
+ \stoptyping
+
+ Furthermore:
+
+ \starttyping
+ - system commands (execute) : done
+ - popen : done
+
+ - lua rename : done
+ - lua remove : done
+
+ - command line argv : done
+ - lua setenv : done
+ - lua getenv : done
+
+ - lfs attributes : done
+ - lfs chdir : done
+ - lfs currentdir : done
+ - lfs dir : done
+ - lfs mkdir : done
+ - lfs rmdir : done
+ - lfs touch : done
+ - lfs link : done
+ - lfs symlink : done
+ - lfs setexecutable : done (needs testing)
+ - lfs isdir : done
+ - lfs isfile : done
+ - lfs iswriteabledir : done
+ - lfs iswriteablefile : done
+ - lfs isreadabledir : done
+ - lfs isreadablefile : done
+ \stoptyping
+
+ Kind of tricky because quite some code (indirectness):
+
+ \starttyping
+ - lua load : via overload ?
+ - lua dofile : via overload -> loadstring
+ - lua require : via overload ?
+ \stoptyping
+
+ So: do we patch lua (fopen) or just copy? We can actually assume flat ascii files for libraries
+ and such so there is no real need unless we load job related files.
+
+ I will probably reshuffle some code and maybe more some more here; once I'm sure all works out
+ well.
+
+*/
+
+# ifdef _WIN32
+
+ # include <windows.h>
+ # include <ctype.h>
+ # include <stdio.h>
+
+ extern LPWSTR aux_utf8_to_wide (const char *utf8str);
+ extern char *aux_utf8_from_wide (LPWSTR widestr);
+
+ extern FILE *aux_utf8_fopen (const char *path, const char *mode);
+ extern FILE *aux_utf8_popen (const char *path, const char *mode);
+ extern int aux_utf8_system (const char *cmd);
+ extern int aux_utf8_remove (const char *name);
+ extern int aux_utf8_rename (const char *oldname, const char *newname);
+ extern int aux_utf8_setargv (char * **av, char **argv, int argc);
+ extern char *aux_utf8_getownpath (const char *file);
+
+# else
+
+ # define aux_utf8_fopen fopen
+ # define aux_utf8_popen popen
+ # define aux_utf8_system system
+ # define aux_utf8_remove remove
+ # define aux_utf8_rename rename
+
+ extern int aux_utf8_setargv (char * **av, char **argv, int argc);
+ extern char *aux_utf8_getownpath (const char *file);
+
+ # include <libgen.h>
+
+# endif
+
+# ifdef _WIN32
+
+ extern char *aux_basename (const char *name);
+ extern char *aux_dirname (const char *name);
+
+# else
+
+ # define aux_basename basename
+ # define aux_dirname dirname
+
+# endif
+
+extern int aux_is_readable (const char *filename);
+
+/*tex
+
+ We support unix and windows. In fact, we could stick to |/| only. When
+ scanning filenames entered in \TEX\ we can actually enforce a |/| as
+ convention.
+
+*/
+
+# ifndef IS_DIR_SEP
+ # ifdef _WIN32
+ # define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
+ # else
+ # define IS_DIR_SEP(ch) ((ch) == '/')
+ # endif
+# endif
+
+# ifndef R_OK
+ # define F_OK 0x0
+ # define W_OK 0x2
+ # define R_OK 0x4
+# endif
+
+# ifndef S_ISREG
+ # define S_ISREG(mode) (mode & _S_IFREG)
+# endif
+
+# endif