/* win32lib.h: bits and pieces for win32 and msvc.
Copyright 2006, 2010-2016 Akira Kakuto.
Copyright 1996, 1997, 1998, 1999 Fabrice Popineau.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, see . */
#ifndef KPATHSEA_WIN32LIB_H
#define KPATHSEA_WIN32LIB_H
#ifndef KPSE_COMPAT_API
#define KPSE_COMPAT_API 1
#endif
#pragma warning( disable : 4007 4096 4018 4244 )
#include
#include
/*
* Define symbols to identify the version of Unix this is.
* Define all the symbols that apply correctly.
*/
#ifndef DOSISH
#define DOSISH
#endif
#ifndef MAXPATHLEN
#define MAXPATHLEN _MAX_PATH
#endif
#define HAVE_DUP2 1
#define HAVE_RENAME 1
#define HAVE_RMDIR 1
#define HAVE_MKDIR 1
#define HAVE_GETHOSTNAME 1
#define HAVE_RANDOM 1
#define USE_UTIME 1
#define HAVE_MOUSE 1
#define HAVE_TZNAME 1
/* These have to be defined because our compilers treat __STDC__ as being
defined (most of them anyway). */
#if !defined(__cplusplus)
#define access _access
#define alloca _alloca
#define chdir _chdir
#define chmod _chmod
#define close _close
#define creat _creat
#define daylight _daylight
#define dup _dup
#define dup2 _dup2
#define execlp _execlp
#define execvp _execvp
#define fcloseall _fcloseall
#define fdopen _fdopen
#define fileno _fileno
#define flushall _flushall
#define fstat _fstat
#define ftime _ftime
#define getpid _getpid
#define getcwd _getcwd
#define inline __inline
#define isascii __isascii
#define isatty _isatty
#define itoa _itoa
#define link _link
#define lseek _lseek
#define memicmp _memicmp
#define mktemp _mktemp
#define open _open
#define putenv _putenv
#define read _read
#define rmdir _rmdir
#define setmode _setmode
#define spawnlp _spawnlp
#define stat _stat
#define stricmp _stricmp
#define strdup _strdup
#define strlwr _strlwr
#define strnicmp _strnicmp
#define tempnam _tempnam
#define timeb _timeb
#define timezone _timezone
#define unlink _unlink
#define umask _umask
#define utime _utime
#define write _write
#endif /* !__cplusplus */
#define getwd(dir) GetCurrentDirectory(MAXPATHLEN, dir)
#ifdef strcasecmp
#undef strcasecmp
#endif
#ifdef strncasecmp
#undef strncasecmp
#endif
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#ifndef S_IFMT
#define S_IFMT _S_IFMT
#endif
#ifndef S_IFDIR
#define S_IFDIR _S_IFDIR
#endif
#ifndef S_IFCHR
#define S_IFCHR _S_IFCHR
#endif
#ifndef S_IFIFO
#define S_IFIFO _S_IFIFO
#endif
#ifndef S_IFREG
#define S_IFREG _S_IFREG
#endif
#ifndef S_IREAD
#define S_IREAD _S_IREAD
#endif
#ifndef S_IWRITE
#define S_IWRITE _S_IWRITE
#endif
#define S_IEXEC _S_IEXEC
#ifndef S_IXUSR
#define S_IXUSR _S_IEXEC
#endif
#ifndef S_IXGRP
#define S_IXGRP _S_IEXEC
#endif
#ifndef S_IXOTH
#define S_IXOTH _S_IEXEC
#endif
#ifndef S_IRUSR
#define S_IRUSR _S_IREAD
#endif
#ifndef S_IWUSR
#define S_IWUSR _S_IWRITE
#endif
#ifndef S_IROTH
#define S_IROTH _S_IREAD
#endif
#ifndef S_IWOTH
#define S_IWOTH _S_IWRITE
#endif
#ifndef S_IRGRP
#define S_IRGRP _S_IREAD
#endif
#ifndef S_IWGRP
#define S_IWGRP _S_IWRITE
#endif
#ifndef O_RDWR
#define O_RDWR _O_RDWR
#endif
#ifndef O_CREAT
#define O_CREAT _O_CREAT
#endif
#ifndef O_TRUNC
#define O_TRUNC _O_TRUNC
#endif
#ifndef O_RDONLY
#define O_RDONLY _O_RDONLY
#endif
#ifndef O_WRONLY
#define O_WRONLY _O_WRONLY
#endif
#ifndef O_APPEND
#define O_APPEND _O_APPEND
#endif
#ifndef O_TEXT
#define O_TEXT _O_TEXT
#endif
#ifndef O_BINARY
#define O_BINARY _O_BINARY
#endif
#ifndef O_EXCL
#define O_EXCL _O_EXCL
#endif
#if defined (S_IFBLK) && !defined (S_ISBLK)
#define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */
#endif
#if defined (S_IFCHR) && !defined (S_ISCHR)
#define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */
#endif
#if defined (S_IFDIR) && !defined (S_ISDIR)
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */
#endif
#if defined (S_IFREG) && !defined (S_ISREG)
#define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */
#endif
#if defined (S_IFIFO) && !defined (S_ISFIFO)
#define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */
#endif
#if defined (S_IFLNK) && !defined (S_ISLNK)
#define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */
#endif
#if defined (S_IFSOCK) && !defined (S_ISSOCK)
#define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */
#endif
/* Define this so that winsock.h definitions don't get included when
windows.h is... For this to have proper effect, config.h must
always be included before windows.h. */
#if !defined(_WINSOCKAPI_) && !defined(WWW_WIN_DLL)
#define _WINSOCKAPI_ 1
#endif
#define boolean saved_boolean
#include
#undef boolean
#include
/* Defines size_t and alloca (). */
#include
/* For proper declaration of environ. */
#include
#include
#include
#include
#include
/* For _getcwd. */
#include
/* Web2C takes care of ensuring that these are defined. */
#ifdef max
#undef max
#undef min
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern KPSEDLL double win32_floor (double x);
extern KPSEDLL FILE *win32_popen (const char *cmd, const char *mode);
extern KPSEDLL int win32_pclose (FILE *f);
extern KPSEDLL struct passwd *kpathsea_getpwnam (kpathsea kpse, char *name);
extern KPSEDLL int win32_system(const char *cmd);
extern KPSEDLL void kpathsea_init_user_info (kpathsea kpse);
#if defined (KPSE_COMPAT_API)
extern KPSEDLL struct passwd *getpwnam (char *name);
#endif /* KPSE_COMPAT_API */
#define system(p) win32_system(p)
#define popen(cmd, mode) win32_popen(cmd, mode)
#define pclose(file) win32_pclose(file)
/* Functions for WIN32 */
extern KPSEDLL FILE *popen(const char * str, const char * str2);
extern KPSEDLL int pclose(FILE * f);
extern KPSEDLL int system(const char * cmd);
extern KPSEDLL void texlive_gs_init(void);
extern KPSEDLL int kpathsea_getlongpath (kpathsea kpse, char *output, char *input, int len);
extern KPSEDLL char *kpathsea_get_home_directory (kpathsea kpse);
#if defined (KPSE_COMPAT_API)
extern KPSEDLL int getlongpath (char *output, char *input, int len);
extern KPSEDLL char *get_home_directory (void);
#endif
#define off_t __int64
#define xfseeko xfseek64
#define xftello xftell64
#ifdef __cplusplus
}
#endif
#endif /* not KPATHSEA_WIN32LIB_H */