  External VDSinout.dll
  IO REDUCE,ON
  OPTION SCALE, 96
Title Tag read/write
  DIALOG CREATE,Tag read/write,-1,0,420,237
  DIALOG ADD,MENU,&File,&Open,-,&Exit
  DIALOG ADD,MENU,&Info,&About
  DIALOG ADD,GROUP,GR1,-1,0,420,2
  DIALOG ADD,STYLE,STYLE1,,,,BLACK,YELLOW
  DIALOG ADD,STYLE,STYLE2,,,,BLACK,RED
  DIALOG ADD,COMBO,C1,6,60,138,21,,click
  DIALOG ADD,TEXT,T1,40,10,,,Name:
  DIALOG ADD,TEXT,T2,60,10,,,Artist:
  DIALOG ADD,TEXT,T3,80,10,,,Album:
  DIALOG ADD,TEXT,T4,100,10,,,Comment:
  DIALOG ADD,TEXT,T5,120,10,,,Year:
  DIALOG ADD,TEXT,T6,140,10,,,Genre:
  DIALOG ADD,EDIT,E2,42,60,174,18
  DIALOG ADD,EDIT,E3,60,60,174,18
  DIALOG ADD,EDIT,E4,78,60,174,18
  DIALOG ADD,EDIT,E5,96,60,174,18
  DIALOG ADD,EDIT,E6,114,60,174,18
  DIALOG ADD,COMBO,C2,132,60,174,21
  DIALOG ADD,STATUS,ST
  DIALOG ADD,BUTTON,Open,6,204,30,24,...
  DIALOG ADD,BUTTON,Set,168,12,66,24,Write TAG
  DIALOG ADD,BUTTON,PLAY,168,90,,,PLAY
  DIALOG ADD,BUTTON,STOP,168,168,,,STOP
	DIALOG ADD,BUTTON,RESET,168,246,,,RESET LIST
  DIALOG ADD,TEXT,TEXT1,10,10,,,Mp3 File:
  DIALOG ADD,LIST,trax2,270,10,100,100
  DIALOG ADD,LIST,genre2,270,110,100,100
  DIALOG ADD,LIST,m1l1,270,210,100,100
  DIALOG ADD,LIST,m1l2,270,310,100,100
  DIALOG ADD,LIST,m1l3,380,10,100,100
  DIALOG ADD,LIST,m2l1,380,110,100,100
  DIALOG ADD,LIST,m2l2,380,210,100,100
  DIALOG ADD,LIST,m2l3,380,310,100,100
  DIALOG ADD,TEXT,T7,6,246,160,150,,,STYLE1
  DIALOG ADD,TEXT,T8,20,260,,,Name:,,,STYLE1
  DIALOG ADD,TEXT,Name,20,300,100,20,,,,STYLE2   
  DIALOG ADD,TEXT,T10,50,260,,,Layer:,,STYLE1
  DIALOG ADD,TEXT,LAY,50,300,30,20,,,,STYLE2   
  DIALOG ADD,TEXT,T12,50,340,,,ID:,,STYLE1
  DIALOG ADD,TEXT,ID,50,360,30,20,,,,STYLE2   
  DIALOG ADD,TEXT,T14,80,260,,,Frenquency:,,STYLE1
  DIALOG ADD,TEXT,FREQ,80,330,60,20,,,,STYLE2   
  DIALOG ADD,TEXT,T16,110,260,,,Bitrate:,,STYLE1
  DIALOG ADD,TEXT,Bitrate,110,300,60,20,,,,STYLE2   
  DIALOG SHOW
rem dialog set,E1,%F
 gosub get_lists
 gosub genreclicked
rem gosub get_info1

:loop
  %A = @event()
  if %A
    goto %A
  end
  goto loop
 
