{} procedure Replace(dst:pWideChar;macro:integer;value:PWideChar); var buf:array [0..63] of WideChar; pc:pWideChar; begin buf[0]:='%'; pc:=vars[macro].alias; if pc=nil then pc:=vars[macro].name; StrCopyW(buf+1,pc); pc:=StrEndW(buf); pc^:='%'; (pc+1)^:=#0; StrReplaceW(dst,buf,value); end; function ReplaceAll(s:PWideChar):pWideChar; var tmp:integer; pp,p:pWideChar; ws:array [0..127] of WideChar; ls:pWideChar; i:integer; tmpstr:pWideChar; Info:pSongInfo; begin Info:=pointer(CallService(MS_WAT_RETURNGLOBAL,0,0)); mGetMem(ls,32768); StrCopyW(ls,s); StrReplaceW(ls,'{tab}',#9); StrCopyW(ws,Info^.player); case PlayerCaps of 1: LowerCase(ws); 2: UpperCase(ws); end; Replace(ls,mn_player,ws); Replace(ls,mn_file ,Info^.mfile); Replace(ls,mn_year ,Info^.year); Replace(ls,mn_genre ,Info^.genre); GetExt(Info^.mfile,ws); if LoCaseType=BST_CHECKED then LowerCase(ws) else UpperCase(ws); Replace(ls,mn_type ,ws); Replace(ls,mn_track,IntToStr(ws,Info^.track)); // codec ws[0]:=WideChar( Info^.codec and $FF); ws[1]:=WideChar((Info^.codec shr 8) and $FF); ws[2]:=WideChar((Info^.codec shr 16) and $FF); ws[3]:=WideChar((Info^.codec shr 24) and $FF); ws[4]:=#0; //fps IntToStr(ws,Info^.fps div 100); i:=0; repeat inc(i); until ws[i]=#0; ws[i]:='.'; IntToStr(pWideChar(@ws[i+1]),Info^.fps mod 100); Replace(ls,mn_fps ,ws); Replace(ls,mn_txtver ,Info^.txtver); Replace(ls,mn_height ,IntToStr(ws,Info^.height)); Replace(ls,mn_width ,IntToStr(ws,Info^.width)); Replace(ls,mn_kbps ,IntToStr(ws,Info^.kbps)); Replace(ls,mn_bitrate,ws); if Info^.vbr<>0 then p:=chVBR else if WriteCBR=0 then p:=nil else p:=chCBR; Replace(ls,mn_vbr ,p); Replace(ls,mn_khz ,IntToStr(ws,Info^.khz)); Replace(ls,mn_samplerate,ws); Replace(ls,mn_channels ,IntToStr(ws,Info^.channels)); case Info^.channels of 1: p:=chMono; 2: p:=chStereo; 5,6: p:=ch51; end; Replace(ls,mn_mono,p); Replace(ls,mn_size, IntToK(ws,Info^.fsize,FSizeMode,FSPrecision,FSizePost)); Replace(ls,mn_length,IntToTime(ws,Info^.total)); Replace(ls,mn_total ,ws); case Info^.status of WAT_PLS_PLAYING: pp:=splPlaying; WAT_PLS_PAUSED : pp:=splPaused; else {WAT_PLS_STOPPED:} pp:=splStopped; end; Replace(ls,mn_status,TranslateW(pp)); Replace(ls,mn_nstatus,pp); Replace(ls,mn_lyric ,Info^.lyric); Replace(ls,mn_cover ,Info^.cover); Replace(ls,mn_volume,IntToStr(ws,loword(Info^.volume))); mGetMem(tmpstr,32767); StrCopyW(tmpstr,Info^.artist); if ReplaceSpc=BST_CHECKED then CharReplaceW(tmpstr ,'_',' '); Replace(ls,mn_artist,tmpstr); StrCopyW(tmpstr,Info^.title); if ReplaceSpc=BST_CHECKED then CharReplaceW(tmpstr ,'_',' '); Replace(ls,mn_title,tmpstr); StrCopyW(tmpstr,Info^.album); if ReplaceSpc=BST_CHECKED then CharReplaceW(tmpstr ,'_',' '); Replace(ls,mn_album,tmpstr); StrCopyW(tmpstr,Info^.comment); if ReplaceSpc=BST_CHECKED then CharReplaceW(tmpstr ,'_',' '); Replace(ls,mn_comment,tmpstr); StrCopyW(tmpstr,Info^.wndtext); if ReplaceSpc=BST_CHECKED then CharReplaceW(tmpstr ,'_',' '); Replace(ls,mn_wndtext,tmpstr); mFreeMem(tmpstr); Replace(ls,mn_version,IntToHex(ws,Info^.plyver)); Replace(ls,mn_time ,IntToTime(ws,Info^.time)); if Info^.total>0 then tmp:=(Info^.time*100) div Info^.total else tmp:=0; Replace(ls,mn_percent,IntToStr(ws,tmp)); Replace(ls,mn_playerhome,Info^.url); result:=ls; end;