int bind (int fd, const struct sockaddr *sk, socklen_t sl) { switch (sk->sa_family) { case AF_INET: { struct sockaddr_in *lsk_in = (struct sockaddr_in *)sk; #ifdef DEBUG char addr_buf[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &lsk_in->sin_addr, addr_buf, sizeof(addr_buf)); debug_printf("[libmultid::bind()] IPv4 fd=%d %s:%d\n", fd, addr_buf, ntohs (lsk_in->sin_port)); #endif if (change_port (&lsk_in->sin_port)) BIND_TO_LOCAL4(lsk_in->sin_addr.s_addr); #ifdef DEBUG inet_ntop(AF_INET, &lsk_in->sin_addr, addr_buf, sizeof(addr_buf)); debug_printf("[libmultid::bind()] IPv4 fd=%d %s:%d\n", fd, addr_buf, ntohs (lsk_in->sin_port)); #endif } break; #ifdef D_IPV6 case AF_INET6: { struct sockaddr_in6 *lsk_in6 = (struct sockaddr_in6 *)sk; #ifdef DEBUG char addr_buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, &lsk_in6->sin6_addr, addr_buf, sizeof(addr_buf)); debug_printf("[libmultid::bind()] IPv6 fd=%d [%s]:%d\n", fd, addr_buf, ntohs (lsk_in6->sin6_port)); #endif if (change_port (&lsk_in6->sin6_port)) BIND_TO_LOCAL6(lsk_in6->sin6_addr); #ifdef DEBUG inet_ntop(AF_INET6, &lsk_in6->sin6_addr, addr_buf, sizeof(addr_buf)); debug_printf("[libmultid::bind()] IPv6 fd=%d [%s]:%d\n", fd, addr_buf, ntohs (lsk_in6->sin6_port)); #endif } break; #endif default: debug_printf("[libmultid::bind()] address family unknown af=%d fd=%d\n", sk->sa_family, fd); break; } return real_bind (fd, sk, sl); }
int main(int argc, char** argv) { int fd; fd = open(DEVICE_FILE_NAME, 0); if (fd < 0) { printf("Can't open device file: %s\n", DEVICE_FILE_NAME); switch (errno) { case EACCES: printf ("Permission denied. Errno: %d\n", errno); break; /* case EINVACC: printf ("Invalid access mode.\n"); break; */ case EMFILE: printf ("No file handle available. Errno: %d\n", errno); break; case ENOENT: printf ("File or path not found. Errno: %d\n", errno); break; default: printf ("Unknown error. Errno: %d\n", errno); break; } exit(-1); } change_port(fd); flush_addresses(fd); close(fd); }
ex_midi() { int edit_obj,exit_obj,mstate,done; register int i; static int filtbox[2]= { FILTBOX0, FILTBOX1 }; static int thrubox[2]= { THRUBOX0, THRUBOX1 }; static char *opsysstr[3]= { "", CLAB_MSG, MROS_MSG }; char *delayptr; /* encode into dialog box */ strcpy(midiaddr[THRUCHAN].ob_spec,chanchar[thruchan+1]); strcpy(midiaddr[MIDIPCHN].ob_spec,chanchar[midipchan+1]); delayptr= ((TEDINFO*)(midiaddr[MIDIPDLY].ob_spec))->te_ptext; itoa(midipdelay,delayptr,3); sel_obj(midithru,midiaddr,THRUON); for (i=0; i<6; i++) if (midi_speed==speedtable[i]) break; set_rbutton(midiaddr,MIDIRATE,6,i); for (i=0; i<4; i++) sel_obj(BITTEST(i,midi_filter),midiaddr,MIDIFILT+i); ena_obj(midiplexer,midiaddr,MIDIITHR); ena_obj(midiplexer,midiaddr,MIDIOTHR); ena_obj(midiplexer,midiaddr,MIDIIPRT); ena_obj(midiplexer,midiaddr,MIDIOPRT); ena_obj(midiplexer,midiaddr,MIDIPPRT); midiaddr[MIDIITHR].ob_spec[0]= 'A' + thru_rport*(midiplexer&1); midiaddr[MIDIOTHR].ob_spec[0]= 'A' + thru_tport*(midiplexer&1); midiaddr[MIDIIPRT].ob_spec[0]= 'A' + midi_rport*(midiplexer&1); midiaddr[MIDIOPRT].ob_spec[0]= 'A' + midi_tport*(midiplexer&1); midiaddr[MIDIPPRT].ob_spec[0]= 'A' + midi_pport*(midiplexer&1); /* hide options that are irrelevant while running under midi op sys */ i= midi_opsys>0 ; /* 0= normal, 1= SoftLink, etc. */ midiaddr[filtbox[i]].ob_flags &= ~HIDETREE; midiaddr[thrubox[i]].ob_flags &= ~HIDETREE; midiaddr[filtbox[!i]].ob_flags |= HIDETREE; midiaddr[thrubox[!i]].ob_flags |= HIDETREE; midiaddr[filtbox[1]].ob_spec= opsysstr[midi_opsys]; midiaddr[thrubox[1]].ob_spec= opsysstr[midi_opsys]; done=0; putdial(midiaddr,-1,0); edit_obj= MIDIPDLY; do { exit_obj= my_form_do(midiaddr,&edit_obj,&mstate,0,&dummy); switch (exit_obj) { case THRUCHAN: i= thruchan+mstate; if (i<0) i= 15; if (i>15) i= 0; if (midithru) thru_nts_off(); thruchan=i; strcpy(midiaddr[THRUCHAN].ob_spec,chanchar[thruchan+1]); draw_object(midiaddr,exit_obj); break; case MIDIPCHN: i= midipchan+mstate; if (i<0) i= 15; if (i>15) i= 0; midipchan=i; strcpy(midiaddr[MIDIPCHN].ob_spec,chanchar[midipchan+1]); draw_object(midiaddr,exit_obj); break; case MIDIITHR: change_port(&thru_rport,1,exit_obj,mstate); break; case MIDIOTHR: change_port(&thru_tport,3,exit_obj,mstate); break; case MIDIIPRT: change_port(&midi_rport,1,exit_obj,mstate); break; case MIDIOPRT: change_port(&midi_tport,3,exit_obj,mstate); break; case MIDIPPRT: change_port(&midi_pport,3,exit_obj,mstate); break; case THRUON: midithru= is_obj_sel(midiaddr,THRUON); if (!midithru) thru_nts_off(); break; case OKMIDI: done=1; } waitmouse(); /* none of these auto-repeat */ } while (!done); /* decode out of dialog box */ midi_speed= speedtable[ whichbutton(midiaddr,MIDIRATE,6) ]; midi_filter= 0; for (i=0; i<4; i++) if (is_obj_sel(midiaddr,MIDIFILT+i)) BITSET(i,midi_filter); i= atoi(delayptr); if ((i>=0)&&(i<=255)) midipdelay=i; putdial(0L,0,exit_obj); } /* end ex_midi() */