Another functional MS 'DEFINE_GUIDSTRUCT' macro

Share your advanced PureBasic knowledge/code with the community.
User avatar
Psychophanta
Addict
Addict
Posts: 4968
Joined: Wed Jun 11, 2003 9:33 pm
Location: Lípetsk, Russian Federation
Contact:

Another functional MS 'DEFINE_GUIDSTRUCT' macro

Post by Psychophanta »

Code: Select all

Global .GUID KSDATAFORMAT_SUBTYPE_ANALOG,KSDATAFORMAT_SUBTYPE_PCM,KSDATAFORMAT_SUBTYPE_IEEE_FLOAT,KSDATAFORMAT_SUBTYPE_DRM,KSDATAFORMAT_SUBTYPE_ALAW,KSDATAFORMAT_SUBTYPE_MULAW,KSDATAFORMAT_SUBTYPE_ADPCM,KSDATAFORMAT_SUBTYPE_MPEG,KSDATAFORMAT_SPECIFIER_VC_ID,KSDATAFORMAT_SPECIFIER_WAVEFORMATEX,KSDATAFORMAT_SPECIFIER_DSOUND
Procedure.b HexByteStringToDecByteSequence(HexString.s,*seq.ascii)
  ;This function converts a given Hex string (.s) to a byte sequence stored in a given base address of sequential memory:
  Protected c.a,Nibbles.l=Len(HexString.s),t.l
  If Nibbles.l&1:HexString.s="0"+HexString.s:Nibbles.l+1:EndIf
  For t.l=1 To Nibbles.l
    c.a=Asc(LCase(Mid(HexString.s,t.l,1)))
    If c<'0' Or c>'f' Or (c>'9' And c<'a')
      ProcedureReturn 0
    EndIf
    If c>'9':c=(c&$5F)-$07:EndIf
    c-'0'
    If t.l&1
      *seq\a=c<<4
    Else
      *seq\a|c
      *seq+1
    EndIf
  Next
  ProcedureReturn 1
EndProcedure
Macro DEFINE_GUIDSTRUCT(caracteres,nombre)
  HexByteStringToDecByteSequence(StringField(caracteres#,1,"-"),@nombre#\Data1)
  !mov eax,dword[v_#nombre#]
  !bswap eax
  !mov dword[v_#nombre#],eax
  HexByteStringToDecByteSequence(StringField(caracteres#,2,"-"),@nombre#\Data2)
  !rol word[v_#nombre#+4],8
  HexByteStringToDecByteSequence(StringField(caracteres#,3,"-"),@nombre#\Data3)
  !rol word[v_#nombre#+6],8
  HexByteStringToDecByteSequence(StringField(caracteres#,4,"-"),@nombre#\Data4[0])
  HexByteStringToDecByteSequence(StringField(caracteres#,5,"-"),@nombre#\Data4[2])
EndMacro
DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4", KSDATAFORMAT_SUBTYPE_ANALOG)
DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM)
DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DRM)
DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ALAW)
DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MULAW)
DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ADPCM)
DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MPEG)
DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196", KSDATAFORMAT_SPECIFIER_VC_ID)
DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3", KSDATAFORMAT_SPECIFIER_DSOUND)
http://www.zeitgeistmovie.com

While world=business:world+mafia:Wend
Will never leave this forum until the absolute bugfree PB :mrgreen: