delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2001/08/08/09:43:28

From: "Mark E." <snowball3 AT bigfoot DOT com>
To: djgpp-workers AT delorie DOT com
Date: Wed, 8 Aug 2001 09:42:22 -0400
MIME-Version: 1.0
Subject: Re: TIOCGWINSZ
Message-ID: <3B71097E.12277.2BD5C6@localhost>
References: <3B701C66 DOT 28168 DOT 7C3116 AT localhost>
In-reply-to: <Pine.SUN.3.91.1010808095816.23412F@is>
X-mailer: Pegasus Mail for Win32 (v3.12c)
Reply-To: djgpp-workers AT delorie DOT com

Hi,

This version does away with the Unix constants in sys/ioctl.h not needed to 
implement TIOCGWINSZ. Does this go too far or should the other stuff be kept 
but still disabled?

*** /cvs/djgpp/include/sys/ioctl.h	Mon Aug 12 20:13:04 1996
--- include/sys/ioctl.h	Wed Aug  8 09:25:00 2001
*************** of the xfer buffer in CX. Aaaaargh
*** 76,97 ****
  #define DOS_QGIOCTLCAPD     (DOS_PLAIN_QGIOCTLCAPD|        DOS_RETAX)
  
  
  #define __IS_UNIX_IOCTL(a) ((a) & 0xd0000000U)
- #if 0
- /*
- ** UNIX stuff
- **
- ** This is subject to major changes in the near future.
- ** Do not use it yet.
- */
  
  /*
- ** __WARNING__ :
- ** This ifdef works for DJGPP, because its io.h
- ** defines __djgpp_include_io_h_
- */
- #ifndef _IO
- /*
  * Ioctl's have the command encoded in the lower word,
  * and the size of any in or out parameters in the upper
  * word.  The high 2 bits of the upper word are used
--- 76,86 ----
  #define DOS_QGIOCTLCAPD     (DOS_PLAIN_QGIOCTLCAPD|        DOS_RETAX)
  
  
+ /* UNIX stuff */
+ 
  #define __IS_UNIX_IOCTL(a) ((a) & 0xd0000000U)
  
  /*
  * Ioctl's have the command encoded in the lower word,
  * and the size of any in or out parameters in the upper
  * word.  The high 2 bits of the upper word are used
*************** of the xfer buffer in CX. Aaaaargh
*** 109,138 ****
  #define _IOW(x,y,t)     (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
  /* this should be _IORW, but stdio got there first */
  #define _IOWR(x,y,t)    (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)
- #endif /* _IO */
- /* Common ioctl's for all disciplines which are handled in ttiocom */
- enum tty_ioctl {
-     TXISATTY = ('X'<<8),    /* quick path for isatty */
-     TXTTYNAME,				/* quick path for ttyname */
-     TXGETLD,				/* get line discipline */
-     TXSETLD,				/* set line discipline */
-     TXGETCD,				/* get control disciplines */
-     TXADDCD,				/* add control discipline */
-     TXDELCD,				/* delete control discipline */
-     TXSBAUD,				/* set integer baud rate */
-     TXGBAUD,				/* get integer baud rate */
-     TXSETIHOG,				/* set the input buffer limit */
-     TXSETOHOG,				/* set the output buffer limit */
-     TXGPGRP,				/* get p grp with posix security */
-     TXSPGRP                 /* set p grp with posix security */
- };
- 
- #define TTNAMEMAX 32        /* used with TXGETLD, et al */
- 
- union txname {				/* used with TXGETCD */
-     int tx_which;			/* which name to get -- inbound */
-     char tx_name[TTNAMEMAX];/* the name -- outbound */
- };
  
  /* 
   * window size structure used with TXSETWIN and TXGETWIN.  This is 
--- 98,103 ----
*************** struct winsize {
*** 147,346 ****
  	unsigned short	ws_ypixel;		/* vertical size, pixels */
  };
  
