//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //agenttype_mixer_create //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int agenttype_mixer_create_xp (agent * a, char * parameterstring) { bool errorflag = false; //If there's an error //Check for error conditions if (strlen(parameterstring) >= 30) return false; //Break up the parts int tokensfound = BBTokenize(parameterstring, mixer_tokenptrs, 4, NULL); //Three tokens exactly required if (tokensfound != 3) return 1; long values[3]; //Make sure they are all valid integers for (int i = 0; i < 3; i++) if (!config_set_long(mixer_tokenptrs[i], &values[i])) return 1; AgentType_Mixer_XP * details = new AgentType_Mixer_XP(values); if (details->Init()) { //Set the window property SetProp(details->m_hwnd_reciever, "mixagtptr", a); a->agentdetails = static_cast<void *>(details); } else { details->Destroy(); delete details; a->agentdetails = NULL; agent_destroy(&a); return 1; } return 0; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //agenttype_mixer_create //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int agenttype_mixer_create(agent *a, char *parameterstring) { //If there's an error bool errorflag = false;; //Check for error conditions if (strlen(parameterstring) >= 30) return false; //Break up the parts int tokensfound = BBTokenize(parameterstring, mixer_tokenptrs, 4, NULL); //Three tokens exactly required if (tokensfound != 3) return 1; long values[3]; //Make sure they are all valid integers for (int i = 0; i < 3; i++) { if (!config_set_long(mixer_tokenptrs[i], &values[i])) return 1; } //Create the details agenttype_mixer_details *details = new agenttype_mixer_details; a->agentdetails = (void *) details; //Copy the values details->device = values[0]; details->line = values[1]; details->control = values[2]; //Create the reciever window class if neccessary //No errors mixer_controlcount++; if (mixer_controlcount > 0 && !mixer_recieverregistered) { if (!window_helper_register(mixer_recieverclass, &agenttype_mixer_recieverevent)) mixer_recieverregistered = true; else errorflag = true; } //Create the reciever window details->hwnd_reciever = NULL; if (!errorflag) { details->hwnd_reciever = window_helper_create(mixer_recieverclass); if (!details->hwnd_reciever) errorflag = true; } if (!errorflag) { //Initialize the mixer values if (MMSYSERR_NOERROR != mixerOpen(&details->mixer_handle, details->device, (DWORD_PTR) details->hwnd_reciever, 0, CALLBACK_WINDOW)) errorflag = true; } if (!errorflag) { //Set the control properties details->mixer_controldetails.cbStruct = sizeof(MIXERCONTROLDETAILS); details->mixer_controldetails.dwControlID = details->control; details->mixer_controldetails.cChannels = 1; details->mixer_controldetails.cMultipleItems = 0; details->mixer_controldetails.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); //Set the window property SetProp(details->hwnd_reciever, "mixagtptr", a); } if (errorflag) { if (details->hwnd_reciever) window_helper_destroy(details->hwnd_reciever); delete details; a->agentdetails = NULL; agent_destroy(&a); return 1; } return 0; }