:Openmenu
:Openbutton
  %A = @mci(close sound)
  %N = @filedlg("Mp3 files (*.mp3)|*.mp3",Open mp3 files"," hold shift for multi files,,MULTI)
  If @not(@ok(%N))
    INFO No files selected
    goto loop
  end
  list create,2
  list assign,2,%N
  list seek,2,0
  %B = @count(2)
  %C = 0
  repeat
    list add,C1,@name(@item(2)).@ext(@item(2))
    %A = @next(2)
	%C = @succ(%C)
  until @equal(%B,%C)
  list seek,C1,0
  list seek,2,0
  goto C1click
  goto loop

:C1click
%F = 0
%F = @item(C1)
dialog set,name,%F
if @match(2,%F)
  %F = @index(2)
  list seek,2,%F
  %F = @item(2)
end 
gosub get_info
goto loop
  
:get_info
  %K = @file(@shortname(@item(2)),Z)
  %O = @shortname(%F)
  %L = @diff(%K,127)
  %M = @diff(%K,125)
  %N = @IO(READC,%O,%L,%M)
  if @equal(%N,TAG)
    REM READ TITEL
    %L = @diff(%K,124)
	%M = @diff(%K,95)
	%N = @io(readc,%O,%L,%M)
	dialog set,e2,%N
	REM READ ARTITST
	%L = @diff(%K,94)
	%M = @diff(%K,65)
	%N = @io(readc,%O,%L,%M)
	dialog set,e3,%N
	REM READ ALBUM
	%L = @diff(%K,64)
	%M = @diff(%K,35)
	%N = @io(readc,%O,%L,%M)
	dialog set,e4,%N
	REM READ YEAR
	%L = @diff(%K,34)
	%M = @diff(%K,31)
	%N = @io(readc,%O,%L,%M)
	dialog set,e6,%N
	REM READ COMMENT
	%L = @diff(%K,30)
	%M = @diff(%K,1)
	%N = @io(readc,%O,%L,%M)
	dialog set,e5,%N
	REM READ GENRE
    %N = @io(readb,%O,%K,%K)
	if @match(1,%N)
	  %N = @index(1)
	  list seek,c2,%N
	  list seek,1,0
	end  
	gosub get_layer_id
  else
	  gosub get_layer_id
  end	
  exit	
	  
	end  
  end	
  exit	
  
:exitmenu  
:CLOSE
%A = @mci(close sound)
end
STOP

:Playbutton
  %B = @item(2)
  %A = @mci(close sound)
	%B = @shortname(@item(2))
  %A = @mci(open %B alias sound)
  if @ok()
    %A = @mci(play sound)
		dialog set,st,Playing @shortname(%B) now!
  else
    Warn MCI error: %A
  end
  goto loop
  
  		
:Stopbutton
  %A = @mci(close sound)
	dialog set,st,Stop playing @shortname(%B).
  goto loop

:RESETBUTTON
  list clear,c1
	list clear,2
	list close,2
	dialog set,E2,
	dialog set,E3,
	dialog set,E4,
	dialog set,E5,
	dialog set,E6,
	dialog set,name,
	dialog set,bitrate,
	dialog set,freq,
	dialog set,ID,
	dialog set,lay,
	dialog set,c1,
	dialog set,c2,
	dialog set,st,Click on open to select new files  
	goto loop
	
:get_Bitrate
  %2 = 0
  %1 = 0
  %n = 0
  %N = @IO(READb,%O,3,3)
  %2 = 0
  %1 = %N
  GOSUB HEX2BIN
  %2 = @substr(%2,8,8)@substr(%2,7,7)@substr(%2,6,6)@substr(%2,5,5)@substr(%2,4,4)@substr(%2,3,3)@substr(%2,2,2)@substr(%2,1,1)
  %1 = @strdel(%2,1,7)
  %2 = @strdel(%2,7,8)
  %3 = @strdel(%2,1,4)
  %1 = @strdel(%2,5,8)
  IF @null(@dlgtext(ID))
    EXIT
  END
  IF @equal(@dlgtext(ID),1)
    gosub mpeg1
  else
    gosub mpeg2
  end
  exit
  
