source: trunk/texinfo/lib/pc.c@ 2787

Last change on this file since 2787 was 2637, checked in by bird, 19 years ago

from older texinfo.

File size: 4.8 KB
Line 
1/* pc.c - terminal I/O calls for GNU info for OS/2
2 and other PC support functions
3 Kai Uwe Rommel, 1990-1993
4 */
5
6#if defined(__EMX__) || defined(__RSXNT__)
7
8#ifdef HAVE_CONFIG_H
9#include <config.h>
10#endif
11
12#include <stdio.h>
13#include <stdlib.h>
14
15#include <io.h>
16#include <fcntl.h>
17#include <sys/stat.h>
18#include <string.h>
19#include <sys/kbdscan.h>
20
21#ifndef __RSXNT__
22#define INCL_VIO
23#include <os2emx.h>
24static VIOCURSORINFO vci;
25#endif
26
27#include "pc.h"
28
29int is_xfree86 = XFREE86_NO; /* bird */
30
31#ifdef __RSXNT__
32
33char buffer[4096];
34int idx;
35
36static void pc_flush(void)
37{
38 if (idx > 0)
39 _rsxnt_write_with_ansi (buffer, idx);
40
41 idx = 0;
42}
43
44void pc_putc (int c)
45{
46 if (idx == sizeof(buffer))
47 pc_flush();
48
49 buffer[idx++] = (char) c;
50}
51
52void pc_puts (char *s)
53{
54 while (*s)
55 pc_putc(*s++);
56}
57
58void pc_putx (char *s, int x)
59{
60 for (; x; x--)
61 pc_putc(*s++);
62}
63
64#endif
65
66void pc_init (void)
67{
68#ifdef __RSXNT__
69 extern void (*terminal_put_text_hook)();
70 extern void (*terminal_write_chars_hook)();
71 terminal_put_text_hook = pc_puts;
72 terminal_write_chars_hook = pc_putx;
73#else
74 VIOCURSORINFO vcin;
75 VioGetCurType(&vci, 0);
76 vcin = vci;
77 vcin.yStart = 0;
78 vcin.cEnd = -100;
79 VioSetCurType(&vcin, 0);
80#endif
81}
82
83void pc_exit (void)
84{
85#ifndef __RSXNT__
86 VioSetCurType(&vci, 0);
87#endif
88}
89
90int pc_getc (int wait)
91{
92 int c;
93 static int next;
94
95 if (next)
96 return c = next, next = 0, c;
97
98#ifdef __RSXNT__
99 if (wait)
100 pc_flush();
101#endif
102
103 if ((c = _read_kbd (0, wait, 0)) == -1)
104 return -1;
105
106 if (c == 26)
107 return next = 'V', 27;
108 if (c != 0x00 && c != 0xE0)
109 return c;
110
111 if ((c = _read_kbd (0, wait, 0)) == -1)
112 return -1;
113
114 switch (c)
115 {
116 case K_F1:
117 return 'H' - 64;
118
119 case K_HOME:
120 return 'A' - 64;
121 case K_END:
122 return 'E' - 64;
123
124 case K_CTRL_HOME:
125 return next = '<', 27;
126 case K_CTRL_END:
127 return next = '>', 27;
128
129 case K_RIGHT:
130 return 'F' - 64;
131 case K_LEFT:
132 return 'B' - 64;
133 case K_DOWN:
134 return 'N' - 64;
135 case K_UP:
136 return 'P' - 64;
137 case K_INS: /* jsawa */
138 return 0; /* How can we toggle insert mode ??? */
139 case K_CTRL_LEFT:
140 return next = 'B', 27;
141 case K_CTRL_RIGHT:
142 return next = 'F', 27;
143#ifdef __EMX__
144 case K_ALT_0: /* for M+'0' : */
145 return next = '0', 27;
146 case K_ALT_1: /* for M+'1' : */
147 return next = '1', 27;
148 case K_ALT_2: /* for M+'2' : */
149 return next = '2', 27;
150 case K_ALT_3: /* for M+'3' : */
151 return next = '3', 27;
152 case K_ALT_4: /* for M+'4' : */
153 return next = '4', 27;
154 case K_ALT_5: /* for M+'5' : */
155 return next = '5', 27;
156 case K_ALT_6: /* for M+'6' : */
157 return next = '6', 27;
158 case K_ALT_7: /* for M+'7' : */
159 return next = '7', 27;
160 case K_ALT_8: /* for M+'8' : */
161 return next = '8', 27;
162 case K_ALT_9: /* for M+'9' : */
163 return next = '9', 27;
164 case K_ALT_A:
165 return next = 'A', 27;
166 case K_ALT_B:
167 return next = 'B', 27;
168 case K_ALT_C:
169 return next = 'C', 27;
170 case K_ALT_D:
171 return next = 'D', 27;
172 case K_ALT_E:
173 return next = 'E', 27;
174 case K_ALT_F:
175 return next = 'F', 27;
176 case K_ALT_G:
177 return next = 'G', 27;
178 case K_ALT_H:
179 return next = 'H', 27;
180 case K_ALT_I:
181 return next = 'I', 27;
182 case K_ALT_J:
183 return next = 'J', 27;
184 case K_ALT_K:
185 return next = 'K', 27;
186 case K_ALT_L:
187 return next = 'L', 27;
188 case K_ALT_M:
189 return next = 'M', 27;
190 case K_ALT_N:
191 return next = 'N', 27;
192 case K_ALT_O:
193 return next = 'O', 27;
194 case K_ALT_P:
195 return next = 'P', 27;
196 case K_ALT_Q:
197 return next = 'Q', 27;
198 case K_ALT_R:
199 return next = 'R', 27;
200 case K_ALT_S:
201 return next = 'S', 27;
202 case K_ALT_T:
203 return next = 'T', 27;
204 case K_ALT_U:
205 return next = 'U', 27;
206 case K_ALT_V:
207 return next = 'V', 27;
208 case K_ALT_W:
209 return next = 'W', 27;
210 case K_ALT_X:
211 return next = 'X', 27;
212 case K_ALT_Y:
213 return next = 'Y', 27;
214 case K_ALT_Z:
215 return next = 'Z', 27;
216 case K_ALT_DEL: /* for M+'DEL' : scroll-other-window-backward */
217 return next = '\177', 27;
218 case K_ALT_PERIOD: /* for M+'<' beginning-of-node */
219 return next = '<', 27;
220 case K_ALT_COMMA: /* for M+'>' end-of-node */
221 return next = '>', 27;
222 case K_ALT_PAD_MINUS: /* for M+'-' add-digit-to-numeric-arg */
223 return next = '-', 27;
224#endif
225 case K_DEL:
226 return 'D' - 64;
227 case K_PAGEUP:
228 return next = 'V', 27;
229 case K_PAGEDOWN:
230 return 'V' - 64;
231 default:
232 return ' ';
233 }
234}
235
236#endif /* pc check */
Note: See TracBrowser for help on using the repository browser.