- struct tchars {
- 	char	t_intrc;	/* interrupt */
- 	char	t_quitc;	/* quit */
- 	char	t_startc;	/* start output */
- 	char	t_stopc;	/* stop output */
- 	char	t_eofc;		/* end-of-file */
- 	char	t_brkc;		/* input delimiter (like nl) */
- };
- struct ltchars {
- 	char	t_suspc;	/* stop process signal */
- 	char	t_dsuspc;	/* delayed stop process signal */
- 	char	t_rprntc;	/* reprint line */
- 	char	t_flushc;	/* flush output (toggles) */
- 	char	t_werasc;	/* word erase */
- 	char	t_lnextc;	/* literal next character */
- };
- 
- /*
- * Structure for TIOCGETP and TIOCSETP ioctls.
- */
- 
- struct sgttyb {
- 	char	sg_ispeed;		/* input speed */
- 	char	sg_ospeed;		/* output speed */
- 	char	sg_erase;		/* erase character */
- 	char	sg_kill;		/* kill character */
- 	short	sg_flags;		/* mode flags */
- };
- 
- /*
-  * Pun for SUN.
-  */
- struct ttysize {
- 	unsigned short	ts_lines;
- 	unsigned short	ts_cols;
- 	unsigned short	ts_xxx;
- 	unsigned short	ts_yyy;
- };
- #define	TIOCGSIZE	TIOCGWINSZ
- #define	TIOCSSIZE	TIOCSWINSZ
- 
- 
- 
- 
- 
- #define TIOCGETD    _IOR('t', 0, int)       /* get line discipline */
- #define TIOCSETD    _IOW('t', 1, int)       /* set line discipline */
- #define TIOCHPCL    _IO('t', 2)             /* hang up on last close */
- #define TIOCMODG    _IOR('t', 3, int)       /* get modem control state */
- #define TIOCMODS    _IOW('t', 4, int)       /* set modem control state */
- #define TIOCM_LE    0001                    /* line enable */
- #define TIOCM_DTR   0002                    /* data terminal ready */
- #define TIOCM_RTS   0004                    /* request to send */
- #define TIOCM_ST    0010                    /* secondary transmit */
- #define TIOCM_SR    0020                    /* secondary receive */
- #define TIOCM_CTS   0040                    /* clear to send */
- #define TIOCM_CAR   0100                    /* carrier detect */
- #define TIOCM_CD    TIOCM_CAR
- #define TIOCM_RNG   0200                    /* ring */
- #define TIOCM_RI    TIOCM_RNG
- #define TIOCM_DSR   0400                    /* data set ready */
- #define TIOCGETP    _IOR('t', 8,struct sgttyb)      /* get parameters -- gtty */
- #define TIOCSETP    _IOW('t', 9,struct sgttyb)      /* set parameters -- stty */
- #define TIOCSETN    _IOW('t',10,struct sgttyb)  /* as above, but no flushtty */
- #define TIOCEXCL    _IO('t', 13)                /* set exclusive use of tty */
- #define TIOCNXCL    _IO('t', 14)                /* reset exclusive use of tty */
- #define TIOCFLUSH   _IOW('t', 16, int)          /* flush buffers */
- #define TIOCSETC    _IOW('t',17,struct tchars)  /* set special characters */
- #define TIOCGETC    _IOR('t',18,struct tchars)  /* get special characters */
- #define TANDEM      0x00000001                  /* send stopc on out q full */
- #define CBREAK      0x00000002                  /* half-cooked mode */
- #define LCASE       0x00000004                  /* simulate lower case */
- #define ECHO        0x00000008                  /* echo input */
- #define CRMOD       0x00000010                  /* map \r to \r\n on output */
- #define RAW         0x00000020                  /* no i/o processing */
- #define ODDP        0x00000040                  /* get/send odd parity */
- #define EVENP       0x00000080                  /* get/send even parity */
- #define ANYP        0x000000c0                  /* get any parity/send none */
- #define CRDELAY     0x00000300                  /* \r delay */
- #define CR0         0x00000000
- #define CR1         0x00000100                  /* tn 300 */
- #define CR2         0x00000200                  /* tty 37 */
- #define CR3         0x00000300                  /* concept 100 */
- #define TBDELAY     0x00000c00                  /* horizontal tab delay */
- #define TAB0        0x00000000
- #define TAB1        0x00000400                  /* tty 37 */
- #define TAB2        0x00000800
- #define XTABS       0x00000c00                  /* expand tabs on output */
- #define BSDELAY     0x00001000                  /* \b delay */
- #define BS0         0x00000000
- #define BS1         0x00001000
- #define VTDELAY     0x00002000                  /* vertical tab delay */
- #define FF0         0x00000000
- #define FF1         0x00002000                  /* tty 37 */
- #define NLDELAY     0x0000c000                  /* \n delay */
- #define NL0         0x00000000
- #define NL1         0x00004000                  /* tty 37 */
- #define NL2         0x00008000                  /* vt05 */
- #define NL3         0x0000c000
- #define ALLDELAY    (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY)
- #define TOSTOP      0x00010000                  /* SIGSTOP on bckgnd output */
- #define PRTERA      0x00020000                  /* \ ... / erase */
- #define CRTERA      0x00040000                  /* " \b " to wipe out char */
- #define TILDE       0x00080000                  /* hazeltine tilde kludge */
- #define FLUSHO      0x00100000                  /* flush output to terminal */
- #define LITOUT      0x00200000                  /* literal output */
- #define CRTBS       0x00400000                  /* do backspacing for crt */
- #define MDMBUF      0x00800000                  /* dtr pacing */
- #define NOHANG      0x01000000                  /* no SIGHUP on carrier drop */
- #define L001000     0x02000000
- #define CRTKIL      0x04000000                  /* kill line with " \b " */
- #define PASS8       0x08000000
- #define CTLECH      0x10000000                  /* echo control chars as ^X */
- #define PENDIN      0x20000000                  /* tp->t_rawq needs reread */
- #define DECCTQ      0x40000000                  /* only ^Q starts after ^S */
- #define NOFLUSH     0x80000000                  /* no output flush on signal */
- #define TIOCCONS    _IOW('t', 98, int)          /* become virtual console */
- #ifdef	_BSD_INCLUDES
- /*
-  * Added for 4.3 BSD.
-  */
- #define     NOFLSH      NOFLUSH                 /* no output flush on signal */
- #endif	/* _BSD_INCLUDES */
- 
- 						/* locals, from 127 down */
- #define TIOCLBIS    _IOW('t', 127, int)              /* bis local mode bits */
- #define TIOCLBIC    _IOW('t', 126, int)             /* bic local mode bits */
- #define TIOCLSET    _IOW('t', 125, int)             /* set entire mode word */
- #define TIOCLGET    _IOR('t', 124, int)             /* get local modes */
- #define LCRTBS      (CRTBS>>16)
- #define LPRTERA     (PRTERA>>16)
- #define LCRTERA     (CRTERA>>16)
- #define LTILDE      (TILDE>>16)
- #define LMDMBUF     (MDMBUF>>16)
- #define LLITOUT     (LITOUT>>16)
- #define LTOSTOP     (TOSTOP>>16)
- #define LFLUSHO     (FLUSHO>>16)
- #define LNOHANG     (NOHANG>>16)
- #define LCRTKIL     (CRTKIL>>16)
- #define LPASS8      (PASS8>>16)
- #define LCTLECH     (CTLECH>>16)
- #define LPENDIN     (PENDIN>>16)
- #define LDECCTQ     (DECCTQ>>16)
- #define LNOFLSH     (NOFLUSH>>16)
- #define TIOCSBRK    _IO('t', 123)                   /* set break bit */
- #define TIOCCBRK    _IO('t', 122)                   /* clear break bit */
- #define TIOCSDTR    _IO('t', 121)                   /* set data terminal ready */
- #define TIOCCDTR    _IO('t', 120)                   /* clear data terminal ready */
- #define TIOCGPGRP   _IOR('t', 119, int)             /* get process group */
- #define TIOCSPGRP   _IOW('t', 118, int)             /* set process gorup */
- #define TIOCSLTC    _IOW('t',117,struct ltchars)   /* set local special chars */
- #define TIOCGLTC    _IOR('t',116,struct ltchars)   /* get local special chars */
- #define TIOCOUTQ    _IOR('t', 115, int)             /* output queue size */
- #define TIOCSTI     _IOW('t', 114, char)           /* simulate terminal input */
- #define TIOCNOTTY   _IO('t', 113)                   /* void tty association */
- #define TIOCPKT     _IOW('t', 112, int)         /* pty: set/clear packet mode */
- #define TIOCPKT_DATA        0x00                    /* data packet */
- #define TIOCPKT_FLUSHREAD   0x01                    /* flush packet */
- #define TIOCPKT_FLUSHWRITE  0x02                    /* flush packet */
- #define TIOCPKT_STOP        0x04                    /* stop output */
- #define TIOCPKT_START       0x08                    /* start output */
- #define TIOCPKT_NOSTOP      0x10                    /* no more ^S, ^Q */
- #define TIOCPKT_DOSTOP      0x20                    /* now do ^S ^Q */
- #define TIOCSTOP    _IO('t', 111)                   /* stop output, like ^S */
- #define TIOCSTART   _IO('t', 110)                   /* start output, like ^Q */
- #define TIOCMSET    _IOW('t', 109, int)             /* set all modem bits */
- #define TIOCMBIS    _IOW('t', 108, int)             /* bis modem bits */
- #define TIOCMBIC    _IOW('t', 107, int)             /* bic modem bits */
- #define TIOCMGET    _IOR('t', 106, int)             /* get all modem bits */
- #define TIOCREMOTE  _IOW('t', 105, int)             /* remote input editing */
  #define TIOCGWINSZ  _IOR('t', 104, struct winsize)      /* get window size */
  #define TIOCSWINSZ  _IOW('t', 103, struct winsize)      /* set window size */