:mpeg1
  IF @equal(%3,00)
    dialog set,freq,44100
  end
  IF @equal(%3,01)
    dialog set,freq,48000
  end
  IF @equal(%3,10)
    dialog set,freq,32000
  end
  IF @equal(%3,11)
    dialog set,freq,??????
  end
  %N = @dlgtext(lay)
  IF @equal(%N,I)
    list seek,m1l1,0
    %N = @MATCH(m1l1,%1)
    %N = @dlgtext(m1l1)
    gosub parse_freq
  end
  IF @equal(%N,II)
    list seek,m1l2,0
    %N = @MATCH(m1l2,%1)
    %N = @dlgtext(m1l2)
    gosub parse_freq
  end
  IF @equal(%N,III)
    list seek,m1l3,0
    %N = @MATCH(m1l3,%1)
    %N = @dlgtext(m1l3)
    gosub parse_freq
  end
  exit

:mpeg2
  IF @equal(%3,00)
    dialog set,freq,22050
  end
  IF @equal(%3,01)
    dialog set,freq,24000
  end
  IF @equal(%3,10)
    dialog set,freq,16000
  end
  IF @equal(%3,11)
    dialog set,freq,??????
  end
  %N = @dlgtext(lay)
  IF @equal(%N,I)
    list seek,m2l1,0
    %N = @MATCH(m2l1,%1)
    %N = @dlgtext(m2l1)
    gosub parse_freq
  end
  IF @equal(%N,II)
    list seek,m2l2,0
    %N = @MATCH(m2l2,%1)
    %N = @dlgtext(m2l2)
    gosub parse_freq
  end
  IF @equal(%N,III)
    list seek,m2l3,0
    %N = @MATCH(m2l3,%1)
    %N = @dlgtext(m2l3)
    gosub parse_freq
  end
  exit


:get_layer_id
  Dialog set,LAY,
  dialog set,ID,
  if @file(%F,R)
    dialog set,st,File is read only!
    exit
  end		
  %O = @dlgtext(c1)
  %O = @shortname(%O)
  %N = @IO(READb,%O,2,2)
  %1 = %N
  %2 = 8
  gosub hex2bin
  gosub get_layer
  gosub get_Bitrate
  exit

:get_layer
  %1 = @strdel(%2,1,3)
  %1 = @strdel(%1,2,4)
  %2 = @strdel(%2,4,8)
  %2 = @strdel(%2,1,1)
  IF @equal(%1,01)
    dialog set,ID,2
  end
  IF @equal(%1,11)
    dialog set,ID,1
  end
  IF @equal(%1,10)
    dialog set,ID,2.5
  end
  IF @equal(%2,00)
    Dialog set,LAY,???
  end
  IF @equal(%2,01)
    Dialog set,LAY,II
  end
  IF @equal(%2,10)
    Dialog set,LAY,III
  end
  IF @equal(%2,11)
    Dialog set,LAY,I
  end
  exit  

:parse_freq
  option fieldsep,"="
  parse "%1;%N", %N
  %N = %N
  dialog set,bitrate,%N
  exit

:hex2bin
  IF @null(%1)
    %2 =
    exit
  end
  %1 = @sum($%1,0)
  %3 = %2
  %2 =
  if @null(@numeric(%1))
    exit
  end
  repeat
    %2 = %2@dif(%1,@prod(@div(%1,2),2))
    %1 = @div(%1,2)
    %3 = @pred(%3)
  until @both(@zero(%1),@greater(1,%3))
  exit

:traxclicked
%8 = @dlgtext(trax2)
end
exit

:genreclicked
%6 = @index(c2)
list seek,genre2,%6
%5 = @dlgtext(c2)
%6 = @dlgtext(genre2)
end
exit


:Setbutton
IF @null(%F)
  beep
  info No file's selected
  goto loop
end
%A = @file(@shortName(%F),Z)
gosub new_tag
%B = @dlgtext(E2)
gosub add_name
%B = @dlgtext(E3)
gosub add_artist
%B = @dlgtext(E4)
gosub add_album
%B = @dlgtext(E5)
gosub add_comment
%B = @dlgtext(E6)
gosub add_year
gosub traxclicked
%B = @dlgtext(trax2)
gosub genreclicked
%B = @dlgtext(c2)
gosub add_genre
if @file(%F,R)
  dialog set,st,File is Read only
