static ad_device_data * sound_nas_create(Lisp_Object nas_options) { sound_nas_data_t *snd; char *server[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; int i, server_cnt = 0; AuServer *aud = NULL; Lisp_Object opt_server = Qnil; /* parse options */ opt_server = Fplist_get(nas_options, intern(":server"), Qnil); if (!NILP(opt_server) && !STRINGP(opt_server) && !DEVICEP(opt_server)) { wrong_type_argument(Qstringp, opt_server); return NULL; } if (NILP(opt_server)) nas_setup_defaults(server, &server_cnt); else if (STRINGP(opt_server)) server[server_cnt++] = (char*)XSTRING_DATA(opt_server); #ifdef HAVE_X_WINDOWS else if (DEVICEP(opt_server) && DEVICE_X_P(XDEVICE(opt_server))) server[server_cnt++] = (char*)XSTRING_DATA( DEVICE_CONNECTION(XDEVICE(opt_server))); #endif NAS_DEBUG("trying %d connections\n", server_cnt); for (i = 0; i<server_cnt; i++) if ((aud = nas_try_connection(server[i]))) break; if (!aud) { NAS_DEBUG_C("cannot contact any NAS server\n"); warn_when_safe(Qnas, Qwarning, GETTEXT("No NAS servers in sight.\n")); return NULL; /* Could not contact NAS server */ } /* -- initialise -- */ snd = xnew_and_zero(sound_nas_data_t); snd->aud = aud; /* round up SOUND_MAX_AUDIO_FRAME_SIZE to multiple of NAS_FRAG_SIZE * divide by 3 first because of 2:1 split */ snd->proposed_buffer_size = (SOUND_MAX_AUDIO_FRAME_SIZE/3 + NAS_FRAG_SIZE-1) & ~(NAS_FRAG_SIZE-1); NAS_DEBUG_C("proposed buffer size: %u\n", snd->proposed_buffer_size); NAS_DEBUG_C("created: 0x%x\n", (unsigned int)snd); return snd; }
struct console * decode_console (Lisp_Object console) { if (NILP (console)) console = Fselected_console (); /* quietly accept devices and frames for the console arg */ if (DEVICEP (console) || FRAMEP (console)) console = DEVICE_CONSOLE (decode_device (console)); CHECK_LIVE_CONSOLE (console); return XCONSOLE (console); }
static void nas_setup_defaults(char **server, int *cnt) { int i; Lisp_Object tmp; /* considering some defaults */ NAS_DEBUG("trying to find some defaults\n"); #ifdef HAVE_X_WINDOWS /* check for the device connection of the currently active frame */ tmp = Fselected_device(Qnil); if (DEVICEP(tmp) && DEVICE_X_P(XDEVICE(tmp))) server[(*cnt)++] = (char*)XSTRING_DATA( DEVICE_CONNECTION(XDEVICE(tmp))); /* tbd: check for conn of the initial frame */ #endif /* try to look for $AUDIOSERVER */ if ((server[(*cnt)] = getenv("AUDIOSERVER"))) { /* only add the stuff, if not already in the try queue */ for (i=0; i < (*cnt); i++) if (strcmp(server[i], server[(*cnt)]) == 0) break; if (i == (*cnt)) (*cnt)++; } /* try to look for $DISPLAY */ if ((server[(*cnt)] = getenv("DISPLAY"))){ /* only add the stuff, if not already in the try queue */ for (i=0; i < (*cnt); i++) if (strcmp(server[i], server[(*cnt)]) == 0) break; if (i == (*cnt)) (*cnt)++; } /* oh, let's try localhost:0.0, if not already there of course */ for (i=0; i < (*cnt); i++) if (strcmp(server[i], "localhost:0.0") == 0) break; if (i == (*cnt)) server[(*cnt)++] = "localhost:0.0"; /* finally we try NULL, too */ server[(*cnt)++] = NULL; return; }