10 static const int port=0x37a;
12 #define LENGTH(x) (sizeof(x)/sizeof(*(x)))
14 static volatile struct termios tios;
16 static void cleanup(void) {
17 tcsetattr(0,TCSANOW,(struct termios *)&tios);
22 if (ioperm(port,1,1)!=0) {
23 fprintf(stderr,"ioperm 0x%x: %m\n",port);
26 int i=tcgetattr(0,(struct termios *)&tios);
29 struct termios tios_raw=tios;
31 i=tcsetattr(0,TCSANOW,&tios_raw);
34 static const struct item {
39 {"DAV=pin1" ,0x01,'1'},
40 {"NRFD=pin14",0x02,'2'},
41 {"NDAC=pin16",0x04,'4'},
42 {"ATN=pin17" ,0x08,'8'},
48 printf("out=0x%02x in=0x%02x",out,in);
49 for (const struct item *item=items;item<items+LENGTH(items);item++)
50 printf(" %s:out=%d,in=%d;'%c'",item->name,!!(out&item->mask),!!(in&item->mask),item->key);
54 pollfd.fd=STDIN_FILENO;
56 switch (poll(&pollfd,1,0)) {
59 ssize_t got=read(STDIN_FILENO,&c,1);
61 if (c==27||c==3||c=='\r') {
65 for (const struct item *item=items;item<items+LENGTH(items);item++)