! #define TIOCUCNTL   _IOW('t', 102, int)         /* pty: set/clr usr cntl mode */
! #define UIOCCMD(n)  _IO('u', n)                         /* usr cntl op "n" */
! 
! #define OTTYDISC    0                               /* old, v7 std tty driver */
! #define NETLDISC    1                               /* line discip for berk net */
! #define NTTYDISC    2                               /* new tty discipline */
! #define TABLDISC    3                               /* tablet discipline */
! #define SLIPDISC    4                               /* serial IP discipline */
! 
! #define FIOCLEX     _IO('f', 1)                     /* set exclusive use on fd */
! #define FIONCLEX    _IO('f', 2)                     /* remove exclusive use */
! /* another local */
! 
! #define FIONREAD    _IOR('f', 127, int)                 /* get # bytes to read */
! #define FIONBIO     _IOW('f', 126, int)         /* set/clear non-blocking i/o */
! #define FIOASYNC    _IOW('f', 125, int)                 /* set/clear async i/o */
! 
! #define FIOSETOWN   _IOW('f', 124, int)                 /* set owner */
! #define FIOGETOWN   _IOR('f', 123, int)                 /* get owner */
! 
! 
! #endif /* 0 */
  
  int ioctl( int fd, int cmd, ...);
  
--- 112,121 ----
  	unsigned short	ws_ypixel;		/* vertical size, pixels */
  };
  
  #define TIOCGWINSZ  _IOR('t', 104, struct winsize)      /* get window size */
