This is os_bebox.c in view mode; [Download] [Up]
/* vi:set ts=4 sw=4:
*
* VIM - Vi IMproved by Bram Moolenaar
* BeBox port by Olaf Seibert
*
* Do ":help uganda" in Vim to read copying and usage conditions.
* Do ":help credits" in Vim to see a list of people who contributed.
*/
/*
* os_bebox.c Additional files for BeBox (rest is in os_unix.c)
*/
#include <termios.h>
#include <kernel/OS.h>
// #include <device/KernelExport.h>
#include "vim.h"
static int
check_for_bebox()
{
static int checked = 0;
static int is_bebox = 0;
if (!checked) {
system_info si;
checked = 1;
get_system_info(&si);
#if 0
printf("\r\ncpu_count = %d\r\n", si.cpu_count);
printf("cpu_type = %d\r\n", si.cpu_type);
printf("cpu_clock_speed = %f\r\n", si.cpu_clock_speed);
printf("bus_clock_speed = %f\r\n", si.bus_clock_speed);
#endif
/*
* Measured values on my machine:
* cpu_clock_speed = 66434214
* bus_clock_speed = 33238632
*/
if (si.cpu_count == 2 &&
((si.cpu_type == B_CPU_PPC_603 && si.cpu_clock_speed <= 66666666) ||
(si.cpu_type == B_CPU_PPC_603e && si.cpu_clock_speed <= 133333333)) &&
si.bus_clock_speed <= 33333333) {
is_bebox = 1;
}
//printf("io card version = %d\r\n", io_card_version());
if (!is_bebox) {
emsg("This program works better on a real BeBox.");
}
}
return is_bebox;
}
/*
* select() emulation. Hopefully, in DR9 there will be something
* useful supplied by the system.
*/
int
bebox_select(int nbits,
struct fd_set *rbits,
struct fd_set *wbits,
struct fd_set *ebits,
struct timeval *timeout)
{
check_for_bebox();
if (nbits == 0) {
/* select is purely being used for delay */
/* return select(0, NULL, NULL, NULL, timeout); */
snooze(timeout->tv_sec * 1e6 + timeout->tv_usec);
return 0;
}
#if 0
/*
* This does not seem to work either. Reads here are not supposed to
* block indefinitely, yet they do. This is most annoying.
*/
if (FD_ISSET(0, rbits)) {
char cbuf[1];
int count;
struct termios told;
struct termios tnew;
tcgetattr(0, &told);
tnew = told;
tnew.c_lflag &= ~ICANON;
tnew.c_cc[VMIN] = 0;
tnew.c_cc[VTIME] = timeout->tv_sec * 10 + timeout->tv_usec / 100000;
tcsetattr(0, TCSANOW, &tnew);
count = read(0, &cbuf, sizeof(cbuf));
tcsetattr(0, TCSANOW, &told);
if (count > 0) {
add_to_input_buf(&cbuf[0], count);
return 1;
}
return 0;
}
#endif
return 0;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.