else
  dialog set,st,Tag burnt
end
%F = @shortname(%F)
goto loop

:NEW_TAG
%A = @file(@shortName(%F),Z)
%D = @diff(%A,127)
%L = @diff(%A,125)
%z = @IO(READC,%F,%D,%l)
IF @not(@equal(%Z,TAG))
  %L = @sum(%A,1)
  %D = @sum(%A,129)
  %l = @IO(WRITc,TAG,%F,%l)
  %d = @IO(WRITc, ,%F,%d)
  dialog set,st,new tag added
end
%A = @file(@shortName(%F),Z)
%D = @diff(%A,127)
%L = @diff(%A,125)
exit

:add_year
%C = @len(%B)
if @greater(%C,4)
  %b = @strdel(%B,4,%C)
end
if @not(@greater(%c,3))
  repeat
    %B = " "%B
    %c = @len(%B)
  until @equal(%c,4)
end
%D = @diff(%A,34)
%L = @diff(%A,31)
%B = @IO(WRITc,%B,%F,%D,%L)
exit

:add_album
%C = @len(%B)
if @greater(%C,30)
  %b = @strdel(%B,28,%C)
end
%C = 0
%C = @len(%B)
if @not(@greater(%c,29))
  repeat
    %B = %B" "
    %c = @len(%B)
  until @equal(%c,30)
end
%D = @diff(%A,64)
%L = @diff(%A,35)
%B = @IO(WRITc,%B,%F,%D,%L)
exit

:add_artist
%C = @len(%B)
if @greater(%C,30)
  %b = @strdel(%B,30,%C)
end
%C = 0
%C = @len(%B)
if @not(@greater(%c,29))
  repeat
    %B = %B" "
    %c = @len(%B)
  until @equal(%c,30)
end
%D = @diff(%A,94)
%L = @diff(%A,65)
%B = @IO(WRITc,%B,%F,%D,%L)
exit

:add_comment
%C = @len(%B)
if @greater(%C,30)
  %b = @strdel(%B,30,%C)
end
%C = 0
%C = @len(%B)
if @not(@greater(%c,29))
  repeat
    %B = %B" "
    %c = @len(%B)
  until @equal(%c,30)
end
%D = @diff(%A,30)
%L = @diff(%A,3)
%B = @IO(WRITc,%B,%F,%D,%L)
exit

:add_name
%C = @len(%B)
if @greater(%C,30)
  %b = @strdel(%B,30,%C)
end
%C = 0
%C = @len(%B)
if @not(@greater(%c,29))
  repeat
    %B = %B" "
    %c = @len(%B)
  until @equal(%c,30)
end
%D = @diff(%A,124)
%L = @diff(%A,95)
%B = @IO(WRITc,%B,%F,%D,%L)
exit

:add_genre
%b = %6
%l = @diff(%A,5)
%d = @diff(%A,0)
%B = @IO(WRITb,%B,%f,%d,)
exit


:get_lists
list loadtext,m1l1,
"0000
"0001=32
"0010=64
"0011=96
"0100=128
"0101=160
"0110=192
"0111=224
"1000=256
"1001=288
"1010=320
"1011=352
"1100=384
"1101=416
"1110=448
"1111=
list loadtext,m1l2,
"0000
"0001=32
"0010=48
"0011=56
"0100=64
"0101=80
"0110=96
"0111=112
"1000=128
"1001=160
"1010=192
"1011=224
"1100=256
"1101=320
"1110=384
"1111=
list loadtext,m1l3,
"0000
"0001=32
"0010=40
"0011=48
"0100=56
"0101=64
"0110=80
"0111=96
"1000=112
"1001=128
"1010=160
"1011=192
"1100=224
"1101=256
"1110=320
"1111=
list loadtext,m2l1
"0000
"0001=32
"0010=64
"0011=96
"0100=128
"0101=160
"0110=192
"0111=224
"1000=256
"1001=288
"1010=320
"1011=352
"1100=384
"1101=416
"1110=448
"1111=
list loadtext,m2l2,
"0000
"0001=32
"0010=48
"0011=56
"0100=64
"0101=80
"0110=96
"0111=112
"1000=128
"1001=160
"1010=192
"1011=224
"1100=256
"1101=320
"1110=384
"1111=
list loadtext,m2l3,
"0000
"0001=8
"0010=16
"0011=24
"0100=32
"0101=64
"0110=80
"0111=56
"1000=64
"1001=128
"1010=160
"1011=112
"1100=128
"1101=256
"1110=320
"1111=