+ #if 0
  #define TIOCSWINSZ  _IOW('t', 103, struct winsize)      /* set window size */
! #endif
  
  int ioctl( int fd, int cmd, ...);
  
*** /cvs/djgpp/src/libc/compat/ioctl/ioctl.c	Sat Jun 23 16:43:08 2001
--- projects/ioctl/ioctl.c	Wed Aug  8 09:36:02 2001
*************** import djgpp 2.02
*** 107,115 ****
  #include <stdlib.h>
  #include <sys/fsext.h>
  #include <sys/ioctl.h>
  
  
-       
  /****************************************************************************/
  /****************************************************************************/
  /* S T A R T   O F   I M P L E M E N T A T I O N  ***************************/
--- 107,115 ----
  #include <stdlib.h>
  #include <sys/fsext.h>
  #include <sys/ioctl.h>
+ #include <libc/farptrgs.h>
  
  
  /****************************************************************************/
  /****************************************************************************/
  /* S T A R T   O F   I M P L E M E N T A T I O N  ***************************/
*************** static int _dos_ioctl(int fd, int cmd, i
*** 251,272 ****
  }
  
  
! static int _unix_ioctl(int fd,int cmd, int arg){
! /*
! ** What to do _HERE_ ?
! */
!     __FSEXT_Function *func = __FSEXT_get_function(fd);
!     if(func){
!         int rv;
!         if(func(__FSEXT_ioctl,&rv, &fd))
!            return rv;
      }
  
!     /*
!     ** All else fails so far.
!     */
!     errno =  ENOTTY;
!     return -1;
  }
  
  /*
--- 251,286 ----
  }
  
  
! static int _unix_ioctl(int fd, int cmd, va_list args)
! {
!   __FSEXT_Function *func = __FSEXT_get_function(fd);
!   if(func)
!   {
!     int rv;
!     if (func(__FSEXT_ioctl,&rv, &fd))
!        return rv;
!   }
! 
!   switch (cmd)
!   {
!     case TIOCGWINSZ:
!     {
!       struct winsize *win;
! 
!       win = va_arg(args, struct winsize *);
! 
!       _farsetsel(_dos_ds);
!       win->ws_row = _farnspeekb(0x0484) + 1;
!       win->ws_col = _farnspeekw(0x044a);
!       win->ws_xpixel = 1;
!       win->ws_ypixel = 1;
!       return 0;
      }
+   }
  
!   /* All else fails.  */
!   errno =  ENOSYS;
!   return -1;
  }
  
  /*
*************** static int _unix_ioctl(int fd,int cmd, i
*** 274,285 ****
  ** The user callable entry point.
  **
  */
