ioctl.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "lib.h"
  2. #include <minix/com.h>
  3. #include <sgtty.h>
  4. PUBLIC int ioctl(fd, request, u)
  5. int fd;
  6. int request;
  7. union {
  8. struct sgttyb *argp;
  9. struct tchars *argt;
  10. } u;
  11. {
  12. int n, ispeed, ospeed;
  13. long erase, kill, intr, quit, xon, xoff, eof, brk, speed;
  14. M.TTY_REQUEST = request;
  15. M.TTY_LINE = fd;
  16. switch(request) {
  17. case TIOCSETP:
  18. erase = u.argp->sg_erase & BYTE;
  19. kill = u.argp->sg_kill & BYTE;
  20. M.TTY_SPEK = (erase << 8) | kill;
  21. M.TTY_FLAGS = u.argp->sg_flags;
  22. M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed;
  23. n = callx(FS, IOCTL);
  24. return(n);
  25. case TIOCSETC:
  26. intr = u.argt->t_intrc & BYTE;
  27. quit = u.argt->t_quitc & BYTE;
  28. xon = u.argt->t_startc & BYTE;
  29. xoff = u.argt->t_stopc & BYTE;
  30. eof = u.argt->t_eofc & BYTE;
  31. brk = u.argt->t_brkc & BYTE; /* not used at the moment */
  32. M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0);
  33. M.TTY_FLAGS = (eof<<8) | (brk<<0);
  34. n = callx(FS, IOCTL);
  35. return(n);
  36. case TIOCGETP:
  37. n = callx(FS, IOCTL);
  38. u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE;
  39. u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE;
  40. u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF;
  41. speed = (M.TTY_FLAGS >> 16) & 0xFFFFL;
  42. u.argp->sg_ispeed = speed & BYTE;
  43. u.argp->sg_ospeed = (speed >> 8) & BYTE;
  44. return(n);
  45. case TIOCGETC:
  46. n = callx(FS, IOCTL);
  47. u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE;
  48. u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE;
  49. u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE;
  50. u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE;
  51. u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE;
  52. u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE;
  53. return(n);
  54. default:
  55. n = -1;
  56. errno = -(EINVAL);
  57. return(n);
  58. }
  59. }