1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-26 11:52:25 +00:00

Maiko sources matching state as of 020102 prior to initial patching for Mac OSX

This commit is contained in:
Nick Briggs
2015-04-20 18:53:52 -07:00
commit de170a64d9
427 changed files with 129342 additions and 0 deletions

263
src/tty.c Executable file
View File

@@ -0,0 +1,263 @@
/* $Id: tty.c,v 1.2 1999/01/03 02:07:39 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
static char *id = "$Id: tty.c,v 1.2 1999/01/03 02:07:39 sybalsky Exp $ Copyright (C) Venue";
/************************************************************************/
/* */
/* (C) Copyright 1989-95 Venue. All Rights Reserved. */
/* Manufactured in the United States of America. */
/* */
/* The contents of this file are proprietary information */
/* belonging to Venue, and are provided to you under license. */
/* They may not be further distributed or disclosed to third */
/* parties without the specific permission of Venue. */
/* */
/************************************************************************/
#include "version.h"
#include "tty.h"
DLTTY_OUT_COMMAND *DLTTYPortCmd;
DLTTY_IN_CSB *DLTTYIn;
DLTTY_OUT_CSB *DLTTYOut;
char *TTY_Dev;
int TTY_Fd;
extern int LispReadFds;
struct sgttyb TTY_Mode;
tty_init()
{
#ifdef TRACE
printf( "TRACE: tty_init()\n" );
#endif
TTY_Dev = "/dev/ttyb"; /* Modify device name */
TTY_Fd = (-1);
DLTTYPortCmd = (DLTTY_OUT_COMMAND*) Addr68k_from_LADDR( IOPAGE_OFFSET+20 );
DLTTYIn = (DLTTY_IN_CSB*) Addr68k_from_LADDR( IOPAGE_OFFSET+36 );
DLTTYOut = (DLTTY_OUT_CSB*) Addr68k_from_LADDR( IOPAGE_OFFSET+34 );
} /* tty_init end */
tty_open()
{
int stat;
#ifdef TRACE
printf( "TRACE: tty_open()\n" );
#endif
if ( TTY_Fd < 0 ) {
if (( TTY_Fd = open( TTY_Dev, O_RDWR )) >=0 ) {
stat = ioctl( TTY_Fd, TIOCGETP, &TTY_Mode );
TTY_Mode.sg_flags = RAW;
stat = ioctl( TTY_Fd, TIOCSETP, &TTY_Mode );
LispReadFds |= ( 1 << TTY_Fd );
#ifdef TTYINT
int_io_open(TTY_Fd);
#endif
} else {
error( "TTY: tty_open" );
}
}
} /* tty_open end */
tty_close()
{
int stat;
#ifdef TRACE
printf( "TRACE: tty_close()\n" );
#endif
if ( TTY_Fd >= 0 ) {
LispReadFds &= ~( 1 << TTY_Fd );
stat = close( TTY_Fd );
#ifdef TTYINT
int_io_close(TTY_Fd);
#endif
TTY_Fd = (-1);
}
} /* tty_close end */
TTY_get()
{
char indata[256];
int count;
#ifdef TRACE
printf( "TRACE: tty_get()\n" );
#endif
if (( TTY_Fd >=0 ) && !DLTTYIn->state ) {
DLTTYIn->in_data = '\0'; /* Clear Previous Data */
if (( count = read( TTY_Fd, indata, 1 )) == 1) {
DLTTYIn->in_data = indata[0];
DLTTYIn->state = 1;
} else {
error( "TTY: tty_get" );
}
}
} /* TTY_get end */
tty_put()
{
int count;
char c;
#ifdef TRACE
printf( "TRACE: tty_put()\n" );
#endif
if ( TTY_Fd >= 0 ) {
c = DLTTYPortCmd->outdata;
if (( count = write( TTY_Fd, &c, 1 )) != 1) {
error( "TTY: tty_put()" );
}
}
} /* tty_put end */
tty_breakon()
{
int stat;
#ifdef TRACE
printf( "TRACE: tty_breakon()\n" );
#endif
if ( TTY_Fd >= 0 ) {
stat = ioctl( TTY_Fd, TIOCSBRK, 0 );
}
} /* tty_breakon end */
tty_breakoff()
{
int stat;
#ifdef TRACE
printf( "TRACE: tty_breakoff()\n" );
#endif
if ( TTY_Fd >= 0 ) {
stat = ioctl( TTY_Fd, TIOCCBRK, 0 );
}
} /* tty_breakoff end */
TTY_cmd()
{
#ifdef TRACE
printf( "TRACE: tty_cmd()\n" );
#endif
if ( DLTTYPortCmd->command >= PUT_CHAR ) {
if ( DLTTYPortCmd->command == PUT_CHAR ) tty_put();
else if ( DLTTYPortCmd->command == SET_PARAM ) tty_setparam();
else if ( DLTTYPortCmd->command == TTY_ON ) tty_open();
else if ( DLTTYPortCmd->command == TTY_OFF ) tty_close();
else if ( DLTTYPortCmd->command == TTY_BREAK_ON ) tty_breakon();
else if ( DLTTYPortCmd->command == TTY_BREAK_OFF ) tty_breakoff();
else
error( "TTY: tty_cmd");
DLTTYPortCmd->command &= ~PUT_CHAR;
}
} /* TTY_cmd end */
tty_setparam()
{
#ifdef TRACE
printf( "TRACE: tty_setpram()\n" );
#endif
if ( DLTTYPortCmd->outdata & SET_BAUD_RATE ) tty_setbaudrate();
} /* tty_setpram end */
tty_setbaudrate()
{
char baudrate;
int stat;
#ifdef TRACE
printf( "TRACE: tty_setbaudrete()\n" );
#endif
if ( TTY_Fd >= 0 ) {
if (( baudrate = tty_baudtosymbol( DLTTYOut->line_speed )) != -1 ) {
TTY_Mode.sg_ispeed = baudrate;
TTY_Mode.sg_ospeed = baudrate;
stat = ioctl( TTY_Fd, TIOCSETP, &TTY_Mode );
} else {
error( "TTY: tty_setbaudrate" );
}
}
} /* tty_setbaudrate end */
tty_baudtosymbol(aBaud)
short aBaud;
{
#ifdef TRASE
printf("TRASE: tty_baudtosymbol(%x)\n",aBaud);
#endif
if( aBaud== 0 ) return(B50);
if( aBaud== 1 ) return(B75);
if( aBaud== 2 ) return(B110);
if( aBaud== 3 ) return(B134);
if( aBaud== 4 ) return(B150);
if( aBaud== 5 ) return(B300);
if( aBaud== 6 ) return(B600);
if( aBaud== 7 ) return(B1200);
if( aBaud==10 ) return(B2400);
if( aBaud==12 ) return(B4800);
if( aBaud==14 ) return(B9600);
if( aBaud==15 ) return(EXTA);
return(-1);
} /* tty_baudtosymbol */
tty_debug( name )
char *name;
{
int stat;
struct sgttyb mode;
printf("DEBUG: %s\n",name);
printf("DEBUG: \t\tTTY_Dev = \"%s\"\n",TTY_Dev);
printf("DEBUG: \t\tTTY_Fd = %d\n",TTY_Fd);
if ( TTY_Fd >= 0 ) {
stat = ioctl( TTY_Fd, TIOCGETP, &mode );
printf("DEBUG: \t\tTTY_Mode.sg_ispeed = %#x\n",mode.sg_ispeed);
printf("DEBUG: \t\tTTY_Mode.sg_ospeed = %#x\n",mode.sg_ospeed);
printf("DEBUG: \t\tTTY_Mode.sg_erase = %#x\n",mode.sg_erase);
printf("DEBUG: \t\tTTY_Mode.sg_kill = %#x\n",mode.sg_kill);
printf("DEBUG: \t\tTTY_Mode.sg_flags = %#x\n",mode.sg_flags);
}
printf("DEBUG:\n" );
printf("DEBUG: \t\tSymbol Address Contents\n");
printf("DEBUG: \t\tIOPAGE %#x\n",Addr68k_from_LADDR(IOPAGE_OFFSET));
printf("DEBUG: \t\tDLTTYPortCmd %#x %#x\n",DLTTYPortCmd,*(DLword*) DLTTYPortCmd);
printf("DEBUG: \t\tDLTTYOut %#x %#x\n",DLTTYOut,*(DLword*) DLTTYOut);
printf("DEBUG: \t\t %#x\n",*(DLword*) (DLTTYOut+1));
printf("DEBUG: \t\tDLTTYIn %#x %#x\n",DLTTYIn,*(DLword*) DLTTYIn);
printf("DEBUG: \t\t %#x\n",*(DLword*) (DLTTYIn+1));
} /* tty_debug end */