! int ioctl(int fd, int cmd, ...){
!   va_list args;
    int argcx,argdx,argsi,argdi;
    int narg,xarg;
    __FSEXT_Function *func = __FSEXT_get_function(fd);
    int rv;
  
    /**
     ** see if this is a file system extension file
--- 288,300 ----
  ** The user callable entry point.
  **
  */
! int ioctl(int fd, int cmd, ...)
! {
    int argcx,argdx,argsi,argdi;
    int narg,xarg;
    __FSEXT_Function *func = __FSEXT_get_function(fd);
    int rv;
+   va_list args;
  
    /**
     ** see if this is a file system extension file
*************** int ioctl(int fd, int cmd, ...){
*** 288,298 ****
    if (func && func(__FSEXT_ioctl, &rv, &fd))
      return rv;
  
!   va_start(args,cmd);
!   
!   if(__IS_UNIX_IOCTL(cmd)){
!     int arg = va_arg(args, int);
!     va_end(args);
  #ifdef TEST
      {
      int inflg   = (cmd & IOC_IN)   == IOC_IN;
--- 303,312 ----
    if (func && func(__FSEXT_ioctl, &rv, &fd))
      return rv;
  
!   va_start(args, cmd);
! 
!   if(__IS_UNIX_IOCTL(cmd))
!   {
  #ifdef TEST
      {
      int inflg   = (cmd & IOC_IN)   == IOC_IN;
*************** int ioctl(int fd, int cmd, ...){
*** 309,315 ****
             inflg,outflg,voidflg,size);
      }
  #endif
!      return _unix_ioctl(fd,cmd,arg);
    }
    /* Handle a DOS request */
    /* extract arguments */
--- 323,329 ----
             inflg,outflg,voidflg,size);
      }
  #endif
!      return _unix_ioctl(fd, cmd, args);
    }
    /* Handle a DOS request */
    /* extract arguments */
*************** int ioctl(int fd, int cmd, ...){
*** 335,341 ****
  #include <sys/stat.h>
  #include <unistd.h>
  
! int main (int argc, char **argv){
      int fd;
      int res;
      short *s;
--- 349,356 ----
  #include <sys/stat.h>
  #include <unistd.h>
  
! int main (int argc, char **argv)
! {
      int fd;
      int res;
      short *s;

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019