Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ldterm(7M)			STREAMS	Modules			    ldterm(7M)

NAME
       ldterm -	standard STREAMS terminal line discipline module

SYNOPSIS
       #include	<sys/stream.h>

       #include	<sys/termios.h>

       int ioctl(fd,I_PUSH,"ldterm");

DESCRIPTION
       The  ldterm STREAMS module provides most	of the termio(7I) terminal in-
       terface.	 The vis module	does not perform the low-level device  control
       functions  specified by flags in	the c_cflag word of the	termio/termios
       structure, or by	the IGNBRK, IGNPAR, PARMRK,  or	 INPCK	flags  in  the
       c_iflag	word of	the termio/termios structure.  Those functions must be
       performed by the	driver or by modules pushed below the  ldterm  module.
       The  ldterm  module performs all	other termio/termios functions,	though
       some may	require	the cooperation	of the driver or modules pushed	 below
       ldterm and may not be performed in some cases.  These include the IXOFF
       flag in the c_iflag word	and the	delays	specified in the c_oflag word.

       The ldterm module also handles single and  multi-byte  characters  from
       various	codesets  including  both Extended Unix	Code (EUC) and non-EUC
       codesets.

       The remainder of	this  section  describes  the  processing  of  various
       STREAMS messages	on the read- and write-side.

   Read-side Behavior
       Various types of	STREAMS	messages are processed as follows:

       M_BREAK	       Depending  on  the  state of the	BRKINT flag, either an
		       interrupt signal	is generated or	the message is treated
		       as  if  it  were	 an M_DATA message containing a	single
		       ASCII NUL character when	this message is	received.

       M_DATA	       This message is normally	processed using	 the  standard
		       termio  input  processing. If the ICANON	flag is	set, a
		       single input record (``line'') is accumulated in	an in-
		       ternal buffer and sent upstream when a line-terminating
		       character is received. If the ICANON flag is  not  set,
		       other  input  processing	is performed and the processed
		       data are	passed upstream.

		       If output is to be stopped or started as	 a  result  of
		       the  arrival  of	characters (usually CNTRL-Q and	CNTRL-
		       S), M_STOP and M_START messages are sent	downstream. If
		       the  IXOFF  flag	 is  set and input is to be stopped or
		       started as a  result  of	 flow-control  considerations,
		       M_STOPI and M_STARTI messages are sent downstream.

		       M_DATA  messages	 are sent downstream, as necessary, to
		       perform echoing.

		       If a signal is to be generated, an M_FLUSH message with
		       a  flag	byte of	FLUSHR is placed on the	read queue. If
		       the signal is also to flush output, an M_FLUSH  message
		       with a flag  byte of FLUSHW is sent downstream.

       All other messages are passed upstream unchanged.

   Write-side Behavior
       Various types of	STREAMS	messages are processed as follows:

       M_FLUSH	       The  write  queue  of  the module is flushed of all its
		       data messages and the message is	passed downstream.

       M_IOCTL	       The function of this ioctl is performed and the message
		       is  passed  downstream  in  most	cases.	The TCFLSH and
		       TCXONC ioctls can be performed entirely in the	ldterm
		       module,	so  the	reply is sent upstream and the message
		       is not passed downstream.

       M_DATA	       If the OPOST flag is set, or both the XCASE and	ICANON
		       flags  are  set,	output processing is performed and the
		       processed message is passed downstream along  with  any
		       M_DELAY	messages generated.  Otherwise,	the message is
		       passed downstream without change.

       M_CTL	       If the size of the data buffer associated with the mes-
		       sage  is	the size of struct iocblk, ldterm will perform
		       functional   negotiation	  to   determine   where   the
		       termio(7I)  processing  is  to  be done.	If the command
		       field of	the  iocblk  structure	(ioc_cmd)  is  set  to
		       MC_NO_CANON,  the  input	 canonical processing normally
		       performed on M_DATA messages is disabled	and those mes-
		       sages  are passed upstream unmodified. (This is for the
		       use of modules or drivers that perform their own	 input
		       processing,  such  as  a	 pseudo-terminal in TIOCREMOTE
		       mode connected to a program that	performs this process-
		       ing). If	the command is MC_DO_CANON, all	input process-
		       ing is enabled. If the command is  MC_PART_CANON,  then
		       an M_DATA message containing a termios structure	is ex-
		       pected to be attached to	the  original  M_CTL  message.
		       The  ldterm  module  will examine the iflag, oflag, and
		       lflag fields of the termios  structure  and  from  that
		       point  on,  will	process	only those flags that have not
		       been turned ON. If  none	 of  the  above	 commands  are
		       found, the message is ignored. In any case, the message
		       is passed upstream.

       M_FLUSH	       The read	queue of the module is flushed of all its data
		       messages	 and  all data in the record being accumulated
		       are also	flushed.  The message is passed	upstream.

       M_IOCACK	       The data	contained within the message, which is	to  be
		       returned	 to  the  process, are augmented if necessary,
		       and the message is passed upstream.

       All other messages are passed downstream	unchanged.

