10 static const int port=0x37a;
11 static const int port_ecr=0x37a+0x400;
13 #define LENGTH(x) (sizeof(x)/sizeof(*(x)))
15 static volatile struct termios tios;
17 static void cleanup(void) {
18 tcsetattr(0,TCSANOW,(struct termios *)&tios);
24 fprintf(stderr,"iopl 3: %m\n");
27 outb(0x00,port_ecr); // Standard Mode
28 int i=tcgetattr(0,(struct termios *)&tios);
31 struct termios tios_raw=tios;
33 i=tcsetattr(0,TCSANOW,&tios_raw);
36 static const struct item {
41 {"DAV=pin1" ,0x01,'1'},
42 {"NRFD=pin14",0x02,'2'},
43 {"NDAC=pin16",0x04,'4'},
44 {"ATN=pin17" ,0x08,'8'},
50 printf("out=0x%02x in=0x%02x",out,in);
51 for (const struct item *item=items;item<items+LENGTH(items);item++)
52 printf(" %s:out=%d,in=%d;'%c'",item->name,!!(out&item->mask),!!(in&item->mask),item->key);
56 pollfd.fd=STDIN_FILENO;
58 switch (poll(&pollfd,1,0)) {
61 ssize_t got=read(STDIN_FILENO,&c,1);
63 if (c==27||c==3||c=='\r') {
67 for (const struct item *item=items;item<items+LENGTH(items);item++)