Changeset View
Changeset View
Standalone View
Standalone View
head/contrib/less/os.c
Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | |||||
extern int sigs; | extern int sigs; | ||||
/* | /* | ||||
* Like read() system call, but is deliberately interruptible. | * Like read() system call, but is deliberately interruptible. | ||||
* A call to intread() from a signal handler will interrupt | * A call to intread() from a signal handler will interrupt | ||||
* any pending iread(). | * any pending iread(). | ||||
*/ | */ | ||||
public int | public int | ||||
iread(fd, buf, len) | iread(int fd, char *buf, unsigned int len) | ||||
int fd; | |||||
char *buf; | |||||
unsigned int len; | |||||
{ | { | ||||
register int n; | int n; | ||||
start: | start: | ||||
#if MSDOS_COMPILER==WIN32C | #if MSDOS_COMPILER==WIN32C | ||||
if (ABORT_SIGS()) | if (ABORT_SIGS()) | ||||
return (READ_INTR); | return (READ_INTR); | ||||
#else | #else | ||||
#if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC | #if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC | ||||
if (kbhit()) | if (kbhit()) | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | #endif | ||||
} | } | ||||
return (n); | return (n); | ||||
} | } | ||||
/* | /* | ||||
* Interrupt a pending iread(). | * Interrupt a pending iread(). | ||||
*/ | */ | ||||
public void | public void | ||||
intread() | intread(void) | ||||
{ | { | ||||
LONG_JUMP(read_label, 1); | LONG_JUMP(read_label, 1); | ||||
} | } | ||||
/* | /* | ||||
* Return the current time. | * Return the current time. | ||||
*/ | */ | ||||
#if HAVE_TIME | #if HAVE_TIME | ||||
public time_type | public time_type | ||||
get_time() | get_time(void) | ||||
{ | { | ||||
time_type t; | time_type t; | ||||
time(&t); | time(&t); | ||||
return (t); | return (t); | ||||
} | } | ||||
#endif | #endif | ||||
#if !HAVE_STRERROR | #if !HAVE_STRERROR | ||||
/* | /* | ||||
* Local version of strerror, if not available from the system. | * Local version of strerror, if not available from the system. | ||||
*/ | */ | ||||
static char * | static char * | ||||
strerror(err) | strerror(int err) | ||||
int err; | |||||
{ | { | ||||
#if HAVE_SYS_ERRLIST | #if HAVE_SYS_ERRLIST | ||||
static char buf[16]; | static char buf[16]; | ||||
extern char *sys_errlist[]; | extern char *sys_errlist[]; | ||||
extern int sys_nerr; | extern int sys_nerr; | ||||
if (err < sys_nerr) | if (err < sys_nerr) | ||||
return sys_errlist[err]; | return sys_errlist[err]; | ||||
sprintf(buf, "Error %d", err); | sprintf(buf, "Error %d", err); | ||||
return buf; | return buf; | ||||
#else | #else | ||||
return ("cannot open"); | return ("cannot open"); | ||||
#endif | #endif | ||||
} | } | ||||
#endif | #endif | ||||
/* | /* | ||||
* errno_message: Return an error message based on the value of "errno". | * errno_message: Return an error message based on the value of "errno". | ||||
*/ | */ | ||||
public char * | public char * | ||||
errno_message(filename) | errno_message(char *filename) | ||||
char *filename; | |||||
{ | { | ||||
register char *p; | char *p; | ||||
register char *m; | char *m; | ||||
int len; | int len; | ||||
#if HAVE_ERRNO | #if HAVE_ERRNO | ||||
#if MUST_DEFINE_ERRNO | #if MUST_DEFINE_ERRNO | ||||
extern int errno; | extern int errno; | ||||
#endif | #endif | ||||
p = strerror(errno); | p = strerror(errno); | ||||
#else | #else | ||||
p = "cannot open"; | p = "cannot open"; | ||||
#endif | #endif | ||||
len = (int) (strlen(filename) + strlen(p) + 3); | len = (int) (strlen(filename) + strlen(p) + 3); | ||||
m = (char *) ecalloc(len, sizeof(char)); | m = (char *) ecalloc(len, sizeof(char)); | ||||
SNPRINTF2(m, len, "%s: %s", filename, p); | SNPRINTF2(m, len, "%s: %s", filename, p); | ||||
return (m); | return (m); | ||||
} | } | ||||
/* #define HAVE_FLOAT 0 */ | /* #define HAVE_FLOAT 0 */ | ||||
static POSITION | static POSITION | ||||
muldiv(val, num, den) | muldiv(POSITION val, POSITION num, POSITION den) | ||||
POSITION val, num, den; | |||||
{ | { | ||||
#if HAVE_FLOAT | #if HAVE_FLOAT | ||||
double v = (((double) val) * num) / den; | double v = (((double) val) * num) / den; | ||||
return ((POSITION) (v + 0.5)); | return ((POSITION) (v + 0.5)); | ||||
#else | #else | ||||
POSITION v = ((POSITION) val) * num; | POSITION v = ((POSITION) val) * num; | ||||
if (v / num == val) | if (v / num == val) | ||||
/* No overflow */ | /* No overflow */ | ||||
return (POSITION) (v / den); | return (POSITION) (v / den); | ||||
else | else | ||||
/* Above calculation overflows; | /* Above calculation overflows; | ||||
* use a method that is less precise but won't overflow. */ | * use a method that is less precise but won't overflow. */ | ||||
return (POSITION) (val / (den / num)); | return (POSITION) (val / (den / num)); | ||||
#endif | #endif | ||||
} | } | ||||
/* | /* | ||||
* Return the ratio of two POSITIONS, as a percentage. | * Return the ratio of two POSITIONS, as a percentage. | ||||
* {{ Assumes a POSITION is a long int. }} | * {{ Assumes a POSITION is a long int. }} | ||||
*/ | */ | ||||
public int | public int | ||||
percentage(num, den) | percentage(POSITION num, POSITION den) | ||||
POSITION num, den; | |||||
{ | { | ||||
return (int) muldiv(num, (POSITION) 100, den); | return (int) muldiv(num, (POSITION) 100, den); | ||||
} | } | ||||
/* | /* | ||||
* Return the specified percentage of a POSITION. | * Return the specified percentage of a POSITION. | ||||
*/ | */ | ||||
public POSITION | public POSITION | ||||
percent_pos(pos, percent, fraction) | percent_pos(POSITION pos, int percent, long fraction) | ||||
POSITION pos; | |||||
int percent; | |||||
long fraction; | |||||
{ | { | ||||
/* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */ | /* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */ | ||||
POSITION perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100); | POSITION perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100); | ||||
if (perden == 0) | if (perden == 0) | ||||
return (0); | return (0); | ||||
return (POSITION) muldiv(pos, perden, (POSITION) NUM_FRAC_DENOM); | return (POSITION) muldiv(pos, perden, (POSITION) NUM_FRAC_DENOM); | ||||
} | } | ||||
Show All 34 Lines | |||||
#endif | #endif | ||||
#ifdef _OSK_MWC32 | #ifdef _OSK_MWC32 | ||||
/* | /* | ||||
* This implements an ANSI-style intercept setup for Microware C 3.2 | * This implements an ANSI-style intercept setup for Microware C 3.2 | ||||
*/ | */ | ||||
public int | public int | ||||
os9_signal(type, handler) | os9_signal(int type, RETSIGTYPE (*handler)()) | ||||
int type; | |||||
RETSIGTYPE (*handler)(); | |||||
{ | { | ||||
intercept(handler); | intercept(handler); | ||||
} | } | ||||
#include <sgstat.h> | #include <sgstat.h> | ||||
int | int | ||||
isatty(f) | isatty(f) | ||||
Show All 10 Lines |