list create,1
list loadtext,1,
"00=0000
"01=0001
"02=0002
"03=0003
"04=0004
"05=0005
"06=0006
"07=0007
"08=0008
"09=0009
"10=000A
"11=000B
"12=000C
"13=000D
"14=000E
"15=000F
"16=0010
"17=0011
"18=0012
"19=0013
"20=0014
"21=0015
"22=0016
"23=0017
"24=0018
"25=0019
"26=001A
"27=001B
"28=001C
"29=001D
"30=001E
"31=001F
"32=0020
"33=0021
"34=0022
"35=0023
"36=0024
"37=0025
"38=0026
"39=0027
"40=0028
"41=0029
"42=002A
"43=002B
"44=002C
"45=002D
"46=002E
"47=002F
"48=0030
"49=0031
"50=0032
"51=0033
"52=0034
"53=0035
"54=0036
"55=0037
"56=0038
"57=0039
"58=003A
"59=003B
"60=003C
"61=003D
"62=003E
"63=003F
"64=0040
"65=0041
"66=0042
"67=0043
"68=0044
"69=0045
"70=0046
"71=0047
"72=0048
"73=0049
"74=004A
"75=004B
"76=004C
"77=004D
"78=004E
"79=004F
"80=0050
"81=0051
"82=0052
"83=0053
"84=0054
"85=0055
"86=0056
"87=0057
"88=0058
"89=0059
"90=005A
"91=005B
"92=005C
"93=005D
"94=005E
"95=005F
"96=0060
"97=0061
"98=0062
"99=0063
"100=0064
"101=0065
"102=0066
"103=0067
"104=0068
"105=0069
"106=006A
"107=006B
"108=006C
"109=006D
"110=006E
"111=006F
"112=0070
"113=0071
"114=0072
"115=0073
"116=0074
"117=0075
"118=0076
"119=0077
"120=0078
"121=0079
"122=007A
"123=007B
"124=007C
"125=007D
"126=007E
"127=007F
"128=0080
"129=0081
"130=0082
"131=0083
"132=0084
"133=0085
"134=0086
"135=0087
"136=0088
"137=0089
"138=008A
"139=008B
"140=008C
"141=008D
"142=008E
"143=008F
"144=0090
"145=0091
"146=0092
"147=0093
"148=0094
"149=0095
"150=0096
"151=0097
"152=0098
"153=0099
"154=009A
"155=009B
"156=009C
"157=009D
"158=009E
"159=009F
"160=00A0
"161=00A1
"162=00A2
"163=00A3
"164=00A4
"165=00A5
"166=00A6
"167=00A7
"168=00A8
"169=00A9
"170=00AA
"171=00AB
"172=00AC
"173=00AD
"174=00AE
"175=00AF
"176=00B0
"177=00B1
"178=00B2
"179=00B3
"180=00B4
"181=00B5
"182=00B6
"183=00B7
"184=00B8
"185=00B9
"186=00BA
"187=00BB
"188=00BC
"189=00BD
"190=00BE
"191=00BF
"192=00C0
"193=00C1
"194=00C2
"195=00C3
"196=00C4
"197=00C5
"198=00C6
"199=00C7
list seek,1,0
%9 = 0
repeat
  list seek,1,%9
  %7 = @next(1)
  option fieldsep,=
  parse "%7;%8",%7
  list add,trax2,%8
  %9 = @succ(%9)
