1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;; rc_01_input_sioa ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4;
5; The keyboard is read via sioa library routines.
6;
7;   * Keyboard reads are blocking.
8;
9; This subroutine inherits the library's console_01_input
10; terminal code which implements line editing and various
11; other niceties.  This means this input console must be
12; tied to an output terminal that understands console_01_input
13; terminal messages.
14;
15; ;;;;;;;;;;;;;;;;;;;;
16; DRIVER CLASS DIAGRAM
17; ;;;;;;;;;;;;;;;;;;;;
18;
19; CONSOLE_01_INPUT_TERMINAL (root, abstract)
20; RC_01_INPUT_SIOA (concrete)
21;
22; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
23; MESSAGES CONSUMED FROM STDIO
24; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
25;
26; * STDIO_MSG_GETC
27; * STDIO_MSG_EATC
28; * STDIO_MSG_READ
29; * STDIO_MSG_SEEK
30; * STDIO_MSG_FLSH
31; * STDIO_MSG_ICTL
32; * STDIO_MSG_CLOS
33;
34; Others result in enotsup_zc.
35;
36; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
37; MESSAGES CONSUMED FROM CONSOLE_01_INPUT_TERMINAL
38; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
39;
40; * ITERM_MSG_GETC
41; * ITERM_MSG_INTERRUPT
42; * ITERM_MSG_REJECT
43;
44; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
45; MESSAGES GENERATED FOR CONSOLE_01_OUTPUT_TERMINAL
46; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47;
48; * ITERM_MSG_PUTC
49; * ITERM_MSG_PRINT_CURSOR
50; * ITERM_MSG_ERASE_CURSOR
51; * ITERM_MSG_BS
52; * ITERM_MSG_BS_PWD
53; * ITERM_MSG_READLINE_BEGIN
54; * ITERM_MSG_READLINE_END
55; * ITERM_MSG_BELL
56;
57; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
58; IOCTLs UNDERSTOOD BY THIS DRIVER
59; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
60;
61; * IOCTL_ITERM_RESET
62;
63; * IOCTL_ITERM_TIE
64;   Attach input device to a different output terminal (0 to disconnect)
65;
66; * IOCTL_ITERM_GET_EDITBUF
67;   Copies edit buffer details to user program
68;
69; * IOCTL_ITERM_SET_EDITBUF
70;   Writes edit buffer details into driver
71;
72; * IOCTL_ITERM_ECHO
73;   enable / disable echo mode
74;
75; * IOCTL_ITERM_PASS
76;   enable / disable password mode
77;
78; * IOCTL_ITERM_LINE
79;   enable / disable line editing mode
80;
81; * IOCTL_ITERM_COOK
82;   enable / disable cook mode
83;
84; * IOCTL_ITERM_CAPS
85;   set / reset caps lock
86;
87; * IOCTL_ITERM_CRLF
88;   enable / disable crlf processing
89;
90; * IOCTL_ITERM_CURS
91;   enable / disable cursor in line mode
92;
93; ;;;;;;;;;;;;;;;;;;;;;;;;;;
94; BYTES RESERVED IN FDSTRUCT
95; ;;;;;;;;;;;;;;;;;;;;;;;;;;
96;
97; offset (wrt FDSTRUCT.JP)  description
98;
99;    8..13                  mutex
100;   14..15                  FDSTRUCT *oterm (connected output terminal, 0 if none)
101;   16                      pending_char
102;   17..18                  read_index (index of next char to read from edit buffer)
103;   19..24                  b_array (manages edit buffer)
104
105SECTION code_driver
106SECTION code_driver_terminal_input
107
108PUBLIC rc_01_input_sioa
109
110EXTERN ITERM_MSG_GETC, ITERM_MSG_INTERRUPT, ITERM_MSG_REJECT, STDIO_MSG_FLSH
111
112EXTERN console_01_input_terminal
113EXTERN rc_01_input_sioa_iterm_msg_getc
114EXTERN rc_01_input_sioa_iterm_msg_interrupt
115EXTERN rc_01_input_sioa_iterm_msg_reject
116EXTERN rc_01_input_sioa_stdio_msg_flsh
117
118rc_01_input_sioa:
119
120   cp ITERM_MSG_GETC
121   jp z, rc_01_input_sioa_iterm_msg_getc
122
123   cp ITERM_MSG_INTERRUPT
124   jp z, rc_01_input_sioa_iterm_msg_interrupt
125
126   cp ITERM_MSG_REJECT
127   jp z, rc_01_input_sioa_iterm_msg_reject
128
129   cp STDIO_MSG_FLSH
130   jp z, rc_01_input_sioa_stdio_msg_flsh
131
132   jp console_01_input_terminal    ; forward to library
133