IOCTLS
       The ldterm module  processes the	following TRANSPARENT ioctls. All oth-
       ers are passed downstream.

       TCGETS/TCGETA

	   The message is passed downstream. If	an acknowledgment is seen, the
	   data	provided by the	driver and modules  downstream	are  augmented
	   and the acknowledgement is passed upstream.

       TCSETS/TCSETSW/TCSETSF/TCSETA/TCSETAW/TCSETAF

	   The	parameters  that control the behavior of the ldterm module are
	   changed. If a mode change requires options at the stream head to be
	   changed, an M_SETOPTS message is sent upstream.  If the ICANON flag
	   is turned on	or off,	the read mode at the stream head is changed to
	   message-nondiscard or byte-stream mode, respectively. If the	TOSTOP
	   flag	is turned on or	off, the tostop	mode at	the   stream  head  is
	   turned  on  or  off,	 respectively. In any case,  ldterm passes the
	   ioctl on downstream for possible additional processing.

       TCFLSH

	   If the argument is 0, an M_FLUSH message with a flag	byte of	FLUSHR
	   is  sent  downstream	and placed on the read queue.  If the argument
	   is 1, the write queue is flushed of all its data  messages  and  an
	   M_FLUSH  message  with  a flag byte of FLUSHW is sent  upstream and
	   downstream. If the argument is 2, the write queue is	flushed	of all
	   its	data  messages	and  an	 M_FLUSH  message  with	a flag byte of
	   FLUSHRW is sent  downstream and placed on the read queue.

       TCXONC

	   If the argument is 0	and output is not already stopped,  an	M_STOP
	   message  is	sent  downstream.  If  the argument is 1 and output is
	   stopped, an M_START message is sent	downstream. If the argument is
	   2  and  input  is  not  already stopped, an M_STOPI message is sent
	   downstream. If the argument is 3 and	input is stopped, an  M_STARTI
	   message  is sent downstream.

       TCSBRK

	   The	message	 is  passed  downstream, so the	driver has a chance to
	   drain the data and then send	an M_IOCACK message upstream.

       EUC_WSET

	   This	call takes a pointer to	an eucioc structure, and  uses	it  to
	   set	the  EUC  line	discipline's local definition for the code set
	   widths to be	used for subsequent operations.	Within the stream, the
	   line	discipline may optionally notify other modules of this setting
	   using M_CTL messages. When this call	is received  and  the  eucioc-
	   structure contains valid data, the line discipline changes into EUC
	   handling mode once the euciocdata is	completely transferred	to  an
	   internal data structure.

       EUC_WGET

	   This	call takes a pointer to	an eucioc structure, and returns in it
	   the EUC code	set widths currently in	use by	the  EUC  line	disci-
	   pline.  If the current codeset of the line discipline is not	an EUC
	   one,	the result is meaningless.

SEE ALSO
       termios(3C), console(7D), termio(7I)

       STREAMS Programming Guide

SunOS 5.10			   7 Jun1999			    ldterm(7M)

NAME | SYNOPSIS | DESCRIPTION | IOCTLS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=ldterm&sektion=7m&manpath=SunOS+5.10>

home | help