static void MIX_FillControls(void) { int i; int ctrl = 0; MixerLine *line; for (i = 0; i < mixer.caps.cDestinations; i++) { line = &mixer.lines[i]; mixer.mixerCtrls[ctrl].dwLineID = i; mixer.mixerCtrls[ctrl].ctrl.cbStruct = sizeof(MIXERCONTROLW); mixer.mixerCtrls[ctrl].ctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mixer.mixerCtrls[ctrl].ctrl.dwControlID = ctrl; mixer.mixerCtrls[ctrl].ctrl.Bounds.s1.dwMinimum = 0; mixer.mixerCtrls[ctrl].ctrl.Bounds.s1.dwMaximum = 65535; mixer.mixerCtrls[ctrl].ctrl.Metrics.cSteps = 656; ctrl++; mixer.mixerCtrls[ctrl].dwLineID = i; if ( !DeviceHasMute(line->deviceID, IsInput(line->direction)) ) mixer.mixerCtrls[ctrl].ctrl.fdwControl |= MIXERCONTROL_CONTROLF_DISABLED; mixer.mixerCtrls[ctrl].ctrl.cbStruct = sizeof(MIXERCONTROLW); mixer.mixerCtrls[ctrl].ctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE; mixer.mixerCtrls[ctrl].ctrl.dwControlID = ctrl; mixer.mixerCtrls[ctrl].ctrl.Bounds.s1.dwMinimum = 0; mixer.mixerCtrls[ctrl].ctrl.Bounds.s1.dwMaximum = 1; ctrl++; } assert(ctrl == mixer.numCtrl); }
/* * Getters */ static BOOL MIX_LineGetVolume(DWORD lineID, DWORD channels, Float32 *left, Float32 *right) { MixerLine *line = &mixer.lines[lineID]; UInt32 size = sizeof(Float32); OSStatus err = noErr; AudioObjectPropertyAddress address; *left = *right = 0.0; address.mSelector = kAudioDevicePropertyVolumeScalar; address.mScope = IsInput(line->direction) ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; address.mElement = 1; err = AudioObjectGetPropertyData(line->deviceID, &address, 0, NULL, &size, left); if (err != noErr) return FALSE; if (channels == 2) { size = sizeof(Float32); address.mElement = 2; err = AudioObjectGetPropertyData(line->deviceID, &address, 0, NULL, &size, right); if (err != noErr) return FALSE; } TRACE("lineID %d channels %d return left %f right %f\n", lineID, channels, *left, *right); return (err == noErr); }
string CAG_RegEx::ConcatExpand(string strRegEx) { string strRes; for(int i=0; i<strRegEx.size()-1; ++i) { char cLeft = strRegEx[i]; char cRight = strRegEx[i+1]; strRes += cLeft; if((IsInput(cLeft)) || (IsRightParanthesis(cLeft)) || (cLeft == '*')) if((IsInput(cRight)) || (IsLeftParanthesis(cRight))) strRes += char(8); } strRes += strRegEx[strRegEx.size()-1]; return strRes; }
void HP_Stream::GetPropertyData(const AudioObjectPropertyAddress& inAddress, UInt32 inQualifierDataSize, const void* inQualifierData, UInt32& ioDataSize, void* outData) const { // take and hold the state mutex CAMutex::Locker theStateMutex(const_cast<HP_Device*>(mOwningDevice)->GetStateMutex()); switch(inAddress.mSelector) { case kAudioObjectPropertyName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyName"); *static_cast<CFStringRef*>(outData) = CopyStreamName(); break; case kAudioObjectPropertyManufacturer: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyName"); *static_cast<CFStringRef*>(outData) = CopyStreamManufacturerName(); break; case kAudioObjectPropertyElementName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementName"); *static_cast<CFStringRef*>(outData) = CopyElementFullName(inAddress); break; case kAudioObjectPropertyElementCategoryName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementCategoryName"); *static_cast<CFStringRef*>(outData) = CopyElementCategoryName(inAddress); break; case kAudioObjectPropertyElementNumberName: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioObjectPropertyElementNumberName"); *static_cast<CFStringRef*>(outData) = CopyElementNumberName(inAddress); break; case kAudioStreamPropertyDirection: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyDirection"); *static_cast<UInt32*>(outData) = IsInput() ? 1 : 0; break; case kAudioStreamPropertyTerminalType: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyTerminalType"); *static_cast<UInt32*>(outData) = GetTerminalType(); break; case kAudioStreamPropertyStartingChannel: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyStartingChannel"); *static_cast<UInt32*>(outData) = GetStartingDeviceChannelNumber(); break; case kAudioStreamPropertyLatency: ThrowIf(ioDataSize != GetPropertyDataSize(inAddress, inQualifierDataSize, inQualifierData), CAException(kAudioHardwareBadPropertySizeError), "HP_Stream::GetPropertyData: wrong data size for kAudioStreamPropertyLatency"); *static_cast<UInt32*>(outData) = GetLatency(); break; default: HP_Object::GetPropertyData(inAddress, inQualifierDataSize, inQualifierData, ioDataSize, outData); break; }; }
bool DigitalIO::GetValue (int channel) { if (IsInput(channel)) { return DIOTable_mp[channel].DigitalInput_p->Get(); } else { return false; } }
void DigitalIO::SetValue (int channel, bool value) { if (IsInput(channel)) { return; } else { return DIOTable_mp[channel].DigitalOutput_p->Set(value); } }
DigitalSource * DigitalIO::GetInputPointer (int channel) { if (IsInput(channel)) { return DIOTable_mp[channel].DigitalInput_p; ; } else { return NULL; } }
bool CAG_RegEx::CreateNFA(string strRegEx) { // Parse regular expresion using similar // method to evaluate arithmetic expressions // But first we will detect concatenation and // insert char(8) at the position where // concatenation needs to occur strRegEx = ConcatExpand(strRegEx); cout<<strRegEx<<" : length "<<strRegEx.size()<<endl; for(int i=0; i<strRegEx.size(); ++i) { // get the charcter char c = strRegEx[i]; if(IsInput(c)) Push(c); else if(m_OperatorStack.empty()) m_OperatorStack.push(c); else if(IsLeftParanthesis(c)) m_OperatorStack.push(c); else if(IsRightParanthesis(c)) { // Evaluate everyting in paranthesis while(!IsLeftParanthesis(m_OperatorStack.top())) if(!Eval()) return false; // Remove left paranthesis after the evaluation m_OperatorStack.pop(); } else { while(!m_OperatorStack.empty() && Presedence(c, m_OperatorStack.top())) if(!Eval()) return false; m_OperatorStack.push(c); } } // Evaluate the rest of operators while(!m_OperatorStack.empty()) if(!Eval()) return false; // Pop the result from the stack if(!Pop(m_NFATable)) return false; // Last NFA state is always accepting state m_NFATable[m_NFATable.size()-1]->m_bAcceptingState = true; return true; }
void DigitalIO::SetToInput (int channel, bool input) { if (input) { if (!IsInput(channel)) { delete DIOTable_mp[channel].DigitalOutput_p; DIOTable_mp[channel].DigitalOutput_p = NULL; DIOTable_mp[channel].DigitalInput_p = new DigitalInput (channel + 1); } } else { if (IsInput(channel)) { delete DIOTable_mp[channel].DigitalInput_p; DIOTable_mp[channel].DigitalInput_p = NULL; DIOTable_mp[channel].DigitalOutput_p = new DigitalOutput (channel + 1); } } }
already_AddRefed<nsAccessible> nsHTMLButtonControlFrame::CreateAccessible() { nsCOMPtr<nsIAccessibilityService> accService = do_GetService("@mozilla.org/accessibilityService;1"); if (accService) { return IsInput() ? accService->CreateHTMLButtonAccessible(mContent, PresContext()->PresShell()) : accService->CreateHTML4ButtonAccessible(mContent, PresContext()->PresShell()); } return nsnull; }
void PrevPos(void) { do { epos--; if(epos<0) { epos=cnt-1; } } while(!IsInput(format[epos])); FindCode(estr[epos]); first=1; }
static BOOL MIX_LineSetMute(DWORD lineID, BOOL mute) { MixerLine *line = &mixer.lines[lineID]; UInt32 val = mute; UInt32 size = sizeof(UInt32); AudioObjectPropertyAddress address; OSStatus err = noErr; address.mSelector = kAudioDevicePropertyMute; address.mScope = IsInput(line->direction) ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; address.mElement = 0; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, 0, size, &val); return (err == noErr); }
bool TProtoSerial::operator() (IMetaProtoSerial& v, int protoField, bool newMessage) { CHECK_FIELD(); NPb::Message* message = GetEmbedMutMessage<NPb::Message>(protoField, newMessage); TMetaProtoSerial serial(*message, protoField, Mode); v.SerialProcess(serial); if (newMessage && IsInput()) { auto* fd = GetFieldDescr(protoField); ENSURE(fd->is_repeated(), "New message on non repeated field"); auto* rfPtr = Refl->MutableRepeatedPtrField<NPb::Message>(&Message, fd); rfPtr->DeleteSubrange(0, 1); } return true; }
void NextPos(void) { do { epos++; if(epos>=cnt) { epos=0; } } while(!IsInput(format[epos])); FindCode(estr[epos]); first=1; }
NS_IMETHODIMP nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsDisplayList onTop; if (IsVisibleForPainting(aBuilder)) { nsresult rv = mRenderer.DisplayButton(aBuilder, aLists.BorderBackground(), &onTop); NS_ENSURE_SUCCESS(rv, rv); } nsDisplayListCollection set; // Do not allow the child subtree to receive events. if (!aBuilder->IsForEventDelivery()) { nsresult rv = BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), aDirtyRect, set, DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT); NS_ENSURE_SUCCESS(rv, rv); // That should put the display items in set.Content() } // Put the foreground outline and focus rects on top of the children set.Content()->AppendToTop(&onTop); // clips to our padding box for <input>s but not <button>s, unless // they have non-visible overflow.. if (IsInput() || GetStyleDisplay()->mOverflowX != NS_STYLE_OVERFLOW_VISIBLE) { nsMargin border = GetStyleBorder()->GetActualBorder(); nsRect rect(aBuilder->ToReferenceFrame(this), GetSize()); rect.Deflate(border); nsresult rv = OverflowClip(aBuilder, set, aLists, rect); NS_ENSURE_SUCCESS(rv, rv); } else { set.MoveTo(aLists); } nsresult rv = DisplayOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); // to draw border when selected in editor return DisplaySelectionOverlay(aBuilder, aLists); }
/* * Setters */ static BOOL MIX_LineSetVolume(DWORD lineID, DWORD channels, Float32 left, Float32 right) { MixerLine *line = &mixer.lines[lineID]; UInt32 size = sizeof(Float32); AudioObjectPropertyAddress address; OSStatus err = noErr; TRACE("lineID %d channels %d left %f right %f\n", lineID, channels, left, right); address.mSelector = kAudioDevicePropertyVolumeScalar; address.mScope = IsInput(line->direction) ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; if (channels == 2) { address.mElement = 1; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, NULL, size, &left); if (err != noErr) return FALSE; address.mElement = 2; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, NULL, size, &right); } else { /* FIXME Using master channel failed ?? return kAudioHardwareUnknownPropertyError address.mElement = 0; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, NULL, size, &left); */ right = left; address.mElement = 1; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, NULL, size, &left); if (err != noErr) return FALSE; address.mElement = 2; err = AudioObjectSetPropertyData(line->deviceID, &address, 0, NULL, size, &right); } return (err == noErr); }
char *inputd(char *form, char *title, char *defstr, int keys, int frame, int mask, int bhelp, int cols, int tmo, int debounce) { int exs,eys,wxs,wxw,wys,wyw,i,j,xp,yp; char trnd[2]={0,0},tch; int act_key=-1, last_key=-1, b_key=-1, run=1, ipos=0; time_t t1,t2,tm1; char knum[12][2]={"1","2","3","4","5","6","7","8","9"," ","0"}; char kalp[12][5]={"+-*/","abcä","def","ghi","jkl","mnoö","pqrs","tuvü","wxyz","","_,.;"}; epos=-1; cpos=0; kpos=0; first=1; time(&tm1); if(cols>25) { cols=25; } if(cols<1) { cols=1; } format=form; estr=strdup(form); cnt=strlen(form); RenderString("X", 310, 250, 20, LEFT, BIG, CMC); i=GetStringLen(title)+10; j=((cnt>cols)?cols:cnt)*exsz; if(j>i) { i=j; } if(keys) { j=3*bxsz; if(j>i) { i=j; } } wxw=i+2*xbrd; i=(((cnt-1)/cols)+1)*eysz; if(keys) { i+=4*bysz; } wyw=((keys)?4:2)*ybrd+i; wxs=((ex-sx)-wxw)/2; wys=(((ey-sy)-wyw)+hsz)/2; exs=wxs+(wxw-((cnt>cols)?cols:cnt)*exsz)/2; eys=wys+ybrd; *estr=0; *rstr=0; j=0; for(i=0; i<strlen(format); i++) { tch=format[i]; if(IsInput(tch)) { if(epos==-1) { epos=i; } if(defstr && j<strlen(defstr)) { estr[i]=defstr[j++]; } else { estr[i]=' '; } } else { estr[i]=format[i]; } } estr[i]=0; RenderBox(wxs-2, wys-hsz-2, wxs+wxw+2, wys+wyw+2, radius, CMH); RenderBox(wxs, wys-hsz, wxs+wxw, wys+wyw, radius, CMC); RenderBox(wxs, wys-hsz, wxs+wxw, wys, radius, CMH); RenderString(title, wxs, wys-15, wxw, CENTER, BIG, CMHT); if(keys) { int bxs=wxs+(wxw-(3*bxsz))/2; int bys=((wys+wyw)-2*ybrd)-4*bysz; for(i=0; i<11; i++) { if(i!=9) { RenderBox(bxs+(i%3)*bxsz, bys+(i/3)*bysz, bxs+((i%3)+1)*bxsz, bys+((i/3)+1)*bysz, radius, COL_MENUCONTENT_PLUS_4); RenderBox(bxs+(i%3)*bxsz+2, bys+(i/3)*bysz+2, bxs+((i%3)+1)*bxsz-2, bys+((i/3)+1)*bysz-2, radius, CMC); RenderString(knum[i], bxs+(i%3)*bxsz, bys+(i/3)*bysz+bysz/2, bxsz, CENTER, MED, CMCIT); RenderString(kalp[i], bxs+(i%3)*bxsz, bys+(i/3)*bysz+bysz-8, bxsz, CENTER, SMALL, CMCIT); } } RenderCircle(bxs,wys+wyw-ybrd-8,'R'); RenderString("Groß/Klein",bxs+15,wys+wyw-ybrd+5,3*bxsz,LEFT,SMALL,CMCIT); RenderCircle(bxs+3*bxsz-GetStringLen("löschen")-15,wys+wyw-ybrd-8,'Y'); RenderString("löschen",bxs,wys+wyw-ybrd+5,3*bxsz,RIGHT,SMALL,CMCIT); } while(run) { for(i=0; i<cnt; i++) { xp=i%cols; yp=i/cols; if(frame && IsInput(format[i])) { RenderBox(exs+xp*exsz, eys+5+yp*eysz, exs+(xp+1)*exsz, eys+(yp+1)*eysz, radius, COL_MENUCONTENT_PLUS_4); } RenderBox(exs+xp*exsz+1, eys+5+yp*eysz+1, exs+(xp+1)*exsz-1, eys+(yp+1)*eysz-1, radius, (epos==i)?CMCS:CMC); *trnd=(mask && format[i]==NUM && IsNum(estr[i]))?'*':estr[i]; RenderString(trnd, exs+xp*exsz+2, eys+yp*eysz+tys, exsz-2, CENTER, MED, (epos==i)?CMCST:(IsInput(format[i]))?CMCT:CMCIT); } memcpy(lfb, lbb, var_screeninfo.xres*var_screeninfo.yres); time(&t1); i=-1; while(i==-1) { i=GetRCCode(); if(i!=-1) { tmo=0; if(i==b_key) { usleep(debounce*1000); while((i=GetRCCode())!=-1); } b_key=i; } time(&t2); if(tmo) { if((t2-tm1)>=tmo) { i=RC_HOME; } } if((((format[epos]!=NUM) && (format[epos]!=HEX)) || ((format[epos]==HEX)&&(strlen(hcod[cpos])>1))) && ((t2-t1)>ndelay) && last_key>=0) { act_key=i=-2; b_key=-3; NextPos(); } } act_key=i; switch(act_key) { case RC_0: SetCode(0); break; case RC_1: SetCode(1); break; case RC_2: SetCode(2); break; case RC_3: SetCode(3); break; case RC_4: SetCode(4); break; case RC_5: SetCode(5); break; case RC_6: SetCode(6); break; case RC_7: SetCode(7); break; case RC_8: SetCode(8); break; case RC_9: SetCode(9); break; case RC_RIGHT: NextPos(); act_key=-2; break; case RC_LEFT: PrevPos(); act_key=-2; break; case RC_PLUS: ipos=epos; while(IsInput(format[ipos+1]) && ((ipos+1)<cnt)) { ++ipos; } while(ipos>epos) { estr[ipos]=estr[ipos-1]; --ipos; } estr[epos]=' '; act_key=-1; break; case RC_MINUS: ipos=epos+1; while(IsInput(format[ipos]) && (ipos<cnt)) { estr[ipos-1]=estr[ipos]; ++ipos; } estr[ipos-1]=' '; act_key=-1; break; case RC_OK: run=0; break; case RC_MUTE: memset(lfb, TRANSP, 720*576); usleep(500000L); while(GetRCCode()!=-1) { usleep(100000L); } while(GetRCCode()!=RC_MUTE) { usleep(500000L); } while((act_key=GetRCCode())!=-1) { usleep(100000L); } break; case RC_UP: if(epos>=cols) { epos-=cols; if(!IsInput(format[epos])) { NextPos(); } } else { epos=cnt-1; if(!IsInput(format[epos])) { PrevPos(); } } act_key=-2; break; case RC_DOWN: if(epos<=(cnt-cols)) { epos+=cols; if(!IsInput(format[epos])) { NextPos(); } } else { epos=0; if(!IsInput(format[epos])) { NextPos(); } } act_key=-2; break; case RC_HOME: free(estr); estr=NULL; *rstr=0; run=0; break; case RC_RED: if(IsAlpha(estr[epos])) { estr[epos]^=0x20; } act_key=-2; break; case RC_YELLOW: epos=-1; for(i=0; i<strlen(format); i++) { if(IsInput(format[i])) { if(epos==-1) { epos=i; } estr[i]=' '; } } act_key=-2; break; case RC_HELP: if(bhelp) { sprintf(estr,"?"); run=0; } break; default: act_key=-2; break; } last_key=act_key; } if(estr) { j=0; for(i=0; i<strlen(format); i++) { if(IsInput(format[i])) { rstr[j++]=estr[i]; } } rstr[j]=0; free(estr); } ReTransform_Msg(rstr); return tstr; }
/************************************************************************** * MIX_GetLineInfo [internal] */ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEW lpMl, DWORD_PTR fdwInfo) { int i; DWORD ret = MMSYSERR_ERROR; MixerLine *line = NULL; TRACE("%04X, %p, %08lx\n", wDevID, lpMl, fdwInfo); if (lpMl == NULL) { WARN("invalid parameter: lpMl = NULL\n"); return MMSYSERR_INVALPARAM; } if (lpMl->cbStruct != sizeof(*lpMl)) { WARN("invalid parameter: lpMl->cbStruct\n"); return MMSYSERR_INVALPARAM; } if (wDevID >= numMixers) { WARN("bad device ID: %04X\n", wDevID); return MMSYSERR_BADDEVICEID; } /* FIXME: set all the variables correctly... the lines below * are very wrong... */ lpMl->dwUser = 0; switch (fdwInfo & MIXER_GETLINEINFOF_QUERYMASK) { case MIXER_GETLINEINFOF_DESTINATION: TRACE("MIXER_GETLINEINFOF_DESTINATION %d\n", lpMl->dwDestination); if ( (lpMl->dwDestination >= 0) && (lpMl->dwDestination < mixer.caps.cDestinations) ) { lpMl->dwLineID = lpMl->dwDestination; line = &mixer.lines[lpMl->dwDestination]; } else ret = MIXERR_INVALLINE; break; case MIXER_GETLINEINFOF_COMPONENTTYPE: TRACE("MIXER_GETLINEINFOF_COMPONENTTYPE %s\n", getComponentType(lpMl->dwComponentType)); for (i = 0; i < mixer.caps.cDestinations; i++) { if (mixer.lines[i].componentType == lpMl->dwComponentType) { lpMl->dwDestination = lpMl->dwLineID = i; line = &mixer.lines[i]; break; } } if (line == NULL) { WARN("can't find component type %s\n", getComponentType(lpMl->dwComponentType)); ret = MIXERR_INVALVALUE; } break; case MIXER_GETLINEINFOF_SOURCE: FIXME("MIXER_GETLINEINFOF_SOURCE %d dst=%d\n", lpMl->dwSource, lpMl->dwDestination); break; case MIXER_GETLINEINFOF_LINEID: TRACE("MIXER_GETLINEINFOF_LINEID %d\n", lpMl->dwLineID); if ( (lpMl->dwLineID >= 0) && (lpMl->dwLineID < mixer.caps.cDestinations) ) { lpMl->dwDestination = lpMl->dwLineID; line = &mixer.lines[lpMl->dwLineID]; } else ret = MIXERR_INVALLINE; break; case MIXER_GETLINEINFOF_TARGETTYPE: FIXME("MIXER_GETLINEINFOF_TARGETTYPE (%s)\n", getTargetType(lpMl->Target.dwType)); switch (lpMl->Target.dwType) { case MIXERLINE_TARGETTYPE_UNDEFINED: case MIXERLINE_TARGETTYPE_WAVEOUT: case MIXERLINE_TARGETTYPE_WAVEIN: case MIXERLINE_TARGETTYPE_MIDIOUT: case MIXERLINE_TARGETTYPE_MIDIIN: case MIXERLINE_TARGETTYPE_AUX: default: FIXME("Unhandled target type (%s)\n", getTargetType(lpMl->Target.dwType)); return MMSYSERR_INVALPARAM; } break; default: WARN("Unknown flag (%08lx)\n", fdwInfo & MIXER_GETLINEINFOF_QUERYMASK); break; } if (line) { lpMl->dwComponentType = line->componentType; lpMl->cChannels = line->numChannels; lpMl->cControls = ControlsPerLine; /* FIXME check there with CoreAudio */ lpMl->cConnections = 1; lpMl->fdwLine = MIXERLINE_LINEF_ACTIVE; MultiByteToWideChar(CP_ACP, 0, line->name, -1, lpMl->szShortName, sizeof(lpMl->szShortName) / sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, line->name, -1, lpMl->szName, sizeof(lpMl->szName) / sizeof(WCHAR)); if ( IsInput(line->direction) ) lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEIN; else lpMl->Target.dwType = MIXERLINE_TARGETTYPE_WAVEOUT; lpMl->Target.dwDeviceID = line->deviceID; lpMl->Target.wMid = mixer.caps.wMid; lpMl->Target.wPid = mixer.caps.wPid; lpMl->Target.vDriverVersion = mixer.caps.vDriverVersion; MultiByteToWideChar(CP_ACP, 0, WINE_MIXER_NAME, -1, lpMl->Target.szPname, sizeof(lpMl->Target.szPname) / sizeof(WCHAR)); ret = MMSYSERR_NOERROR; } return ret; }