File: linux_console.rb

package info (click to toggle)
jruby 1.7.26-1%2Bdeb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 84,572 kB
  • sloc: ruby: 669,910; java: 253,056; xml: 35,152; ansic: 9,187; yacc: 7,267; cpp: 5,244; sh: 1,036; makefile: 345; jsp: 48; tcl: 40
file content (200 lines) | stat: -rw-r--r-- 3,845 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
require 'ffi'

raise LoadError.new("native console only supported on i386, x86_64 and powerpc64") unless FFI::Platform::ARCH =~ /i386|x86_64|powerpc64/

module IO::LibC
  extend FFI::Library
  ffi_lib FFI::Library::LIBC

  typedef :uint, :tcflag_t
  typedef :uint, :speed_t

  VINTR = 0
  VQUIT = 1
  VERASE = 2
  VKILL = 3
  VEOF = 4
  VTIME = 5
  VMIN = 6
  VSWTC = 7
  VSTART = 8
  VSTOP = 9
  VSUSP = 10
  VEOL = 11
  VREPRINT = 12
  VDISCARD = 13
  VWERASE = 14
  VLNEXT = 15
  VEOL2 = 16

  # c_iflag bits
  IGNBRK = 0000001
  BRKINT = 0000002
  IGNPAR = 0000004
  PARMRK = 0000010
  INPCK = 0000020
  ISTRIP = 0000040
  INLCR = 0000100
  IGNCR = 0000200
  ICRNL = 0000400
  IUCLC = 0001000
  IXON = 0002000
  IXANY = 0004000
  IXOFF = 0010000
  IMAXBEL = 0020000
  IUTF8 = 0040000

  # c_oflag bits
  OPOST = 0000001
  OLCUC = 0000002
  ONLCR = 0000004
  OCRNL = 0000010
  ONOCR = 0000020
  ONLRET = 0000040
  OFILL = 0000100
  OFDEL = 0000200
  NLDLY = 0000400
  NL0 = 0000000
  NL1 = 0000400
  CRDLY = 0003000
  CR0 = 0000000
  CR1 = 0001000
  CR2 = 0002000
  CR3 = 0003000
  TABDLY = 0014000
  TAB0 = 0000000
  TAB1 = 0004000
  TAB2 = 0010000
  TAB3 = 0014000
  XTABS = 0014000
  BSDLY = 0020000
  BS0 = 0000000
  BS1 = 0020000
  VTDLY = 0040000
  VT0 = 0000000
  VT1 = 0040000
  FFDLY = 0100000
  FF0 = 0000000
  FF1 = 0100000

  # c_cflag bit meaning
  CBAUD = 0010017
  B0 = 0000000
  B50 = 0000001
  B75 = 0000002
  B110 = 0000003
  B134 = 0000004
  B150 = 0000005
  B200 = 0000006
  B300 = 0000007
  B600 = 0000010
  B1200 = 0000011
  B1800 = 0000012
  B2400 = 0000013
  B4800 = 0000014
  B9600 = 0000015
  B19200 = 0000016
  B38400 = 0000017
  EXTA = B19200
  EXTB = B38400
  CSIZE = 0000060
  CS5 = 0000000
  CS6 = 0000020
  CS7 = 0000040
  CS8 = 0000060
  CSTOPB = 0000100
  CREAD = 0000200
  PARENB = 0000400
  PARODD = 0001000
  HUPCL = 0002000
  CLOCAL = 0004000
  CBAUDEX = 0010000
  BOTHER = 0010000
  B57600 = 0010001
  B115200 = 0010002
  B230400 = 0010003
  B460800 = 0010004
  B500000 = 0010005
  B576000 = 0010006
  B921600 = 0010007
  B1000000 = 0010010
  B1152000 = 0010011
  B1500000 = 0010012
  B2000000 = 0010013
  B2500000 = 0010014
  B3000000 = 0010015
  B3500000 = 0010016
  B4000000 = 0010017
  CIBAUD	  = 002003600000
  CMSPAR	  = 010000000000
  CRTSCTS	  = 020000000000

  IBSHIFT	  = 16

  # c_lflag bits
  ISIG = 0000001
  ICANON = 0000002
  XCASE = 0000004
  ECHO = 0000010
  ECHOE = 0000020
  ECHOK = 0000040
  ECHONL = 0000100
  NOFLSH = 0000200
  TOSTOP = 0000400
  ECHOCTL = 0001000
  ECHOPRT = 0002000
  ECHOKE = 0004000
  FLUSHO = 0010000
  PENDIN = 0040000
  IEXTEN = 0100000

  # tcflow() and TCXONC use these
  TCOOFF	 = 0
  TCOON	 = 1
  TCIOFF	 = 2
  TCION	 = 3

  # tcflush() and TCFLSH use these
  TCIFLUSH = 0
  TCOFLUSH = 1
  TCIOFLUSH = 2

  # tcsetattr uses these
  TCSANOW	 = 0
  TCSADRAIN = 1
  TCSAFLUSH = 2
  NCCS = 19
  class Termios < FFI::Struct
    layout \
      :c_iflag, :tcflag_t,
      :c_oflag, :tcflag_t,
      :c_cflag, :tcflag_t,
      :c_lflag, :tcflag_t,
      :c_line, :uchar,
      :cc_c, [ :uchar, NCCS ],
      :c_ispeed, :speed_t,
      :c_ospeed, :speed_t
  end

  class Winsize < FFI::Struct
    layout \
      :ws_row, :ushort,
      :ws_col, :ushort,
      :ws_xpixel, :ushort,
      :ws_ypixel, :ushort
  end


  TIOCGWINSZ = 0x5413
  TIOCSWINSZ = 0x5414

  attach_function :tcsetattr, [ :int, :int, Termios ], :int
  attach_function :tcgetattr, [ :int, Termios ], :int
  attach_function :cfgetispeed, [ Termios ], :speed_t
  attach_function :cfgetospeed, [ Termios ], :speed_t
  attach_function :cfsetispeed, [ Termios, :speed_t ], :int
  attach_function :cfsetospeed, [ Termios, :speed_t ], :int
  attach_function :cfmakeraw, [ Termios ], :int
  attach_function :tcflush, [ :int, :int ], :int
  attach_function :ioctl, [ :int, :ulong, :varargs ], :int
end