+ seq_name = NULL;
+// COMMANDLINEOPTION: Linux ALSA Sound: -sndseqin <client>:<port> selects which sequencer port to use for input, by default no sequencer port is used (MIDI note events from that port get mapped to MIDINOTE<n> keys that can be bound)
+ i = COM_CheckParm ("-sndseqin"); // TODO turn this into a cvar, maybe
+ if (i != 0 && i < com_argc - 1)
+ seq_name = com_argv[i + 1];
+ if(seq_name)
+ {
+ seq_client = atoi(seq_name);
+ seq_port = 0;
+ if(strchr(seq_name, ':'))
+ seq_port = atoi(strchr(seq_name, ':') + 1);
+ Con_Printf ("SndSys_Init: seq input port has been set to \"%d:%d\". Enabling sequencer input...\n", seq_client, seq_port);
+ err = snd_seq_open (&seq_handle, "default", SND_SEQ_OPEN_INPUT, 0);
+ if (err < 0)
+ {
+ Con_Print ("SndSys_Init: can't open seq device\n");
+ goto seqdone;
+ }
+ err = snd_seq_set_client_name(seq_handle, gamename);
+ if (err < 0)
+ {
+ Con_Print ("SndSys_Init: can't set name of seq device\n");
+ goto seqerror;
+ }
+ err = snd_seq_create_simple_port(seq_handle, gamename, SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE, SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION);
+ if(err < 0)
+ {
+ Con_Print ("SndSys_Init: can't create seq port\n");
+ goto seqerror;
+ }
+ err = snd_seq_connect_from(seq_handle, 0, seq_client, seq_port);
+ if(err < 0)
+ {
+ Con_Printf ("SndSys_Init: can't connect to seq port \"%d:%d\"\n", seq_client, seq_port);
+ goto seqerror;
+ }
+ err = snd_seq_nonblock(seq_handle, 1);
+ if(err < 0)
+ {
+ Con_Print ("SndSys_Init: can't make seq nonblocking\n");
+ goto seqerror;
+ }
+
+ goto seqdone;
+
+seqerror:
+ snd_seq_close(seq_handle);
+ seq_handle = NULL;
+ }
+
+seqdone: