void glob_savepreferences(t_pd *dummy) { int naudioindev, audioindev[MAXAUDIOINDEV], chindev[MAXAUDIOINDEV]; int naudiooutdev, audiooutdev[MAXAUDIOOUTDEV], choutdev[MAXAUDIOOUTDEV]; int i, rate, advance, callback; char buf1[MAXPDSTRING], buf2[MAXPDSTRING]; int nmidiindev, midiindev[MAXMIDIINDEV]; int nmidioutdev, midioutdev[MAXMIDIOUTDEV]; sys_initsavepreferences(); /* audio settings */ sprintf(buf1, "%d", sys_audioapi); sys_putpreference("audioapi", buf1); sys_get_audio_params(&naudioindev, audioindev, chindev, &naudiooutdev, audiooutdev, choutdev, &rate, &advance, &callback); sys_putpreference("noaudioin", (naudioindev <= 0 ? "True" : "False")); for (i = 0; i < naudioindev; i++) { sprintf(buf1, "audioindev%d", i+1); sprintf(buf2, "%d %d", audioindev[i], chindev[i]); sys_putpreference(buf1, buf2); } sys_putpreference("noaudioout", (naudiooutdev <= 0 ? "True" : "False")); for (i = 0; i < naudiooutdev; i++) { sprintf(buf1, "audiooutdev%d", i+1); sprintf(buf2, "%d %d", audiooutdev[i], choutdev[i]); sys_putpreference(buf1, buf2); } sprintf(buf1, "%d", advance); sys_putpreference("audiobuf", buf1); sprintf(buf1, "%d", rate); sys_putpreference("rate", buf1); sprintf(buf1, "%d", callback); sys_putpreference("callback", buf1); /* MIDI settings */ sys_get_midi_params(&nmidiindev, midiindev, &nmidioutdev, midioutdev); sys_putpreference("nomidiin", (nmidiindev <= 0 ? "True" : "False")); for (i = 0; i < nmidiindev; i++) { sprintf(buf1, "midiindev%d", i+1); sprintf(buf2, "%d", midiindev[i]); sys_putpreference(buf1, buf2); } sys_putpreference("nomidiout", (nmidioutdev <= 0 ? "True" : "False")); for (i = 0; i < nmidioutdev; i++) { sprintf(buf1, "midioutdev%d", i+1); sprintf(buf2, "%d", midioutdev[i]); sys_putpreference(buf1, buf2); } /* file search path */ for (i = 0; 1; i++) { char *pathelem = namelist_get(sys_searchpath, i); if (!pathelem) break; sprintf(buf1, "path%d", i+1); sys_putpreference(buf1, pathelem); } sprintf(buf1, "%d", i); sys_putpreference("npath", buf1); sprintf(buf1, "%d", sys_usestdpath); sys_putpreference("standardpath", buf1); sprintf(buf1, "%d", sys_verbose); sys_putpreference("verbose", buf1); /* startup */ for (i = 0; 1; i++) { char *pathelem = namelist_get(sys_externlist, i); if (!pathelem) break; sprintf(buf1, "loadlib%d", i+1); sys_putpreference(buf1, pathelem); } sprintf(buf1, "%d", i); sys_putpreference("nloadlib", buf1); sprintf(buf1, "%d", sys_defeatrt); sys_putpreference("defeatrt", buf1); sys_putpreference("flags", (sys_flags ? sys_flags->s_name : "")); sys_donesavepreferences(); }
void pybase::lib_setup() { post(""); post("------------------------------------------------"); post("py/pyext %s - python script objects",PY__VERSION); post("(C)2002-2015 Thomas Grill - http://grrrr.org/ext"); post(""); post("using Python %s",Py_GetVersion()); #ifdef FLEXT_DEBUG post(""); post("DEBUG version compiled on %s %s",__DATE__,__TIME__); #endif // ------------------------------------------------------------- sym_response = flext::MakeSymbol("response"); #if FLEXT_SYS == FLEXT_SYS_PD sym_fint = sym_float; #else sym_fint = sym_int; #endif // ------------------------------------------------------------- Py_Initialize(); #ifdef FLEXT_DEBUG // Py_DebugFlag = 1; // Py_VerboseFlag = 1; #else Py_OptimizeFlag = 1; #endif #ifdef FLEXT_THREADS // enable thread support and acquire the global thread lock PyEval_InitThreads(); #ifndef PY_USE_GIL // get thread state pythrsys = PyThreadState_Get(); // get main interpreter state pymain = pythrsys->interp; // add thread state of main thread to map pythrmap[GetThreadId()] = pythrsys; #endif // PY_USE_GIL #endif // sys.argv must be set to empty tuple const char *nothing = ""; PySys_SetArgv(0,const_cast<char **>(¬hing)); // register/initialize pyext module only once! module_obj = Py_InitModule(const_cast<char *>(PYEXT_MODULE), func_tbl); module_dict = PyModule_GetDict(module_obj); // borrowed reference PyModule_AddStringConstant(module_obj,"__doc__",(char *)py_doc); // redirect stdout PyObject* py_out; py_out = Py_InitModule(const_cast<char *>("stdout"), StdOut_Methods); PySys_SetObject(const_cast<char *>("stdout"), py_out); py_out = Py_InitModule(const_cast<char *>("stderr"), StdOut_Methods); PySys_SetObject(const_cast<char *>("stderr"), py_out); // get garbage collector function PyObject *gcobj = PyImport_ImportModule("gc"); if(gcobj) { gcollect = PyObject_GetAttrString(gcobj,"collect"); Py_DECREF(gcobj); } builtins_obj = PyImport_ImportModule("__builtin__"); builtins_dict = PyModule_GetDict(builtins_obj); // borrowed reference // add symbol type initsymbol(); PyModule_AddObject(module_obj,"Symbol",(PyObject *)&pySymbol_Type); // pre-defined symbols PyModule_AddObject(module_obj,"_s_",(PyObject *)pySymbol__); PyModule_AddObject(module_obj,"_s_bang",(PyObject *)pySymbol_bang); PyModule_AddObject(module_obj,"_s_list",(PyObject *)pySymbol_list); PyModule_AddObject(module_obj,"_s_symbol",(PyObject *)pySymbol_symbol); PyModule_AddObject(module_obj,"_s_float",(PyObject *)pySymbol_float); PyModule_AddObject(module_obj,"_s_int",(PyObject *)pySymbol_int); // add samplebuffer type initsamplebuffer(); PyModule_AddObject(module_obj,"Buffer",(PyObject *)&pySamplebuffer_Type); // add message bundle type initbundle(); PyModule_AddObject(module_obj,"Bundle",(PyObject *)&pyBundle_Type); // ------------------------------------------------------------- #if FLEXT_SYS == FLEXT_SYS_PD && defined(PD_DEVEL_VERSION) && defined(PY_USE_INOFFICIAL) // add PD paths char *dir; for(int i = 0; (dir = namelist_get(sys_searchpath,i)) != NULL; ++i) { AddToPath(dir); } #endif // ------------------------------------------------------------- FLEXT_SETUP(pyobj); FLEXT_SETUP(pymeth); FLEXT_SETUP(pyext); #ifndef PY_NODSP FLEXT_DSP_SETUP(pydsp); #endif #ifdef FLEXT_THREADS // release global lock PyEval_ReleaseLock(); // launch thread worker LaunchThread(quworker,NULL); // launch python worker LaunchThread(pyworker,NULL); #endif post("------------------------------------------------"); post(""); }