198 lines
5.5 KiB
Plaintext
198 lines
5.5 KiB
Plaintext
/* ACC -- Automatic Compiler Configuration
|
|
|
|
Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer
|
|
All Rights Reserved.
|
|
|
|
This software is a copyrighted work licensed under the terms of
|
|
the GNU General Public License. Please consult the file "ACC_LICENSE"
|
|
for details.
|
|
|
|
Markus F.X.J. Oberhumer
|
|
<markus@oberhumer.com>
|
|
http://www.oberhumer.com/
|
|
*/
|
|
|
|
|
|
#define __ACCLIB_MISC_CH_INCLUDED 1
|
|
#if !defined(ACCLIB_PUBLIC)
|
|
# define ACCLIB_PUBLIC(r,f) r __ACCLIB_FUNCNAME(f)
|
|
#endif
|
|
|
|
|
|
/*************************************************************************
|
|
// wrap misc
|
|
**************************************************************************/
|
|
|
|
ACCLIB_PUBLIC(acclib_handle_t, acc_get_osfhandle) (int fd)
|
|
{
|
|
if (fd < 0)
|
|
return -1;
|
|
#if (ACC_OS_CYGWIN)
|
|
return get_osfhandle(fd);
|
|
#elif (ACC_OS_EMX && defined(__RSXNT__))
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__)
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_WIN32 || ACC_OS_WIN64)
|
|
# if (ACC_CC_WATCOMC && (__WATCOMC__ < 1000))
|
|
return -1; /* FIXME */
|
|
# elif (ACC_CC_WATCOMC && (__WATCOMC__ < 1100))
|
|
return _os_handle(fd);
|
|
# else
|
|
return _get_osfhandle(fd);
|
|
# endif
|
|
#else
|
|
return fd;
|
|
#endif
|
|
}
|
|
|
|
|
|
ACCLIB_PUBLIC(int, acc_set_binmode) (int fd, int binary)
|
|
{
|
|
#if (ACC_OS_TOS && defined(__MINT__))
|
|
FILE* fp; int old_binary;
|
|
if (fd == STDIN_FILENO) fp = stdin;
|
|
else if (fd == STDOUT_FILENO) fp = stdout;
|
|
else if (fd == STDERR_FILENO) fp = stderr;
|
|
else return -1;
|
|
old_binary = fp->__mode.__binary;
|
|
__set_binmode(fp, binary ? 1 : 0);
|
|
return old_binary ? 1 : 0;
|
|
#elif (ACC_OS_TOS)
|
|
ACC_UNUSED(fd); ACC_UNUSED(binary);
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_DOS16 && (ACC_CC_AZTECC || ACC_CC_PACIFICC))
|
|
ACC_UNUSED(fd); ACC_UNUSED(binary);
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
|
|
int r; unsigned old_flags = __djgpp_hwint_flags;
|
|
ACC_COMPILE_TIME_ASSERT(O_BINARY > 0)
|
|
ACC_COMPILE_TIME_ASSERT(O_TEXT > 0)
|
|
if (fd < 0) return -1;
|
|
r = setmode(fd, binary ? O_BINARY : O_TEXT);
|
|
if ((old_flags & 1u) != (__djgpp_hwint_flags & 1u))
|
|
__djgpp_set_ctrl_c(!(old_flags & 1));
|
|
if (r == -1) return -1;
|
|
return (r & O_TEXT) ? 0 : 1;
|
|
#elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__)
|
|
if (fd < 0) return -1;
|
|
ACC_UNUSED(binary);
|
|
return 1;
|
|
#elif (ACC_OS_DOS32 && ACC_CC_HIGHC)
|
|
FILE* fp; int r;
|
|
if (fd == fileno(stdin)) fp = stdin;
|
|
else if (fd == fileno(stdout)) fp = stdout;
|
|
else if (fd == fileno(stderr)) fp = stderr;
|
|
else return -1;
|
|
r = _setmode(fp, binary ? _BINARY : _TEXT);
|
|
if (r == -1) return -1;
|
|
return (r & _BINARY) ? 1 : 0;
|
|
#elif (ACC_OS_WIN32 && ACC_CC_MWERKS) && defined(__MSL__)
|
|
ACC_UNUSED(fd); ACC_UNUSED(binary);
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_CYGWIN && (ACC_CC_GNUC < 0x025a00ul))
|
|
ACC_UNUSED(fd); ACC_UNUSED(binary);
|
|
return -1; /* FIXME */
|
|
#elif (ACC_OS_CYGWIN || ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_EMX || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
|
|
int r;
|
|
#if !defined(ACC_CC_ZORTECHC)
|
|
ACC_COMPILE_TIME_ASSERT(O_BINARY > 0)
|
|
#endif
|
|
ACC_COMPILE_TIME_ASSERT(O_TEXT > 0)
|
|
if (fd < 0) return -1;
|
|
r = setmode(fd, binary ? O_BINARY : O_TEXT);
|
|
if (r == -1) return -1;
|
|
return (r & O_TEXT) ? 0 : 1;
|
|
#else
|
|
if (fd < 0) return -1;
|
|
ACC_UNUSED(binary);
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
|
|
ACCLIB_PUBLIC(int, acc_isatty) (int fd)
|
|
{
|
|
/* work around library implementations that think that
|
|
* any character device like `nul' is a tty */
|
|
if (fd < 0)
|
|
return 0;
|
|
#if (ACC_OS_DOS16 && !defined(ACC_CC_AZTECC))
|
|
{
|
|
union REGS ri, ro;
|
|
ri.x.ax = 0x4400; ri.x.bx = fd;
|
|
int86(0x21, &ri, &ro);
|
|
if ((ro.x.cflag & 1) == 0) /* if carry flag not set */
|
|
if ((ro.x.ax & 0x83) != 0x83)
|
|
return 0;
|
|
}
|
|
#elif (ACC_OS_DOS32 && ACC_CC_WATCOMC)
|
|
{
|
|
union REGS ri, ro;
|
|
ri.w.ax = 0x4400; ri.w.bx = (unsigned short) fd;
|
|
int386(0x21, &ri, &ro);
|
|
if ((ro.w.cflag & 1) == 0) /* if carry flag not set */
|
|
if ((ro.w.ax & 0x83) != 0x83)
|
|
return 0;
|
|
}
|
|
#elif (ACC_HAVE_WINDOWS_H)
|
|
{
|
|
acclib_handle_t h = __ACCLIB_FUNCNAME(acc_get_osfhandle)(fd);
|
|
if ((HANDLE)h != INVALID_HANDLE_VALUE)
|
|
{
|
|
DWORD d = 0;
|
|
if (GetConsoleMode((HANDLE)h, &d) == 0)
|
|
return 0; /* GetConsoleMode failed -> not a tty */
|
|
}
|
|
}
|
|
#endif
|
|
return (isatty(fd)) ? 1 : 0;
|
|
}
|
|
|
|
|
|
ACCLIB_PUBLIC(int, acc_mkdir) (const char* name, unsigned mode)
|
|
{
|
|
#if (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC))
|
|
ACC_UNUSED(mode);
|
|
return Dcreate(name);
|
|
#elif (ACC_OS_DOS32 && ACC_CC_GNUC) && defined(__DJGPP__)
|
|
return mkdir(name, mode);
|
|
#elif (ACC_OS_WIN32 && ACC_CC_GNUC) && defined(__PW32__)
|
|
return mkdir(name, mode);
|
|
#elif (ACC_OS_DOS16 || ACC_OS_DOS32 || ACC_OS_OS2 || ACC_OS_OS216 || ACC_OS_WIN16 || ACC_OS_WIN32 || ACC_OS_WIN64)
|
|
ACC_UNUSED(mode);
|
|
# if (ACC_CC_HIGHC || ACC_CC_PACIFICC)
|
|
return mkdir((char*) name);
|
|
# else
|
|
return mkdir(name);
|
|
# endif
|
|
#else
|
|
return mkdir(name, mode);
|
|
#endif
|
|
}
|
|
|
|
|
|
ACCLIB_PUBLIC(acc_int32l_t, acc_muldiv32) (acc_int32l_t a, acc_int32l_t b, acc_int32l_t x)
|
|
{
|
|
acc_int32l_t r = 0;
|
|
if (x == 0) return x;
|
|
/* FIXME */
|
|
ACC_UNUSED(a); ACC_UNUSED(b);
|
|
return r;
|
|
}
|
|
|
|
|
|
ACCLIB_PUBLIC(acc_uint32l_t, acc_umuldiv32) (acc_uint32l_t a, acc_uint32l_t b, acc_uint32l_t x)
|
|
{
|
|
acc_uint32l_t r = 0;
|
|
if (x == 0) return x;
|
|
/* FIXME */
|
|
ACC_UNUSED(a); ACC_UNUSED(b);
|
|
return r;
|
|
}
|
|
|
|
|
|
/*
|
|
vi:ts=4:et
|
|
*/
|