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