add directory study
This commit is contained in:
277
study/linux-travel/MINIX-1.5/1.5/Source/commands/ic/ic_input.c
Normal file
277
study/linux-travel/MINIX-1.5/1.5/Source/commands/ic/ic_input.c
Normal file
@@ -0,0 +1,277 @@
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* ic_input.c */
|
||||
/* */
|
||||
/* Character input routines for the */
|
||||
/* "Integer Calculator". */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
/* origination 1988-Apr-7 Terrence W. Holm */
|
||||
/* added cmd line args 1988-May-13 Terrence W. Holm */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <sgtty.h>
|
||||
|
||||
#include "ic.h"
|
||||
|
||||
static struct sgttyb saved_mode;
|
||||
static struct tchars saved_chars;
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Save_Term() */
|
||||
/* */
|
||||
/* Save the current terminal characteristics. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
Save_Term()
|
||||
|
||||
{
|
||||
ioctl( 0, TIOCGETP, &saved_mode );
|
||||
ioctl( 0, TIOCGETC, (struct sgttyb *) &saved_chars );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Set_Term() */
|
||||
/* */
|
||||
/* Set up the terminal characteristics for ic. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
Set_Term()
|
||||
|
||||
{
|
||||
struct sgttyb ic_mode;
|
||||
struct tchars ic_chars;
|
||||
|
||||
ic_mode = saved_mode;
|
||||
ic_chars = saved_chars;
|
||||
|
||||
|
||||
/* No tab expansion, no echo, cbreak mode */
|
||||
|
||||
ic_mode.sg_flags = ic_mode.sg_flags & ~XTABS & ~ECHO | CBREAK;
|
||||
|
||||
|
||||
/* Change the interrupt character to ^C, ignore ^S & ^Q */
|
||||
|
||||
ic_chars.t_intrc = '\003';
|
||||
ic_chars.t_startc = '\377';
|
||||
ic_chars.t_stopc = '\377';
|
||||
|
||||
ioctl( 0, TIOCSETP, &ic_mode );
|
||||
ioctl( 0, TIOCSETC, (struct sgttyb *) &ic_chars );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Reset_Term() */
|
||||
/* */
|
||||
/* Restore the terminal characteristics. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
Reset_Term()
|
||||
|
||||
{
|
||||
ioctl( 0, TIOCSETP, &saved_mode );
|
||||
ioctl( 0, TIOCSETC, (struct sgttyb *) &saved_chars );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Get_Char() */
|
||||
/* */
|
||||
/* Return the next input character. Upper case */
|
||||
/* is mapped to lower case. Escape sequences */
|
||||
/* are mapped to special codes (msb set). */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
int Get_Char()
|
||||
|
||||
{
|
||||
int c;
|
||||
|
||||
|
||||
/* fflush() used because Minix does not automatically */
|
||||
/* flush the output. */
|
||||
|
||||
fflush( stdout );
|
||||
|
||||
|
||||
if ( (c = Getc()) == EOF )
|
||||
return( EOF );
|
||||
|
||||
c &= 0x7f;
|
||||
|
||||
|
||||
if ( isupper(c) )
|
||||
return( tolower(c) );
|
||||
|
||||
|
||||
if ( c == ESCAPE )
|
||||
if ( (c=Getc()) != '[' )
|
||||
{
|
||||
ungetc( c, stdin );
|
||||
return( ESCAPE );
|
||||
}
|
||||
else
|
||||
{
|
||||
c = Getc() | 0x80;
|
||||
|
||||
if ( c == ESC_HOME || c == ESC_UP || c == ESC_PGUP ||
|
||||
c == ESC_LEFT || c == ESC_5 || c == ESC_RIGHT ||
|
||||
c == ESC_END || c == ESC_DOWN || c == ESC_PGDN ||
|
||||
c == ESC_PLUS || c == ESC_MINUS )
|
||||
return( c );
|
||||
else
|
||||
return( ESCAPE );
|
||||
}
|
||||
|
||||
|
||||
return( c );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Init_Getc( argc, argv ) */
|
||||
/* */
|
||||
/* Give Getc() references to the command line */
|
||||
/* arguments. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
|
||||
static int args_remaining;
|
||||
static char **args_pointer;
|
||||
static int args_index;
|
||||
|
||||
|
||||
|
||||
Init_Getc( argc, argv )
|
||||
int argc;
|
||||
char *argv[];
|
||||
|
||||
{
|
||||
args_remaining = argc - 1;
|
||||
args_pointer = &argv[1];
|
||||
args_index = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Getc() */
|
||||
/* */
|
||||
/* Get the next input character from the command */
|
||||
/* line if there is some more, else from stdin. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
int Getc()
|
||||
|
||||
{
|
||||
int c;
|
||||
|
||||
if ( args_remaining > 0 )
|
||||
if ( (c = args_pointer[ 0 ][ args_index++ ]) == '\0' )
|
||||
{
|
||||
--args_remaining;
|
||||
++args_pointer;
|
||||
args_index = 0;
|
||||
|
||||
if ( args_remaining > 0 )
|
||||
return( '\n' );
|
||||
}
|
||||
else
|
||||
return( c );
|
||||
|
||||
return( getchar() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************************/
|
||||
/* */
|
||||
/* Get_Base( character ) */
|
||||
/* */
|
||||
/* Return an appropriate base number for the */
|
||||
/* given character code. Used by 'i' and 'o'. */
|
||||
/* */
|
||||
/****************************************************************/
|
||||
|
||||
|
||||
int Get_Base( code )
|
||||
char code;
|
||||
|
||||
{
|
||||
switch ( code )
|
||||
{
|
||||
case 'h' : return( HEXADECIMAL );
|
||||
|
||||
case 'd' : return( DECIMAL );
|
||||
|
||||
case 'o' : return( OCTAL );
|
||||
|
||||
case 'b' : return( BINARY );
|
||||
|
||||
case 'a' : return( ASCII );
|
||||
|
||||
default : return( ERROR );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user