until @equal(%9,31)
list seek,trax2,0
list clear,1
list loadtext,1,
"Acid=22
"Acid Jazz=4A
"Acid Punk=49
"Acoustic=63
"Alterative=14
"Alterative Rock=28
"Ambient=1A
"Avantgarde=5A
"Bass=29
"Bebob=55
"Big Band=60
"Blue Grass=59
"Blues=00
"Booty Bass=6B
"Cabaret=41
"Celtic=58
"Chamber Music=68
"Chanson=66
"Chorus=61
"Christian Rap=3D
"Classical Rock=01
"Classical=20
"Club=70
"Comedy=39
"Country=02
"Cult=3A
"Dance=03
"Darkwave=32
"Death Metal=16
"Disco=04
"Dream=37
"Easy Listening=62
"Electronic=34
"Ethnic=30
"Euro Dance=36
"Euro Techno=19
"Fast Fusion=54
"Folk=50
"Folk / Rock=51
"Folklore=73
"Funk=05
"Fushion=1E
"Game=24
"Gangsta=3B
"Gospel=26
"Gothic=31
"Gothic Rock=5B
"Grunge=06
"Hard Rock=4F
"Hip-Hop=07
"House=23
"Humour=64
"Industrial=13
"Instrumental=21
"Instrumental Pop=2E
"Instrumental Rock=2F
"Jazz=08
"Jazz+Funk=1D
"Jungle=3F
"Latin=56
"Lo-Fi=47
"Media Active=2D
"Metal=09
"Musical=4D
"National Folk=52
"Native American=40
"New Age=0A
"New Wave=42
"Noise=27
"Oldies=0B
"Opera=67
"Other=0C
"Polka=4B
"Pop=0D
"Pop - Funk=3E
"Pop - Folk=35
"Porn Groove=6D
"Pranks=17
"Primus=6C
"Progressive Rock=5C
"Psychadelic=43
"Psychadelic Rock=5D
"Punk=2B
"R&B=0E
"RAP=0F
"Rave=44
"Reggae=10
"Retro=4C
"Revival=57
"Rock=11
"Rock & Roll=4E
"Samba=72
"Satire=6E
"Show Tunes=45
"Ska=15
"Slow Jam=6F
"Slow Rock=5F
"Sonata=69
"Soul=2A
"Sound Clip=25
"Soundtrack=18
"Southern Rock=38
"Space=2c
"Speech=65
"Swing=53
"Symphonic Rock=5E
"Symphony=6A
"Tango=71
"Techno=12
"Techno Industrial=33
"Top 40=3C
"Trailer=46
"Trance=1F
"Tribal=48
"Trip Hop=1B
"Unknown=FF
"Vocal=1C
list seek,1,0
%9 = 0
repeat
  list seek,1,%9
  %7 = @next(1)
  option fieldsep,=
  parse "%7;%8",%7
  list add,c2,%7
  list add,genre2,%8
  %9 = @succ(%9)
until @equal(%9,117)
list seek,c2,@diff(%9,2)
list seek,genre2,@diff(%9,2)
list seek,1,0
exit


:Aboutmenu
  %A = @mci(close sound)
  DIALOG CREATE,About,-1,0,250,200,nomin
  DIALOG ADD,STYLE,STYLE1,,,,,LTBLUE
  DIALOG ADD,STYLE,STYLE2,Comic Sans MS,16,B,,Yellow
  DIALOG ADD,GROUP,GROUP1,10,10,230,140
  DIALOG ADD,TEXT,T2,12,20,,,TAG Read/Write,,style2
  DIALOG ADD,BUTTON,B1,160,180,50,24,OK
  DIALOG ADD,TEXT,T3,60,20,,,Coded in VDS 4.0
  DIALOG ADD,TEXT,T4,80,20,,,http://members.xoom.com/janssenr,,style1
  DIALOG ADD,TEXT,T5,100,20,,,FreeWare accepted AS IS
  DIALOG ADD,TEXT,T6,120,20,,,Created by Easy rider.
dialog show
:childloop
  wait event
  goto @event()
:B1button
  dialog close
  wait event
  %A = @event()
  goto loop    
  

