1 /* Program to test the svgalib keyboard functions. */
2 
3 #include <unistd.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <time.h>
7 #include <vga.h>
8 #include <vgagl.h>
9 #include <vgakeyboard.h>
10 
usage(void)11 void usage(void)
12 {
13     puts("Usage: printftest <x> <y>\n"
14 	"\tread text from keyboard and display it on screen\n"
15 	"\tat position (x, y).\n"
16 	"\t<ctrl>-D for quit\n"
17 	"\t<ctrl>-R for carriage return\n"
18 	"\t<Return> for line feed\n"
19 	"\t<Tab>    for tab\n"
20 	"\t<ctrl>-G for bell\n"
21 	"\t<ctrl>-H for backspace (non overwriting)\n"
22     );
23     exit(2);
24 }
25 
main(int argc,char ** argv)26 void main(int argc, char **argv)
27 {
28     int x, y;
29     char buffer[2];
30     int vgamode;
31     int key, retval = 0;
32 
33     if (argc != 3)
34 	usage();
35     if (1 != sscanf(argv[1], "%d%c", &x, buffer))
36 	usage();
37     if (1 != sscanf(argv[2], "%d%c", &y, buffer))
38 	usage();
39 
40     vga_init();
41     vgamode = vga_getdefaultmode();
42     if (vgamode == -1)
43 	vgamode = G320x200x256;
44 
45     if (!vga_hasmode(vgamode)) {
46 	printf("Mode not available.\n");
47 	exit(1);
48     }
49 
50     vga_setmode(vgamode);
51     gl_setcontextvga(vgamode);
52     gl_enableclipping();
53     gl_setfont(8, 8, gl_font8x8);
54     gl_setwritemode(FONT_COMPRESSED + WRITEMODE_OVERWRITE);
55     gl_setfontcolors(0, vga_white());
56 
57     buffer[1] = 0;
58     for(;;) {
59 	key = vga_getch();
60 	if (key == 4)
61 	    break;
62 	if (key == 18)
63 	    key = '\r';
64 	buffer[0] = key;
65 	gl_printf(x, y, "%s", buffer);
66 	x = y = -1;
67     }
68 
69     vga_setmode(TEXT);
70 
71     exit(retval);
72 }
73