ftp.nice.ch/pub/next/unix/editor/vim-5.0f.s.tar.gz#/vim-5.0f/src/os_bebox.c

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.