This commit is contained in:
parent
54e33f53b9
commit
20bdc0d52d
52
lib/fmt.c
52
lib/fmt.c
@ -69,7 +69,7 @@
|
|||||||
#if defined(HCL_ENABLE_FLTFMT)
|
#if defined(HCL_ENABLE_FLTFMT)
|
||||||
|
|
||||||
#include <stdio.h> /* for snrintf(). used for floating-point number formatting */
|
#include <stdio.h> /* for snrintf(). used for floating-point number formatting */
|
||||||
#if defined(_MSC_VER) || defined(__BORLANDC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
|
#if defined(_MSC_VER) || (defined(__BORLANDC__) && (__BORLANDC__ > 0x520)) || (defined(__WATCOMC__) && (__WATCOMC__ < 1200))
|
||||||
# define snprintf _snprintf
|
# define snprintf _snprintf
|
||||||
# if !defined(HAVE_SNPRINTF)
|
# if !defined(HAVE_SNPRINTF)
|
||||||
# define HAVE_SNPRINTF
|
# define HAVE_SNPRINTF
|
||||||
@ -338,18 +338,15 @@ static hcl_bch_t* sprintn_upper (hcl_bch_t* nbuf, hcl_uintmax_t num, int base, h
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define PUT_BCH(hcl,fmtout,c,n) do { \
|
#define PUT_BCH(hcl,fmtout,c,n) do { \
|
||||||
if (n > 0) { \
|
hcl_oow_t _yy; \
|
||||||
hcl_oow_t _yy; \
|
hcl_bch_t _cc = c; \
|
||||||
hcl_bch_t _cc = c; \
|
for (_yy = 0; _yy < n; _yy++) \
|
||||||
for (_yy = 0; _yy < n; _yy++) \
|
{ \
|
||||||
{ \
|
int _xx; \
|
||||||
int _xx; \
|
if ((_xx = fmtout->putbchars(hcl, fmtout, &_cc, 1)) <= -1) goto oops; \
|
||||||
if ((_xx = fmtout->putbchars(hcl, fmtout, &_cc, 1)) <= -1) goto oops; \
|
if (_xx == 0) goto done; \
|
||||||
if (_xx == 0) goto done; \
|
fmtout->count++; \
|
||||||
fmtout->count++; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -363,16 +360,14 @@ static hcl_bch_t* sprintn_upper (hcl_bch_t* nbuf, hcl_uintmax_t num, int base, h
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define PUT_UCH(hcl,fmtout,c,n) do { \
|
#define PUT_UCH(hcl,fmtout,c,n) do { \
|
||||||
if (n > 0) { \
|
hcl_oow_t _yy; \
|
||||||
hcl_oow_t _yy; \
|
hcl_uch_t _cc = c; \
|
||||||
hcl_uch_t _cc = c; \
|
for (_yy = 0; _yy < n; _yy++) \
|
||||||
for (_yy = 0; _yy < n; _yy++) \
|
{ \
|
||||||
{ \
|
int _xx; \
|
||||||
int _xx; \
|
if ((_xx = fmtout->putuchars(hcl, fmtout, &_cc, 1)) <= -1) goto oops; \
|
||||||
if ((_xx = fmtout->putuchars(hcl, fmtout, &_cc, 1)) <= -1) goto oops; \
|
if (_xx == 0) goto done; \
|
||||||
if (_xx == 0) goto done; \
|
fmtout->count++; \
|
||||||
fmtout->count++; \
|
|
||||||
} \
|
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -1837,6 +1832,14 @@ static int print_bcs (hcl_t* hcl, hcl_fmtout_t* fmtout, const hcl_bch_t* ptr, hc
|
|||||||
|
|
||||||
static int print_ucs (hcl_t* hcl, hcl_fmtout_t* fmtout, const hcl_uch_t* ptr, hcl_oow_t len)
|
static int print_ucs (hcl_t* hcl, hcl_fmtout_t* fmtout, const hcl_uch_t* ptr, hcl_oow_t len)
|
||||||
{
|
{
|
||||||
|
#if defined(HCL_OOCH_IS_UCH)
|
||||||
|
hcl_uch_t* optr;
|
||||||
|
#else
|
||||||
|
hcl_oow_t bcslen, ucslen;
|
||||||
|
hcl_ooch_t bcsbuf[64], * bcsptr;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
if (HCL_UNLIKELY(!hcl->io.udo_wrtr))
|
if (HCL_UNLIKELY(!hcl->io.udo_wrtr))
|
||||||
{
|
{
|
||||||
hcl_seterrbmsg (hcl, HCL_EINVAL, "no user-defined output handler");
|
hcl_seterrbmsg (hcl, HCL_EINVAL, "no user-defined output handler");
|
||||||
@ -1844,8 +1847,6 @@ static int print_ucs (hcl_t* hcl, hcl_fmtout_t* fmtout, const hcl_uch_t* ptr, hc
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(HCL_OOCH_IS_UCH)
|
#if defined(HCL_OOCH_IS_UCH)
|
||||||
hcl_uch_t* optr;
|
|
||||||
|
|
||||||
optr = (hcl_uch_t*)ptr;
|
optr = (hcl_uch_t*)ptr;
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
@ -1860,9 +1861,6 @@ static int print_ucs (hcl_t* hcl, hcl_fmtout_t* fmtout, const hcl_uch_t* ptr, hc
|
|||||||
len -= hcl->io.udo_arg.xlen;
|
len -= hcl->io.udo_arg.xlen;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
hcl_oow_t bcslen, ucslen;
|
|
||||||
hcl_ooch_t bcsbuf[64], * bcsptr;
|
|
||||||
|
|
||||||
while (len > 0)
|
while (len > 0)
|
||||||
{
|
{
|
||||||
ucslen = len;
|
ucslen = len;
|
||||||
|
56
lib/std.c
56
lib/std.c
@ -37,6 +37,11 @@
|
|||||||
# define USE_THREAD
|
# define USE_THREAD
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__BORLANDC__) && defined(__DOS__) && defined(_WIN32) && defined(__DPMI32__)
|
||||||
|
/* bcc32 with powerpack seems to define _WIN32 in DPMI32 mode */
|
||||||
|
# undef _WIN32
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
# if !defined(_WIN32_WINNT)
|
# if !defined(_WIN32_WINNT)
|
||||||
# define _WIN32_WINNT 0x0400
|
# define _WIN32_WINNT 0x0400
|
||||||
@ -137,6 +142,14 @@
|
|||||||
# define XPOLLERR (1 << 2)
|
# define XPOLLERR (1 << 2)
|
||||||
# define XPOLLHUP (1 << 3)
|
# define XPOLLHUP (1 << 3)
|
||||||
|
|
||||||
|
# if !defined(STDOUT_FILENO)
|
||||||
|
# define STDOUT_FILENO (1)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# if !defined(STDERR_FILENO)
|
||||||
|
# define STDERR_FILENO (2)
|
||||||
|
# endif
|
||||||
|
|
||||||
#elif defined(macintosh)
|
#elif defined(macintosh)
|
||||||
# include <Types.h>
|
# include <Types.h>
|
||||||
# include <OSUtils.h>
|
# include <OSUtils.h>
|
||||||
@ -762,13 +775,17 @@ static size_t sprintf_timestamp (char* ts, struct tm* tmp)
|
|||||||
{
|
{
|
||||||
int off_h, off_m;
|
int off_h, off_m;
|
||||||
|
|
||||||
|
#if defined(__DOS__)
|
||||||
|
off_m = _timezone / 60;
|
||||||
|
#else
|
||||||
off_m = tmp->tm_gmtoff / 60;
|
off_m = tmp->tm_gmtoff / 60;
|
||||||
|
#endif
|
||||||
off_h = off_m / 60;
|
off_h = off_m / 60;
|
||||||
off_m = off_m % 60;
|
off_m = off_m % 60;
|
||||||
if (off_m < 0) off_m = -off_m;
|
if (off_m < 0) off_m = -off_m;
|
||||||
|
|
||||||
return (size_t)sprintf(ts,
|
return (size_t)sprintf(ts,
|
||||||
"%04d-%02d-%02d %02d:%02d:%02d %+03.2d%02.2d ",
|
"%04d-%02d-%02d %02d:%02d:%02d %+03d%02d ",
|
||||||
tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
|
tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
|
||||||
tmp->tm_hour, tmp->tm_min, tmp->tm_sec, off_h, off_m);
|
tmp->tm_hour, tmp->tm_min, tmp->tm_sec, off_h, off_m);
|
||||||
}
|
}
|
||||||
@ -825,7 +842,7 @@ static void log_write (hcl_t* hcl, hcl_bitmask_t mask, const hcl_ooch_t* msg, hc
|
|||||||
tzi.Bias = -tzi.Bias; /* utc = localtime + bias(mins). so negate it */
|
tzi.Bias = -tzi.Bias; /* utc = localtime + bias(mins). so negate it */
|
||||||
min = tzi.Bias % 60;
|
min = tzi.Bias % 60;
|
||||||
if (min < 0) min = -min;
|
if (min < 0) min = -min;
|
||||||
tslen = sprintf(ts, "%04d-%02d-%02d %02d:%02d:%02d %+03.2d%02.2d ",
|
tslen = sprintf(ts, "%04d-%02d-%02d %02d:%02d:%02d %+03d%02d ",
|
||||||
(int)now.wYear, (int)now.wMonth, (int)now.wDay,
|
(int)now.wYear, (int)now.wMonth, (int)now.wDay,
|
||||||
(int)now.wHour, (int)now.wMinute, (int)now.wSecond,
|
(int)now.wHour, (int)now.wMinute, (int)now.wSecond,
|
||||||
(int)(tzi.Bias / 60), (int)min);
|
(int)(tzi.Bias / 60), (int)min);
|
||||||
@ -1289,12 +1306,16 @@ static void _assertfail (hcl_t* hcl, const hcl_bch_t* expr, const hcl_bch_t* fil
|
|||||||
#elif defined(__OS2__)
|
#elif defined(__OS2__)
|
||||||
DosExit (EXIT_PROCESS, 249);
|
DosExit (EXIT_PROCESS, 249);
|
||||||
#elif defined(__DOS__)
|
#elif defined(__DOS__)
|
||||||
|
#if defined(__BORLANDC__) && defined(__DPMI32__)
|
||||||
|
_exit (249);
|
||||||
|
#else
|
||||||
{
|
{
|
||||||
union REGS regs;
|
union REGS regs;
|
||||||
regs.h.ah = DOS_EXIT;
|
regs.h.ah = DOS_EXIT;
|
||||||
regs.h.al = 249;
|
regs.h.al = 249;
|
||||||
intdos (®s, ®s);
|
intdos (®s, ®s);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#elif defined(vms) || defined(__vms)
|
#elif defined(vms) || defined(__vms)
|
||||||
lib$stop (SS$_ABORT); /* use SS$_OPCCUS instead? */
|
lib$stop (SS$_ABORT); /* use SS$_OPCCUS instead? */
|
||||||
/* this won't be reached since lib$stop() terminates the process */
|
/* this won't be reached since lib$stop() terminates the process */
|
||||||
@ -1394,7 +1415,7 @@ static void vm_gettime (hcl_t* hcl, hcl_ntime_t* now)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(__DOS__)
|
#elif defined(__DOS__)
|
||||||
xtn_t* xtn = GET_XTN(moo);
|
xtn_t* xtn = GET_XTN(hcl);
|
||||||
clock_t c, elapsed;
|
clock_t c, elapsed;
|
||||||
hcl_ntime_t et;
|
hcl_ntime_t et;
|
||||||
|
|
||||||
@ -1404,18 +1425,18 @@ static void vm_gettime (hcl_t* hcl, hcl_ntime_t* now)
|
|||||||
|
|
||||||
now->sec = c / CLOCKS_PER_SEC;
|
now->sec = c / CLOCKS_PER_SEC;
|
||||||
#if (CLOCKS_PER_SEC == 100)
|
#if (CLOCKS_PER_SEC == 100)
|
||||||
now->nsec = HCL_MSEC_TO_NSEC((c % CLOCKS_PER_SEC) * 10);
|
now->nsec = HCL_MSEC_TO_NSEC((c % (clock_t)CLOCKS_PER_SEC) * 10);
|
||||||
#elif (CLOCKS_PER_SEC == 1000)
|
#elif (CLOCKS_PER_SEC == 1000)
|
||||||
now->nsec = HCL_MSEC_TO_NSEC(c % CLOCKS_PER_SEC);
|
now->nsec = HCL_MSEC_TO_NSEC(c % (clock_t)CLOCKS_PER_SEC);
|
||||||
#elif (CLOCKS_PER_SEC == 1000000L)
|
#elif (CLOCKS_PER_SEC == 1000000L)
|
||||||
now->nsec = HCL_USEC_TO_NSEC(c % CLOCKS_PER_SEC);
|
now->nsec = HCL_USEC_TO_NSEC(c % (clock_t)CLOCKS_PER_SEC);
|
||||||
#elif (CLOCKS_PER_SEC == 1000000000L)
|
#elif (CLOCKS_PER_SEC == 1000000000L)
|
||||||
now->nsec = (c % CLOCKS_PER_SEC);
|
now->nsec = (c % (clock_t)CLOCKS_PER_SEC);
|
||||||
#else
|
#else
|
||||||
# error UNSUPPORTED CLOCKS_PER_SEC
|
# error UNSUPPORTED CLOCKS_PER_SEC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
HCL_ADD_NTIME (&xtn->tc_last_ret , &xtn->tc_last_ret, &et);
|
HCL_ADD_NTIME (&xtn->tc_last_ret, &xtn->tc_last_ret, &et);
|
||||||
*now = xtn->tc_last_ret;
|
*now = xtn->tc_last_ret;
|
||||||
|
|
||||||
#elif defined(macintosh)
|
#elif defined(macintosh)
|
||||||
@ -2433,6 +2454,8 @@ static void vm_muxwait (hcl_t* hcl, const hcl_ntime_t* dur, hcl_vmprim_muxwait_c
|
|||||||
# pragma aux _halt_cpu = "hlt"
|
# pragma aux _halt_cpu = "hlt"
|
||||||
# elif defined(_MSC_VER)
|
# elif defined(_MSC_VER)
|
||||||
static void _halt_cpu (void) { _asm { hlt } }
|
static void _halt_cpu (void) { _asm { hlt } }
|
||||||
|
# elif defined(__BORLANDC__)
|
||||||
|
static void _halt_cpu (void) { _asm { hlt } }
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -2538,7 +2561,11 @@ static int vm_getsig (hcl_t* hcl, hcl_uint8_t* u8)
|
|||||||
#endif
|
#endif
|
||||||
if (read(xtn->sigfd.p[0], u8, HCL_SIZEOF(*u8)) == -1)
|
if (read(xtn->sigfd.p[0], u8, HCL_SIZEOF(*u8)) == -1)
|
||||||
{
|
{
|
||||||
|
#if defined(EWOULDBLOCK)
|
||||||
if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) return 0;
|
if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) return 0;
|
||||||
|
#else
|
||||||
|
if (errno == EINTR || errno == EAGAIN) return 0;
|
||||||
|
#endif
|
||||||
hcl_seterrwithsyserr (hcl, 0, errno);
|
hcl_seterrwithsyserr (hcl, 0, errno);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -2551,7 +2578,11 @@ static int vm_setsig (hcl_t* hcl, hcl_uint8_t u8)
|
|||||||
xtn_t* xtn = GET_XTN(hcl);
|
xtn_t* xtn = GET_XTN(hcl);
|
||||||
if (write(xtn->sigfd.p[1], &u8, HCL_SIZEOF(u8)) == -1)
|
if (write(xtn->sigfd.p[1], &u8, HCL_SIZEOF(u8)) == -1)
|
||||||
{
|
{
|
||||||
|
#if defined(EWOULDBLOCK)
|
||||||
if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) return 0;
|
if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) return 0;
|
||||||
|
#else
|
||||||
|
if (errno == EINTR || errno == EAGAIN) return 0;
|
||||||
|
#endif
|
||||||
hcl_seterrwithsyserr (hcl, 0, errno);
|
hcl_seterrwithsyserr (hcl, 0, errno);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -3002,6 +3033,7 @@ static pid_t ticker_pid = -1;
|
|||||||
|
|
||||||
static HCL_INLINE void start_ticker (void)
|
static HCL_INLINE void start_ticker (void)
|
||||||
{
|
{
|
||||||
|
#if defined(SIGALRM)
|
||||||
if (set_signal_handler(SIGALRM, swproc_all_hcls, SA_RESTART) >= 0)
|
if (set_signal_handler(SIGALRM, swproc_all_hcls, SA_RESTART) >= 0)
|
||||||
{
|
{
|
||||||
ticker_pid = fork();
|
ticker_pid = fork();
|
||||||
@ -3035,10 +3067,12 @@ static HCL_INLINE void start_ticker (void)
|
|||||||
|
|
||||||
/* parent just carries on. */
|
/* parent just carries on. */
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static HCL_INLINE void stop_ticker (void)
|
static HCL_INLINE void stop_ticker (void)
|
||||||
{
|
{
|
||||||
|
#if defined(SIGALRM)
|
||||||
if (ticker_pid >= 0)
|
if (ticker_pid >= 0)
|
||||||
{
|
{
|
||||||
int wstatus;
|
int wstatus;
|
||||||
@ -3048,6 +3082,7 @@ static HCL_INLINE void stop_ticker (void)
|
|||||||
|
|
||||||
unset_signal_handler (SIGALRM);
|
unset_signal_handler (SIGALRM);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -3527,8 +3562,11 @@ static HCL_INLINE void reset_log_to_default (xtn_t* xtn)
|
|||||||
xtn->log.fd = -1;
|
xtn->log.fd = -1;
|
||||||
xtn->log.fd_flags = 0;
|
xtn->log.fd_flags = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_ISATTY)
|
||||||
if (isatty(STDERR_FILENO)) xtn->log.fd_flags |= LOGFD_STDERR_TTY;
|
if (isatty(STDERR_FILENO)) xtn->log.fd_flags |= LOGFD_STDERR_TTY;
|
||||||
if (isatty(STDOUT_FILENO)) xtn->log.fd_flags |= LOGFD_STDOUT_TTY;
|
if (isatty(STDOUT_FILENO)) xtn->log.fd_flags |= LOGFD_STDOUT_TTY;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static HCL_INLINE void chain (hcl_t* hcl)
|
static HCL_INLINE void chain (hcl_t* hcl)
|
||||||
@ -4841,6 +4879,8 @@ static void (__interrupt *dos_prev_int23_handler) (void);
|
|||||||
static void __interrupt dos_int23_handler (void)
|
static void __interrupt dos_int23_handler (void)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
/* dos int23 - ctrl-c handler */
|
||||||
|
|
||||||
#if (IRQ_TERM == 0x23) && defined(_INTELC32_)
|
#if (IRQ_TERM == 0x23) && defined(_INTELC32_)
|
||||||
/* note this code for _INTELC32_ doesn't seem to work properly
|
/* note this code for _INTELC32_ doesn't seem to work properly
|
||||||
* unless the program is waiting on getch() or something similar */
|
* unless the program is waiting on getch() or something similar */
|
||||||
|
Loading…
Reference in New Issue
Block a user