/* this is called instead of sys_main() to start things */ void libpd_init(void) { signal(SIGFPE, SIG_IGN); libpd_start_message(32); // allocate array for message assembly //printf ( "%p\n", &libpd_printhook ); sys_printhook = (t_printhook) libpd_printhook; sys_soundin = NULL; sys_soundout = NULL; // are all these settings necessary? sys_schedblocksize = DEFDACBLKSIZE; sys_externalschedlib = 0; sys_printtostderr = 0; sys_usestdpath = 0; // don't use pd_extrapath, only sys_searchpath sys_debuglevel = 0; sys_verbose = 0; sys_noloadbang = 0; sys_nogui = 1; sys_hipriority = 0; sys_nmidiin = 0; sys_nmidiout = 0; sys_time = 0; pd_init(); libpdreceive_setup(); sys_set_audio_api(API_DUMMY); sys_searchpath = NULL; }
/* this is called instead of sys_main() to start things */ int libpd_init(void) { static int initialized = 0; if (initialized) return -1; // only allow init once (for now) initialized = 1; signal(SIGFPE, SIG_IGN); libpd_start_message(32); // allocate array for message assembly sys_printhook = (t_printhook) libpd_printhook; sys_soundin = NULL; sys_soundout = NULL; // are all these settings necessary? sys_schedblocksize = DEFDACBLKSIZE; sys_externalschedlib = 0; sys_printtostderr = 0; sys_usestdpath = 0; // don't use pd_extrapath, only sys_searchpath sys_debuglevel = 0; sys_verbose = 0; sys_noloadbang = 0; sys_nogui = 1; sys_hipriority = 0; sys_nmidiin = 0; sys_nmidiout = 0; sys_init_fdpoll(); #ifdef HAVE_SCHED_TICK_ARG sys_time = 0; #endif pd_init(); libpdreceive_setup(); sys_set_audio_api(API_DUMMY); sys_searchpath = NULL; #ifdef LIBPD_EXTRA bob_tilde_setup(); bonk_tilde_setup(); choice_setup(); expr_setup(); fiddle_tilde_setup(); loop_tilde_setup(); lrshift_tilde_setup(); pique_setup(); sigmund_tilde_setup(); stdout_setup(); #endif return 0; }
Pd::Pd() noexcept { signal(SIGFPE, SIG_IGN); sys_printhook = NULL; sys_soundin = NULL; sys_soundout = NULL; // are all these settings necessary? sys_schedblocksize = DEFDACBLKSIZE; sys_externalschedlib = 0; sys_printtostderr = 0; sys_usestdpath = 0; sys_debuglevel = 1; sys_verbose = 1; sys_noloadbang = 0; sys_nogui = 1; sys_hipriority = 0; sys_nmidiin = 0; sys_nmidiout = 0; sys_init_fdpoll(); #ifdef HAVE_SCHED_TICK_ARG sys_time = 0; #endif pd_init(); sys_set_audio_api(API_DUMMY); sys_searchpath = NULL; m_sample_rate = 0; int indev[MAXAUDIOINDEV], inch[MAXAUDIOINDEV], outdev[MAXAUDIOOUTDEV], outch[MAXAUDIOOUTDEV]; indev[0] = outdev[0] = DEFAULTAUDIODEV; inch[0] = m_max_channels; outch[0] = m_max_channels; sys_set_audio_settings(1, indev, 1, inch, 1, outdev, 1, outch, 44100, -1, 1, DEFDACBLKSIZE); sched_set_using_audio(SCHED_AUDIO_CALLBACK); sys_reopen_audio(); m_sample_rate = sys_getsr(); m_console.clear(); m_console.push_back({"Camomile " + getVersion()+" for Pure Data "+getPdVersion()+"\n", Post::Type::Log}); m_console_changed = true; sys_printhook = reinterpret_cast<t_printhook>(print); }
static void audiosettings_setdriver(t_audiosettings *x, t_symbol*s, int argc, t_atom*argv) { int id=-1; s=gensym("<unknown>"); /* just re-use the argument, which is not needed anyhow */ switch(argc) { case 0: audiosettings_listdrivers(x); return; case 1: if(A_FLOAT==argv->a_type) { s=as_getdrivername(atom_getint(argv)); break; } else if (A_SYMBOL==argv->a_type) { s=atom_getsymbol(argv); break; } } id=as_getdriverid(s); if(id<0) { pd_error(x, "invalid driver '%s'", s->s_name); return; } verbose(1, "setting driver '%s' (=%d)", s->s_name, id); #ifdef HAVE_SYS_CLOSE_AUDIO sys_close_audio(); sys_set_audio_api(id); sys_reopen_audio(); #else if (s_pdsym->s_thing) { t_atom ap[1]; SETFLOAT(ap, id); typedmess(s_pdsym->s_thing, gensym("audio-setapi"), 1, ap); } #endif }
int sys_argparse(int argc, char **argv) { char sbuf[MAXPDSTRING]; int i; while ((argc > 0) && **argv == '-') { if (!strcmp(*argv, "-r") && argc > 1 && sscanf(argv[1], "%d", &sys_main_srate) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-inchannels") && (argc > 1)) { sys_parsedevlist(&sys_nchin, sys_chinlist, MAXAUDIOINDEV, argv[1]); if (!sys_nchin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-outchannels") && (argc > 1)) { sys_parsedevlist(&sys_nchout, sys_choutlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-channels") && (argc > 1)) { sys_parsedevlist(&sys_nchin, sys_chinlist,MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nchout, sys_choutlist,MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundbuf") || !strcmp(*argv, "-audiobuf") && (argc > 1)) { sys_main_advance = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-callback")) { sys_main_callback = 1; argc--; argv++; } else if (!strcmp(*argv, "-blocksize")) { sys_main_blocksize = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-sleepgrain") && (argc > 1)) { sys_sleepgrain = 1000 * atof(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nodac")) { sys_nsoundout=0; sys_nchout = 0; argc--; argv++; } else if (!strcmp(*argv, "-noadc")) { sys_nsoundin=0; sys_nchin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nosound") || !strcmp(*argv, "-noaudio")) { sys_nsoundin=sys_nsoundout = 0; sys_nchin = sys_nchout = 0; argc--; argv++; } #ifdef USEAPI_OSS else if (!strcmp(*argv, "-oss")) { sys_set_audio_api(API_OSS); argc--; argv++; } #endif #ifdef USEAPI_ALSA else if (!strcmp(*argv, "-alsa")) { sys_set_audio_api(API_ALSA); argc--; argv++; } else if (!strcmp(*argv, "-alsaadd") && (argc > 1)) { if (argc > 1) alsa_adddev(argv[1]); else goto usage; argc -= 2; argv +=2; } else if (!strcmp(*argv, "-alsamidi")) { sys_set_midi_api(API_ALSA); argc--; argv++; } #endif #ifdef USEAPI_JACK else if (!strcmp(*argv, "-jack")) { sys_set_audio_api(API_JACK); argc--; argv++; } #endif #ifdef USEAPI_PORTAUDIO else if (!strcmp(*argv, "-pa") || !strcmp(*argv, "-portaudio") #ifdef MSW || !strcmp(*argv, "-asio") #endif ) { sys_set_audio_api(API_PORTAUDIO); sys_mmio = 0; argc--; argv++; } #endif #ifdef USEAPI_MMIO else if (!strcmp(*argv, "-mmio")) { sys_set_audio_api(API_MMIO); sys_mmio = 1; argc--; argv++; } #endif #ifdef USEAPI_AUDIOUNIT else if (!strcmp(*argv, "-audiounit")) { sys_set_audio_api(API_AUDIOUNIT); argc--; argv++; } #endif #ifdef USEAPI_ESD else if (!strcmp(*argv, "-esd")) { sys_set_audio_api(API_ESD); argc--; argv++; } #endif else if (!strcmp(*argv, "-nomidiin")) { sys_nmidiin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidiout")) { sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidi")) { sys_nmidiin = sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-midiindev")) { sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); if (!sys_nmidiin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midioutdev") && (argc > 1)) { sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-mididev") && (argc > 1)) { sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-path") && (argc > 1)) { sys_searchpath = namelist_append_files(sys_searchpath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nostdpath")) { sys_usestdpath = 0; argc--; argv++; } else if (!strcmp(*argv, "-stdpath")) { sys_usestdpath = 1; argc--; argv++; } else if (!strcmp(*argv, "-helppath")) { sys_helppath = namelist_append_files(sys_helppath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-open") && argc > 1) { sys_openlist = namelist_append_files(sys_openlist, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-lib") && argc > 1) { sys_externlist = namelist_append_files(sys_externlist, argv[1]); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-size") || !strcmp(*argv, "-font")) && argc > 1) { sys_defaultfont = sys_nearestfontsize(atoi(argv[1])); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-face") || !strcmp(*argv, "-typeface")) && argc > 1) { strncpy(sys_font,*(argv+1),sizeof(sys_font)-1); sys_font[sizeof(sys_font)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-font-weight") && argc > 1) { strncpy(sys_fontweight,*(argv+1),sizeof(sys_fontweight)-1); sys_fontweight[sizeof(sys_fontweight)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-verbose")) { sys_verbose++; argc--; argv++; } else if (!strcmp(*argv, "-version")) { sys_version = 1; argc--; argv++; } else if (!strcmp(*argv, "-d") && argc > 1 && sscanf(argv[1], "%d", &sys_debuglevel) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-noloadbang")) { sys_noloadbang = 1; argc--; argv++; } else if (!strcmp(*argv, "-nogui")) { sys_printtostderr = sys_nogui = 1; argc--; argv++; } else if (!strcmp(*argv, "-guiport") && argc > 1 && sscanf(argv[1], "%d", &sys_guisetportnumber) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-stderr")) { sys_printtostderr = 1; argc--; argv++; } else if (!strcmp(*argv, "-guicmd") && argc > 1) { sys_guicmd = argv[1]; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-send") && argc > 1) { sys_messagelist = namelist_append(sys_messagelist, argv[1], 1); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-listdev")) { sys_listplease = 1; argc--; argv++; } else if (!strcmp(*argv, "-schedlib") && argc > 1) { sys_externalschedlib = 1; strncpy(sys_externalschedlibname, argv[1], sizeof(sys_externalschedlibname) - 1); argv += 2; argc -= 2; } else if (!strcmp(*argv, "-extraflags") && argc > 1) { sys_extraflags = 1; strncpy(sys_extraflagsstring, argv[1], sizeof(sys_extraflagsstring) - 1); argv += 2; argc -= 2; } else if (!strcmp(*argv, "-batch")) { sys_batch = 1; sys_printtostderr = sys_nogui = 1; argc--; argv++; } else if (!strcmp(*argv, "-noautopatch")) { sys_noautopatch = 1; argc--; argv++; } #ifdef HAVE_UNISTD_H else if (!strcmp(*argv, "-rt") || !strcmp(*argv, "-realtime")) { sys_hipriority = 1; argc--; argv++; } else if (!strcmp(*argv, "-nrt")) { sys_hipriority = 0; argc--; argv++; } #endif else if (!strcmp(*argv, "-nosleep")) { sys_nosleep = 1; argc--; argv++; } else if (!strcmp(*argv, "-soundindev") || !strcmp(*argv, "-audioindev")) { sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); if (!sys_nsoundin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundoutdev") || !strcmp(*argv, "-audiooutdev")) { sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-sounddev") || !strcmp(*argv, "-audiodev")) && (argc > 1)) { sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-noprefs")) /* did this earlier */ argc--, argv++; else { unsigned int i; usage: for (i = 0; i < sizeof(usagemessage)/sizeof(*usagemessage); i++) fprintf(stderr, "%s", usagemessage[i]); return (1); } } if (!sys_defaultfont) sys_defaultfont = DEFAULTFONT; for (; argc > 0; argc--, argv++) sys_openlist = namelist_append_files(sys_openlist, *argv); return (0); }
void cpd_init() { int devices = 0; int ioputs = 2; static char initialized = 0; assert("Pure Data is already initialized." && !initialized); if(!initialized) { cpd_mutex_init(&c_mutex); sys_soundin = NULL; sys_soundout = NULL; c_current_instance = NULL; sys_printhook = (t_printhook)(cpd_print); signal(SIGFPE, SIG_IGN); sys_soundin = NULL; sys_soundout = NULL; sys_schedblocksize = DEFDACBLKSIZE; sys_externalschedlib = 0; sys_printtostderr = 0; sys_usestdpath = 0; sys_debuglevel = 1; sys_verbose = 4; sys_noloadbang = 0; sys_nogui = 1; sys_hipriority = 0; sys_nmidiin = 0; sys_nmidiout = 0; sys_init_fdpoll(); pd_init(); sys_startgui(NULL); sys_set_audio_api(API_DUMMY); sys_searchpath = NULL; sys_set_audio_settings(1, &devices, 1, &ioputs, 1, &devices, 1, &ioputs, 44100, -1, 1, DEFDACBLKSIZE); sched_set_using_audio(SCHED_AUDIO_CALLBACK); sys_reopen_audio(); c_sample_ins = sys_soundin; c_sample_outs = sys_soundout; c_first_instance = pd_this; c_sym_bng = gensym("bng"); c_sym_hsl = gensym("hsl"); c_sym_vsl = gensym("vsl"); c_sym_tgl = gensym("tgl"); c_sym_nbx = gensym("nbx"); c_sym_vradio = gensym("vradio"); c_sym_hradio = gensym("hradio"); c_sym_vu = gensym("vu"); c_sym_cnv = gensym("cnv"); c_sym_empty = gensym("empty"); bob_tilde_setup(); bonk_tilde_setup(); choice_setup(); fiddle_tilde_setup(); loop_tilde_setup(); lrshift_tilde_setup(); pique_setup(); sigmund_tilde_setup(); stdout_setup(); initialized = 1; } }
int sys_argparse(int argc, char **argv) { char sbuf[MAXPDSTRING]; int i; while ((argc > 0) && **argv == '-') { if (!strcmp(*argv, "-r") && argc > 1 && sscanf(argv[1], "%d", &sys_main_srate) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-inchannels") && (argc > 1)) { sys_parsedevlist(&sys_nchin, sys_chinlist, MAXAUDIOINDEV, argv[1]); if (!sys_nchin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-outchannels") && (argc > 1)) { sys_parsedevlist(&sys_nchout, sys_choutlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-channels") && (argc > 1)) { sys_parsedevlist(&sys_nchin, sys_chinlist,MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nchout, sys_choutlist,MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundbuf") || !strcmp(*argv, "-audiobuf") && (argc > 1)) { sys_main_advance = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-callback")) { sys_main_callback = 1; argc--; argv++; } else if (!strcmp(*argv, "-nocallback")) { sys_main_callback = 0; argc--; argv++; } else if (!strcmp(*argv, "-blocksize")) { sys_main_blocksize = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-sleepgrain") && (argc > 1)) { sys_sleepgrain = 1000 * atof(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nodac")) { sys_nsoundout=0; sys_nchout = 0; argc--; argv++; } else if (!strcmp(*argv, "-noadc")) { sys_nsoundin=0; sys_nchin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nosound") || !strcmp(*argv, "-noaudio")) { sys_nsoundin=sys_nsoundout = 0; sys_nchin = sys_nchout = 0; argc--; argv++; } #ifdef USEAPI_OSS else if (!strcmp(*argv, "-oss")) { sys_set_audio_api(API_OSS); argc--; argv++; } else if (!strcmp(*argv, "-ossmidi")) { sys_set_midi_api(API_OSS); argc--; argv++; } #endif #ifdef USEAPI_ALSA else if (!strcmp(*argv, "-alsa")) { sys_set_audio_api(API_ALSA); argc--; argv++; } else if (!strcmp(*argv, "-alsaadd") && (argc > 1)) { if (argc > 1) alsa_adddev(argv[1]); else goto usage; argc -= 2; argv +=2; } else if (!strcmp(*argv, "-alsamidi")) { sys_set_midi_api(API_ALSA); argc--; argv++; } #endif #ifdef USEAPI_JACK else if (!strcmp(*argv, "-jack")) { sys_set_audio_api(API_JACK); argc--; argv++; } #endif #ifdef USEAPI_PORTAUDIO else if (!strcmp(*argv, "-pa") || !strcmp(*argv, "-portaudio") #ifdef _WIN32 || !strcmp(*argv, "-asio") #endif ) { sys_set_audio_api(API_PORTAUDIO); sys_mmio = 0; argc--; argv++; } #endif #ifdef USEAPI_MMIO else if (!strcmp(*argv, "-mmio")) { sys_set_audio_api(API_MMIO); sys_mmio = 1; argc--; argv++; } #endif #ifdef USEAPI_AUDIOUNIT else if (!strcmp(*argv, "-audiounit")) { sys_set_audio_api(API_AUDIOUNIT); argc--; argv++; } #endif #ifdef USEAPI_ESD else if (!strcmp(*argv, "-esd")) { sys_set_audio_api(API_ESD); argc--; argv++; } #endif else if (!strcmp(*argv, "-nomidiin")) { sys_nmidiin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidiout")) { sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidi")) { sys_nmidiin = sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-midiindev") && (argc > 1)) { sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); if (!sys_nmidiin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midioutdev") && (argc > 1)) { sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-mididev") && (argc > 1)) { sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiaddindev") && (argc > 1)) { if (sys_nmidiin < 0) sys_nmidiin = 0; if (sys_nmidiin < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI input device: %s\n", argv[1]); else sys_midiindevlist[sys_nmidiin++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d\n", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiaddoutdev") && (argc > 1)) { if (sys_nmidiout < 0) sys_nmidiout = 0; if (sys_nmidiout < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiout++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d\n", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiadddev") && (argc > 1)) { if (sys_nmidiin < 0) sys_nmidiin = 0; if (sys_nmidiout < 0) sys_nmidiout = 0; if (sys_nmidiin < MAXMIDIINDEV && sys_nmidiout < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiin++] = devn + 1; devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiout++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-path") && (argc > 1)) { sys_searchpath = namelist_append_files(sys_searchpath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nostdpath")) { sys_usestdpath = 0; argc--; argv++; } else if (!strcmp(*argv, "-stdpath")) { sys_usestdpath = 1; argc--; argv++; } else if (!strcmp(*argv, "-helppath")) { sys_helppath = namelist_append_files(sys_helppath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-open") && argc > 1) { sys_openlist = namelist_append_files(sys_openlist, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-lib") && argc > 1) { sys_externlist = namelist_append_files(sys_externlist, argv[1]); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-size") || !strcmp(*argv, "-font")) && argc > 1) { sys_defaultfont = sys_nearestfontsize(atoi(argv[1])); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-face") || !strcmp(*argv, "-typeface")) && argc > 1) { strncpy(sys_font,*(argv+1),sizeof(sys_font)-1); sys_font[sizeof(sys_font)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-font-weight") && argc > 1) { strncpy(sys_fontweight,*(argv+1),sizeof(sys_fontweight)-1); sys_fontweight[sizeof(sys_fontweight)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-verbose")) { sys_verbose++; argc--; argv++; } else if (!strcmp(*argv, "-noverbose")) { sys_verbose=0; argc--; argv++; } else if (!strcmp(*argv, "-version")) { sys_version = 1; argc--; argv++; } else if (!strcmp(*argv, "-d") && argc > 1 && sscanf(argv[1], "%d", &sys_debuglevel) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-loadbang")) { sys_noloadbang = 0; argc--; argv++; } else if (!strcmp(*argv, "-noloadbang")) { sys_noloadbang = 1; argc--; argv++; } else if (!strcmp(*argv, "-gui")) { sys_nogui = 0; argc--; argv++; } else if (!strcmp(*argv, "-nogui")) { sys_nogui = 1; argc--; argv++; } else if (!strcmp(*argv, "-guiport") && argc > 1 && sscanf(argv[1], "%d", &sys_guisetportnumber) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nostderr")) { sys_printtostderr = 0; argc--; argv++; } else if (!strcmp(*argv, "-stderr")) { sys_printtostderr = 1; argc--; argv++; } else if (!strcmp(*argv, "-guicmd") && argc > 1) { sys_guicmd = argv[1]; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-send") && argc > 1) { sys_messagelist = namelist_append(sys_messagelist, argv[1], 1); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-listdev")) { sys_listplease = 1; argc--; argv++; } else if (!strcmp(*argv, "-schedlib") && argc > 1) { sys_externalschedlib = 1; strncpy(sys_externalschedlibname, argv[1], sizeof(sys_externalschedlibname) - 1); argv += 2; argc -= 2; } else if (!strcmp(*argv, "-extraflags") && argc > 1) { sys_extraflags = 1; strncpy(sys_extraflagsstring, argv[1], sizeof(sys_extraflagsstring) - 1); argv += 2; argc -= 2; } else if (!strcmp(*argv, "-batch")) { sys_batch = 1; argc--; argv++; } else if (!strcmp(*argv, "-nobatch")) { sys_batch = 0; argc--; argv++; } else if (!strcmp(*argv, "-autopatch")) { sys_noautopatch = 0; argc--; argv++; } else if (!strcmp(*argv, "-noautopatch")) { sys_noautopatch = 1; argc--; argv++; } else if (!strcmp(*argv, "-compatibility") && argc > 1) { float f; if (sscanf(argv[1], "%f", &f) < 1) goto usage; pd_compatibilitylevel = 0.5 + 100. * f; /* e.g., 2.44 --> 244 */ argv += 2; argc -= 2; } #ifdef HAVE_UNISTD_H else if (!strcmp(*argv, "-rt") || !strcmp(*argv, "-realtime")) { sys_hipriority = 1; argc--; argv++; } else if (!strcmp(*argv, "-nrt") || !strcmp(*argv, "-nort") || !strcmp(*argv, "-norealtime")) { sys_hipriority = 0; argc--; argv++; } #endif else if (!strcmp(*argv, "-sleep")) { sys_nosleep = 0; argc--; argv++; } else if (!strcmp(*argv, "-nosleep")) { sys_nosleep = 1; argc--; argv++; } else if (!strcmp(*argv, "-soundindev") || !strcmp(*argv, "-audioindev")) { sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); if (!sys_nsoundin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundoutdev") || !strcmp(*argv, "-audiooutdev")) { sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-sounddev") || !strcmp(*argv, "-audiodev")) && (argc > 1)) { sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioaddindev") && (argc > 1)) { if (sys_nsoundin < 0) sys_nsoundin = 0; if (sys_nsoundin < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio input device: %s\n", argv[1]); else sys_soundindevlist[sys_nsoundin++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d\n", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioaddoutdev") && (argc > 1)) { if (sys_nsoundout < 0) sys_nsoundout = 0; if (sys_nsoundout < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio output device: %s\n", argv[1]); else sys_soundoutdevlist[sys_nsoundout++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d\n", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioadddev") && (argc > 1)) { if (sys_nsoundin < 0) sys_nsoundin = 0; if (sys_nsoundout < 0) sys_nsoundout = 0; if (sys_nsoundin < MAXAUDIOINDEV && sys_nsoundout < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio input device: %s\n", argv[1]); else sys_soundindevlist[sys_nsoundin++] = devn + 1; devn = sys_audiodevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio output device: %s\n", argv[1]); else sys_soundoutdevlist[sys_nsoundout++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-noprefs")) /* did this earlier */ argc--, argv++; else { unsigned int i; usage: for (i = 0; i < sizeof(usagemessage)/sizeof(*usagemessage); i++) fprintf(stderr, "%s", usagemessage[i]); return (1); } } if (sys_batch) sys_nogui = 1; if (sys_nogui) sys_printtostderr = 1; #ifdef _WIN32 if (sys_printtostderr) /* we need to tell Windows to output UTF-8 */ SetConsoleOutputCP(CP_UTF8); #endif if (!sys_defaultfont) sys_defaultfont = DEFAULTFONT; for (; argc > 0; argc--, argv++) sys_openlist = namelist_append_files(sys_openlist, *argv); return (0); }
int sys_argparse(int argc, char **argv) { char sbuf[MAXPDSTRING]; int i; while ((argc > 0) && **argv == '-') { if (!strcmp(*argv, "-r") && argc > 1 && sscanf(argv[1], "%d", &sys_main_srate) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-inchannels")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nchin, sys_chinlist, MAXAUDIOINDEV, argv[1]); if (!sys_nchin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-outchannels")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nchout, sys_choutlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-channels")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nchin, sys_chinlist,MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nchout, sys_choutlist,MAXAUDIOOUTDEV, argv[1]); if (!sys_nchout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundbuf") || (!strcmp(*argv, "-audiobuf"))) { if (argc < 2) goto usage; sys_main_advance = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-callback")) { sys_main_callback = 1; argc--; argv++; } else if (!strcmp(*argv, "-nocallback")) { sys_main_callback = 0; argc--; argv++; } else if (!strcmp(*argv, "-blocksize")) { sys_main_blocksize = atoi(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-sleepgrain")) { if (argc < 2) goto usage; sys_sleepgrain = 1000 * atof(argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nodac")) { sys_nsoundout=0; sys_nchout = 0; argc--; argv++; } else if (!strcmp(*argv, "-noadc")) { sys_nsoundin=0; sys_nchin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nosound") || !strcmp(*argv, "-noaudio")) { sys_nsoundin=sys_nsoundout = 0; sys_nchin = sys_nchout = 0; argc--; argv++; } #ifdef USEAPI_OSS else if (!strcmp(*argv, "-oss")) { sys_set_audio_api(API_OSS); argc--; argv++; } else if (!strcmp(*argv, "-ossmidi")) { sys_set_midi_api(API_OSS); argc--; argv++; } #else else if (!strcmp(*argv, "-oss") || !strcmp(*argv, "-ossmidi")) { fprintf(stderr, "Pd compiled without OSS-support, ignoring '%s' flag\n", *argv); argc--; argv++; } #endif #ifdef USEAPI_ALSA else if (!strcmp(*argv, "-alsa")) { sys_set_audio_api(API_ALSA); argc--; argv++; } else if (!strcmp(*argv, "-alsaadd")) { if (argc < 2) goto usage; alsa_adddev(argv[1]); argc -= 2; argv +=2; } else if (!strcmp(*argv, "-alsamidi")) { sys_set_midi_api(API_ALSA); argc--; argv++; } #else else if (!strcmp(*argv, "-alsa") || !strcmp(*argv, "-alsamidi")) { fprintf(stderr, "Pd compiled without ALSA-support, ignoring '%s' flag\n", *argv); argc--; argv++; } else if (!strcmp(*argv, "-alsaadd")) { if (argc < 2) goto usage; fprintf(stderr, "Pd compiled without ALSA-support, ignoring '%s' flag\n", *argv); argc -= 2; argv +=2; } #endif #ifdef USEAPI_JACK else if (!strcmp(*argv, "-jack")) { sys_set_audio_api(API_JACK); argc--; argv++; } else if (!strcmp(*argv, "-nojackconnect")) { jack_autoconnect(0); argc--; argv++; } else if (!strcmp(*argv, "-jackconnect")) { jack_autoconnect(1); argc--; argv++; } else if (!strcmp(*argv, "-jackname")) { if (argc < 2) goto usage; sys_set_audio_api(API_JACK), jack_client_name(argv[1]); argc -= 2; argv +=2; } #else else if (!strcmp(*argv, "-jack") || !strcmp(*argv, "-nojackconnect") || !strcmp(*argv, "-jackconnect")) { fprintf(stderr, "Pd compiled without JACK-support, ignoring '%s' flag\n", *argv); argc--; argv++; } else if (!strcmp(*argv, "-jackname")) { if (argc < 2) goto usage; fprintf(stderr, "Pd compiled without JACK-support, ignoring '%s' flag\n", *argv); argc -= 2; argv +=2; } #endif #ifdef USEAPI_PORTAUDIO else if (!strcmp(*argv, "-pa") || !strcmp(*argv, "-portaudio") || !strcmp(*argv, "-asio") ) { sys_set_audio_api(API_PORTAUDIO); sys_mmio = 0; argc--; argv++; } #else else if (!strcmp(*argv, "-pa") || !strcmp(*argv, "-portaudio") || !strcmp(*argv, "-asio") ) { fprintf(stderr, "Pd compiled without PortAudio-support, ignoring '%s' flag\n", *argv); argc--; argv++; } #endif #ifdef USEAPI_MMIO else if (!strcmp(*argv, "-mmio")) { sys_set_audio_api(API_MMIO); sys_mmio = 1; argc--; argv++; } #else else if (!strcmp(*argv, "-mmio")) { fprintf(stderr, "Pd compiled without MMIO-support, ignoring '%s' flag\n", *argv); argc--; argv++; } #endif #ifdef USEAPI_AUDIOUNIT else if (!strcmp(*argv, "-audiounit")) { sys_set_audio_api(API_AUDIOUNIT); argc--; argv++; } #endif #ifdef USEAPI_ESD else if (!strcmp(*argv, "-esd")) { sys_set_audio_api(API_ESD); argc--; argv++; } #endif else if (!strcmp(*argv, "-nomidiin")) { sys_nmidiin = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidiout")) { sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-nomidi")) { sys_nmidiin = sys_nmidiout = 0; argc--; argv++; } else if (!strcmp(*argv, "-midiindev")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); if (!sys_nmidiin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midioutdev")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-mididev")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nmidiin, sys_midiindevlist, MAXMIDIINDEV, argv[1]); sys_parsedevlist(&sys_nmidiout, sys_midioutdevlist, MAXMIDIOUTDEV, argv[1]); if (!sys_nmidiout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiaddindev")) { if (argc < 2) goto usage; if (sys_nmidiin < 0) sys_nmidiin = 0; if (sys_nmidiin < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI input device: %s\n", argv[1]); else sys_midiindevlist[sys_nmidiin++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d\n", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiaddoutdev")) { if (argc < 2) goto usage; if (sys_nmidiout < 0) sys_nmidiout = 0; if (sys_nmidiout < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiout++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d\n", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-midiadddev")) { if (argc < 2) goto usage; if (sys_nmidiin < 0) sys_nmidiin = 0; if (sys_nmidiout < 0) sys_nmidiout = 0; if (sys_nmidiin < MAXMIDIINDEV && sys_nmidiout < MAXMIDIINDEV) { int devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiin++] = devn + 1; devn = sys_mididevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find MIDI output device: %s\n", argv[1]); else sys_midioutdevlist[sys_nmidiout++] = devn + 1; } else fprintf(stderr, "number of MIDI devices limited to %d", MAXMIDIINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-path")) { if (argc < 2) goto usage; STUFF->st_searchpath = namelist_append_files(STUFF->st_searchpath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nostdpath")) { sys_usestdpath = 0; argc--; argv++; } else if (!strcmp(*argv, "-stdpath")) { sys_usestdpath = 1; argc--; argv++; } else if (!strcmp(*argv, "-helppath")) { if (argc < 2) goto usage; STUFF->st_helppath = namelist_append_files(STUFF->st_helppath, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-open")) { if (argc < 2) goto usage; sys_openlist = namelist_append_files(sys_openlist, argv[1]); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-lib")) { if (argc < 2) goto usage; STUFF->st_externlist = namelist_append_files(STUFF->st_externlist, argv[1]); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-size") || !strcmp(*argv, "-font"))) { if (argc < 2) goto usage; sys_defaultfont = sys_nearestfontsize(atoi(argv[1])); argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-font-face") || !strcmp(*argv, "-typeface"))) { if (argc < 2) goto usage; strncpy(sys_font,*(argv+1),sizeof(sys_font)-1); sys_font[sizeof(sys_font)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-font-weight")) { if (argc < 2) goto usage; strncpy(sys_fontweight,*(argv+1),sizeof(sys_fontweight)-1); sys_fontweight[sizeof(sys_fontweight)-1] = 0; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-verbose")) { sys_verbose++; argc--; argv++; } else if (!strcmp(*argv, "-noverbose")) { sys_verbose=0; argc--; argv++; } else if (!strcmp(*argv, "-version")) { sys_version = 1; argc--; argv++; } else if (!strcmp(*argv, "-d") && argc > 1 && sscanf(argv[1], "%d", &sys_debuglevel) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-loadbang")) { sys_noloadbang = 0; argc--; argv++; } else if (!strcmp(*argv, "-noloadbang")) { sys_noloadbang = 1; argc--; argv++; } else if (!strcmp(*argv, "-gui")) { sys_dontstartgui = 0; argc--; argv++; } else if (!strcmp(*argv, "-nogui")) { sys_dontstartgui = 1; argc--; argv++; } else if (!strcmp(*argv, "-guiport") && argc > 1 && sscanf(argv[1], "%d", &sys_guisetportnumber) >= 1) { argc -= 2; argv += 2; } else if (!strcmp(*argv, "-nostderr")) { sys_printtostderr = 0; argc--; argv++; } else if (!strcmp(*argv, "-stderr")) { sys_printtostderr = 1; argc--; argv++; } else if (!strcmp(*argv, "-guicmd")) { if (argc < 2) goto usage; sys_guicmd = argv[1]; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-send")) { if (argc < 2) goto usage; sys_messagelist = namelist_append(sys_messagelist, argv[1], 1); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-listdev")) { sys_listplease = 1; argc--; argv++; } else if (!strcmp(*argv, "-schedlib")) { if (argc < 2) goto usage; sys_externalschedlib = 1; strncpy(sys_externalschedlibname, argv[1], sizeof(sys_externalschedlibname) - 1); #ifndef __APPLE__ /* no real audio please, unless overwritten by later args. This is to circumvent a problem running pd~ subprocesses with -nogui; they would open an audio device before pdsched.c could set the API ito nothing. For some reason though, on MACOSX this causes Pd to switch to JACK so we just give up and suppress the workaround there. */ sys_set_audio_api(0); #endif argv += 2; argc -= 2; } else if (!strcmp(*argv, "-extraflags")) { if (argc < 2) goto usage; sys_extraflags = 1; strncpy(sys_extraflagsstring, argv[1], sizeof(sys_extraflagsstring) - 1); argv += 2; argc -= 2; } else if (!strcmp(*argv, "-batch")) { sys_batch = 1; argc--; argv++; } else if (!strcmp(*argv, "-nobatch")) { sys_batch = 0; argc--; argv++; } else if (!strcmp(*argv, "-autopatch")) { sys_noautopatch = 0; argc--; argv++; } else if (!strcmp(*argv, "-noautopatch")) { sys_noautopatch = 1; argc--; argv++; } else if (!strcmp(*argv, "-compatibility")) { float f; if (argc < 2) goto usage; if (sscanf(argv[1], "%f", &f) < 1) goto usage; pd_compatibilitylevel = 0.5 + 100. * f; /* e.g., 2.44 --> 244 */ argv += 2; argc -= 2; } #ifdef HAVE_UNISTD_H else if (!strcmp(*argv, "-rt") || !strcmp(*argv, "-realtime")) { sys_hipriority = 1; argc--; argv++; } else if (!strcmp(*argv, "-nrt") || !strcmp(*argv, "-nort") || !strcmp(*argv, "-norealtime")) { sys_hipriority = 0; argc--; argv++; } #else else if (!strcmp(*argv, "-rt") || !strcmp(*argv, "-realtime") || !strcmp(*argv, "-nrt") || !strcmp(*argv, "-nort") || !strcmp(*argv, "-norealtime")) { fprintf(stderr, "Pd compiled without realtime priority-support, ignoring '%s' flag\n", *argv); argc--; argv++; } #endif else if (!strcmp(*argv, "-sleep")) { sys_nosleep = 0; argc--; argv++; } else if (!strcmp(*argv, "-nosleep")) { sys_nosleep = 1; argc--; argv++; } else if (!strcmp(*argv, "-soundindev") || !strcmp(*argv, "-audioindev")) { sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); if (!sys_nsoundin) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-soundoutdev") || !strcmp(*argv, "-audiooutdev")) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if ((!strcmp(*argv, "-sounddev") || !strcmp(*argv, "-audiodev"))) { if (argc < 2) goto usage; sys_parsedevlist(&sys_nsoundin, sys_soundindevlist, MAXAUDIOINDEV, argv[1]); sys_parsedevlist(&sys_nsoundout, sys_soundoutdevlist, MAXAUDIOOUTDEV, argv[1]); if (!sys_nsoundout) goto usage; argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioaddindev")) { if (argc < 2) goto usage; if (sys_nsoundin < 0) sys_nsoundin = 0; if (sys_nsoundin < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio input device: %s\n", argv[1]); else sys_soundindevlist[sys_nsoundin++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d\n", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioaddoutdev")) { if (argc < 2) goto usage; if (sys_nsoundout < 0) sys_nsoundout = 0; if (sys_nsoundout < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio output device: %s\n", argv[1]); else sys_soundoutdevlist[sys_nsoundout++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d\n", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-audioadddev")) { if (argc < 2) goto usage; if (sys_nsoundin < 0) sys_nsoundin = 0; if (sys_nsoundout < 0) sys_nsoundout = 0; if (sys_nsoundin < MAXAUDIOINDEV && sys_nsoundout < MAXAUDIOINDEV) { int devn = sys_audiodevnametonumber(0, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio input device: %s\n", argv[1]); else sys_soundindevlist[sys_nsoundin++] = devn + 1; devn = sys_audiodevnametonumber(1, argv[1]); if (devn < 0) fprintf(stderr, "Couldn't find audio output device: %s\n", argv[1]); else sys_soundoutdevlist[sys_nsoundout++] = devn + 1; } else fprintf(stderr, "number of audio devices limited to %d", MAXAUDIOINDEV); argc -= 2; argv += 2; } else if (!strcmp(*argv, "-noprefs")) /* did this earlier */ argc--, argv++; else if (!strcmp(*argv, "-prefsfile") && argc > 1) /* this too */ argc -= 2, argv +=2; else { unsigned int i; usage: for (i = 0; i < sizeof(usagemessage)/sizeof(*usagemessage); i++) fprintf(stderr, "%s", usagemessage[i]); return (1); } } if (sys_batch) sys_dontstartgui = 1; if (sys_dontstartgui) sys_printtostderr = 1; #ifdef _WIN32 if (sys_printtostderr) /* we need to tell Windows to output UTF-8 */ SetConsoleOutputCP(CP_UTF8); #endif if (!sys_defaultfont) sys_defaultfont = DEFAULTFONT; for (; argc > 0; argc--, argv++) sys_openlist = namelist_append_files(sys_openlist, *argv); return (0); }
void sys_loadpreferences( void) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int nmidiindev, midiindev[MAXMIDIINDEV]; int nmidioutdev, midioutdev[MAXMIDIOUTDEV]; int i, rate = 0, advance = 0, callback = 0, api, nolib, maxi; char prefbuf[MAXPDSTRING], keybuf[80]; sys_initloadpreferences(); /* load audio preferences */ if (sys_getpreference("audioapi", prefbuf, MAXPDSTRING) && sscanf(prefbuf, "%d", &api) > 0) sys_set_audio_api(api); /* JMZ/MB: brackets for initializing */ if (sys_getpreference("noaudioin", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) naudioindev = 0; else { for (i = 0, naudioindev = 0; i < MAXAUDIOINDEV; i++) { sprintf(keybuf, "audioindev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d %d", &audioindev[i], &chindev[i]) < 2) break; naudioindev++; } /* if no preferences at all, set -1 for default behavior */ if (naudioindev == 0) naudioindev = -1; } /* JMZ/MB: brackets for initializing */ if (sys_getpreference("noaudioout", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) naudiooutdev = 0; else { for (i = 0, naudiooutdev = 0; i < MAXAUDIOOUTDEV; i++) { sprintf(keybuf, "audiooutdev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d %d", &audiooutdev[i], &choutdev[i]) < 2) break; naudiooutdev++; } if (naudiooutdev == 0) naudiooutdev = -1; } if (sys_getpreference("rate", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &rate); if (sys_getpreference("audiobuf", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &advance); if (sys_getpreference("callback", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &callback); sys_set_audio_settings(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, advance, callback); /* load MIDI preferences */ /* JMZ/MB: brackets for initializing */ if (sys_getpreference("nomidiin", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) nmidiindev = 0; else for (i = 0, nmidiindev = 0; i < MAXMIDIINDEV; i++) { sprintf(keybuf, "midiindev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d", &midiindev[i]) < 1) break; nmidiindev++; } /* JMZ/MB: brackets for initializing */ if (sys_getpreference("nomidiout", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) nmidioutdev = 0; else for (i = 0, nmidioutdev = 0; i < MAXMIDIOUTDEV; i++) { sprintf(keybuf, "midioutdev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d", &midioutdev[i]) < 1) break; nmidioutdev++; } sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 0); /* search path */ if (sys_getpreference("npath", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &maxi); else maxi = 0x7fffffff; for (i = 0; i<maxi; i++) { sprintf(keybuf, "path%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; sys_searchpath = namelist_append_files(sys_searchpath, prefbuf); } if (sys_getpreference("standardpath", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_usestdpath); if (sys_getpreference("verbose", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_verbose); /* startup settings */ if (sys_getpreference("nloadlib", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &maxi); else maxi = 0x7fffffff; for (i = 0; i<maxi; i++) { sprintf(keybuf, "loadlib%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; sys_externlist = namelist_append_files(sys_externlist, prefbuf); } if (sys_getpreference("defeatrt", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_defeatrt); if (sys_getpreference("flags", prefbuf, MAXPDSTRING)) { if (strcmp(prefbuf, ".")) sys_flags = gensym(prefbuf); } sys_doflags(); if (sys_defeatrt) sys_hipriority = 0; else #ifdef UNIX sys_hipriority = !geteuid(); #else #ifdef MSW sys_hipriority = 0; #else sys_hipriority = 1; #endif #endif }
void sys_loadpreferences( void) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int nmidiindev, midiindev[MAXMIDIINDEV]; int nmidioutdev, midioutdev[MAXMIDIOUTDEV]; int i, rate = 0, advance = -1, callback = 0, blocksize = 0, api, nolib, maxi; char prefbuf[MAXPDSTRING], keybuf[80]; sys_initloadpreferences(); /* load audio preferences */ if (sys_getpreference("audioapi", prefbuf, MAXPDSTRING) && sscanf(prefbuf, "%d", &api) > 0) sys_set_audio_api(api); /* JMZ/MB: brackets for initializing */ if (sys_getpreference("noaudioin", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) naudioindev = 0; else { for (i = 0, naudioindev = 0; i < MAXAUDIOINDEV; i++) { /* first try to find a name - if that matches an existing device use it. Otherwise fall back to device number. */ int devn; /* read in device number and channel count */ sprintf(keybuf, "audioindev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d %d", &audioindev[i], &chindev[i]) < 2) break; /* possibly override device number if the device name was also saved and if it matches one we have now */ sprintf(keybuf, "audioindevname%d", i+1); if (sys_getpreference(keybuf, prefbuf, MAXPDSTRING) && (devn = sys_audiodevnametonumber(0, prefbuf)) >= 0) audioindev[i] = devn; naudioindev++; } /* if no preferences at all, set -1 for default behavior */ if (naudioindev == 0) naudioindev = -1; } /* JMZ/MB: brackets for initializing */ if (sys_getpreference("noaudioout", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) naudiooutdev = 0; else { for (i = 0, naudiooutdev = 0; i < MAXAUDIOOUTDEV; i++) { int devn; sprintf(keybuf, "audiooutdev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d %d", &audiooutdev[i], &choutdev[i]) < 2) break; sprintf(keybuf, "audiooutdevname%d", i+1); if (sys_getpreference(keybuf, prefbuf, MAXPDSTRING) && (devn = sys_audiodevnametonumber(1, prefbuf)) >= 0) audiooutdev[i] = devn; naudiooutdev++; } if (naudiooutdev == 0) naudiooutdev = -1; } if (sys_getpreference("rate", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &rate); if (sys_getpreference("audiobuf", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &advance); if (sys_getpreference("callback", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &callback); if (sys_getpreference("blocksize", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &blocksize); sys_set_audio_settings(naudioindev, audioindev, naudioindev, chindev, naudiooutdev, audiooutdev, naudiooutdev, choutdev, rate, advance, callback, blocksize); /* load MIDI preferences */ /* JMZ/MB: brackets for initializing */ if (sys_getpreference("nomidiin", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) nmidiindev = 0; else for (i = 0, nmidiindev = 0; i < MAXMIDIINDEV; i++) { /* first try to find a name - if that matches an existing device use it. Otherwise fall back to device number. */ int devn; sprintf(keybuf, "midiindevname%d", i+1); if (sys_getpreference(keybuf, prefbuf, MAXPDSTRING) && (devn = sys_mididevnametonumber(0, prefbuf)) >= 0) midiindev[i] = devn; else { sprintf(keybuf, "midiindev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d", &midiindev[i]) < 1) break; } nmidiindev++; } /* JMZ/MB: brackets for initializing */ if (sys_getpreference("nomidiout", prefbuf, MAXPDSTRING) && (!strcmp(prefbuf, ".") || !strcmp(prefbuf, "True"))) nmidioutdev = 0; else for (i = 0, nmidioutdev = 0; i < MAXMIDIOUTDEV; i++) { int devn; sprintf(keybuf, "midioutdevname%d", i+1); if (sys_getpreference(keybuf, prefbuf, MAXPDSTRING) && (devn = sys_mididevnametonumber(1, prefbuf)) >= 0) midioutdev[i] = devn; else { sprintf(keybuf, "midioutdev%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; if (sscanf(prefbuf, "%d", &midioutdev[i]) < 1) break; } nmidioutdev++; } sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 0); /* search path */ if (sys_getpreference("npath", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &maxi); else maxi = 0x7fffffff; for (i = 0; i<maxi; i++) { sprintf(keybuf, "path%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; sys_searchpath = namelist_append_files(sys_searchpath, prefbuf); } if (sys_getpreference("standardpath", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_usestdpath); if (sys_getpreference("verbose", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_verbose); /* startup settings */ if (sys_getpreference("nloadlib", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &maxi); else maxi = 0x7fffffff; for (i = 0; i<maxi; i++) { sprintf(keybuf, "loadlib%d", i+1); if (!sys_getpreference(keybuf, prefbuf, MAXPDSTRING)) break; sys_externlist = namelist_append_files(sys_externlist, prefbuf); } if (sys_getpreference("defeatrt", prefbuf, MAXPDSTRING)) sscanf(prefbuf, "%d", &sys_defeatrt); if (sys_getpreference("flags", prefbuf, MAXPDSTRING)) { if (strcmp(prefbuf, ".")) sys_flags = gensym(prefbuf); } sys_doflags(); if (sys_defeatrt) sys_hipriority = 0; else #if defined(__linux__) || defined(__CYGWIN__) sys_hipriority = 1; #else #if defined(_WIN32) || defined(ANDROID) sys_hipriority = 0; #else sys_hipriority = 1; #endif #endif }