ftp.nice.ch/pub/next/graphics/video/V-Box.N.bs.tar.gz#/V-Box/VboxControllerSrc/io.c

This is io.c in view mode; [Download] [Up]

#import <stdio.h>
#import <libc.h>

void checkStatus( int fd );


int openPort( char *deviceName, int bps)
{
	int fd;
	long ldisc;
	struct sgttyb mode;
	
	#ifdef DEBUG
		fprintf(stderr,"Opening <%s> at %d bps.\n", deviceName, bps);
	#endif
		
	if ((fd = open(deviceName, O_RDWR)) < 0) 
		{
		#ifdef DEBUG
			fprintf(stderr,"Could not open Port <%s>.\n"
				"Errno = 0x%X\n",deviceName,errno);
		#endif
		perror("open");
		return -1;
		}
	
	#ifdef DEBUG
		checkStatus( fd);
	#endif
	
	ldisc = NTTYDISC;
	ioctl(fd, TIOCSETD, &ldisc);	/* Set "New" line discipline */

	ioctl(fd, TIOCGETP, &mode);
	mode.sg_ispeed = mode.sg_ospeed = bps;
	mode.sg_flags |= RAW;
	mode.sg_flags &= ~ECHO;		// No echoing
	mode.sg_flags &= ~CBREAK;	// No half cocked mode
	mode.sg_flags &= ~CRMOD;	// No remapping of CR key
	mode.sg_flags &= ~TANDEM;	// No XON/XOFF
	ioctl(fd, TIOCSETP, &mode);

	#ifdef DEBUG
		checkStatus( fd);
	#endif
	
	return fd;
}



int closePort( int fd)
{
	fprintf(stderr,"Closing Port %d.\n", fd);

	if (   close(fd) < 0) 
		{
		fprintf(stderr, "Could not close Port, fd = %XH\n"
					"errno = %d\n",fd ,errno);
		perror("close");
		return -1;
		}
	return 0;	
}	

void checkStatus( int fd )
{
	long int ldisc;
	struct sgttyb mode;
	
	fprintf(stderr,"\n\n================\n");
	ioctl(fd, TIOCGETD, &ldisc);
	
	switch( ldisc )
		{
		case OTTYDISC:
			fprintf(stderr, "Old tty disc in effect.\n");
			break;
		case NTTYDISC:
			fprintf(stderr, "New tty disc in effect.\n");
			break;
		case NETLDISC:
			fprintf(stderr, "Netl disc in effect.\n");
			break;
		default:
			fprintf(stderr, "Unknown tty disc in effect.\n");
			break;
		}
		
	ioctl(fd, TIOCGETP, &mode);
	
	fprintf(stderr, "Input speed = %d\n", mode.sg_ispeed);
	fprintf(stderr, "Output speed = %d\n", mode.sg_ospeed);
	fprintf(stderr, "Erase char = %d\n", mode.sg_erase);
	fprintf(stderr, "Kill char = %d\n", mode.sg_kill);

	fprintf(stderr, "\nLocal mode word = %08Xh\n", mode.sg_flags);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.