respect repeat regulation
This commit is contained in:
parent
b6c1a1c1c0
commit
765372aa6b
2 changed files with 505 additions and 481 deletions
BIN
cimp
Executable file
BIN
cimp
Executable file
Binary file not shown.
264
cimp.bas
264
cimp.bas
|
|
@ -1,19 +1,19 @@
|
||||||
declare library "terminkey"
|
'declare library "terminkey"
|
||||||
function terminkey%()
|
'' function terminkey%()
|
||||||
sub echooff()
|
'' sub echooff()
|
||||||
sub echoon()
|
'' sub echoon()
|
||||||
function termwidth()
|
'' function termwidth()
|
||||||
end declare
|
'end declare
|
||||||
|
|
||||||
$console:only
|
$console:only
|
||||||
|
|
||||||
const KEY_UP = 1001
|
const key_up=1001
|
||||||
const KEY_DOWN = 1002
|
const key_down=1002
|
||||||
const KEY_RIGHT = 1003
|
const key_right=1003
|
||||||
const KEY_LEFT = 1004
|
const key_left=1004
|
||||||
|
|
||||||
$if WIN then
|
$if win then
|
||||||
Shell "chcp 65001 > nul"
|
shell"chcp 65001 > nul"
|
||||||
$end if
|
$end if
|
||||||
|
|
||||||
redim file(0) as string
|
redim file(0) as string
|
||||||
|
|
@ -32,7 +32,7 @@ dim shuffle as integer
|
||||||
dim nooutput as integer
|
dim nooutput as integer
|
||||||
dim timevis as integer
|
dim timevis as integer
|
||||||
dim nyan as integer
|
dim nyan as integer
|
||||||
dim marqueeOffset as integer
|
dim marqueeoffset as integer
|
||||||
dim i as integer
|
dim i as integer
|
||||||
|
|
||||||
dim musichandle as long
|
dim musichandle as long
|
||||||
|
|
@ -46,17 +46,17 @@ dim progress as string
|
||||||
dim progressbar as string
|
dim progressbar as string
|
||||||
|
|
||||||
dim tw as integer
|
dim tw as integer
|
||||||
dim fixedWidth as integer
|
dim fixedwidth as integer
|
||||||
dim maxTitleWidth as integer
|
dim maxtitlewidth as integer
|
||||||
dim visibleTitle as string
|
dim visibletitle as string
|
||||||
dim currentSongWidth as integer
|
dim currentsongwidth as integer
|
||||||
dim paddedTitle as string
|
dim paddedtitle as string
|
||||||
dim paddedLength as integer
|
dim paddedlength as integer
|
||||||
dim idx as integer
|
dim idx as integer
|
||||||
dim addedWidth as integer
|
dim addedwidth as integer
|
||||||
dim charIdx as integer
|
dim charidx as integer
|
||||||
dim nextChar as string
|
dim nextchar as string
|
||||||
dim marqueeFrame as integer
|
dim marqueeframe as integer
|
||||||
|
|
||||||
volume=1
|
volume=1
|
||||||
repeat=0
|
repeat=0
|
||||||
|
|
@ -64,7 +64,7 @@ shuffle=0
|
||||||
nooutput=0
|
nooutput=0
|
||||||
timevis=1
|
timevis=1
|
||||||
nyan=0
|
nyan=0
|
||||||
marqueeOffset=0
|
marqueeoffset=0
|
||||||
|
|
||||||
for i=1 to _commandcount
|
for i=1 to _commandcount
|
||||||
select case command$(i)
|
select case command$(i)
|
||||||
|
|
@ -86,7 +86,7 @@ for i=1 to _commandcount
|
||||||
case else
|
case else
|
||||||
if _fileexists(command$(i)) then
|
if _fileexists(command$(i)) then
|
||||||
if lcase$(right$(command$(i),4))=".m3u"then
|
if lcase$(right$(command$(i),4))=".m3u"then
|
||||||
ParseM3U command$(i),file()
|
parsem3u command$(i),file()
|
||||||
else
|
else
|
||||||
file(ubound(file))=command$(i)
|
file(ubound(file))=command$(i)
|
||||||
redim _preserve file(ubound(file)+1)
|
redim _preserve file(ubound(file)+1)
|
||||||
|
|
@ -112,21 +112,21 @@ songname = beforelast(".", afterlast("/", file(i)))
|
||||||
while keyin<>27
|
while keyin<>27
|
||||||
keyin=terminkey
|
keyin=terminkey
|
||||||
select case keyin
|
select case keyin
|
||||||
case KEY_UP
|
case key_up
|
||||||
volume=volume+(0.01+(volume/10))
|
volume=volume+(0.01+(volume/10))
|
||||||
if volume>1 then volume=1
|
if volume>1 then volume=1
|
||||||
_sndvol musichandle,volume
|
_sndvol musichandle,volume
|
||||||
case KEY_DOWN
|
case key_down
|
||||||
volume=volume-(0.01+(volume/10))
|
volume=volume-(0.01+(volume/10))
|
||||||
if volume<0 then volume=0
|
if volume<0 then volume=0
|
||||||
_sndvol musichandle,volume
|
_sndvol musichandle,volume
|
||||||
case KEY_RIGHT
|
case key_right
|
||||||
if _sndgetpos(musichandle)+5<_sndlen(musichandle) then
|
if _sndgetpos(musichandle)+5<_sndlen(musichandle) then
|
||||||
_sndsetpos musichandle,_sndgetpos(musichandle)+5
|
_sndsetpos musichandle,_sndgetpos(musichandle)+5
|
||||||
else
|
else
|
||||||
playnext=1
|
playnext=1
|
||||||
end if
|
end if
|
||||||
case KEY_LEFT
|
case key_left
|
||||||
if _sndgetpos(musichandle)-5>0 then
|
if _sndgetpos(musichandle)-5>0 then
|
||||||
_sndsetpos musichandle,_sndgetpos(musichandle)-5
|
_sndsetpos musichandle,_sndgetpos(musichandle)-5
|
||||||
else
|
else
|
||||||
|
|
@ -168,9 +168,32 @@ while keyin <> 27
|
||||||
if _sndgetpos(musichandle)=_sndlen(musichandle) then playnext=1
|
if _sndgetpos(musichandle)=_sndlen(musichandle) then playnext=1
|
||||||
if playnext<>0 then
|
if playnext<>0 then
|
||||||
oldhandle=musichandle
|
oldhandle=musichandle
|
||||||
|
|
||||||
|
' Check repeat settings before advancing the playlist index
|
||||||
|
if repeat=1 and playnext=1 then
|
||||||
|
' Repeat current song: do not change index i
|
||||||
|
playnext=0
|
||||||
|
else
|
||||||
|
' Advance or go back in playlist
|
||||||
i=i+playnext
|
i=i+playnext
|
||||||
if i > ubound(file) then i = 0
|
|
||||||
if i < lbound(file) then i = ubound(file)
|
' Check boundary conditions based on repeat settings
|
||||||
|
if i>ubound(file) then
|
||||||
|
if repeat=-1 then
|
||||||
|
i=0 ' Loop back to start if repeat playlist is enabled
|
||||||
|
else
|
||||||
|
goto quit ' Exit program if we reached the end of the files
|
||||||
|
end if
|
||||||
|
elseif i<lbound(file) then
|
||||||
|
if repeat=-1 then
|
||||||
|
i=ubound(file) ' Loop to the end if navigating backwards
|
||||||
|
else
|
||||||
|
i=lbound(file) ' Clamp to start if repeat is off
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
end if
|
||||||
|
|
||||||
|
' Only change song if playnext wasn't canceled by a track-level repeat
|
||||||
musichandle=_sndopen(file(i))
|
musichandle=_sndopen(file(i))
|
||||||
if musichandle<>0 then
|
if musichandle<>0 then
|
||||||
_sndvol musichandle,volume
|
_sndvol musichandle,volume
|
||||||
|
|
@ -184,6 +207,7 @@ while keyin <> 27
|
||||||
musichandle=oldhandle
|
musichandle=oldhandle
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
|
||||||
if timevis=1 then
|
if timevis=1 then
|
||||||
progress=" -"+timeleft(musichandle)
|
progress=" -"+timeleft(musichandle)
|
||||||
else
|
else
|
||||||
|
|
@ -191,52 +215,52 @@ while keyin <> 27
|
||||||
end if
|
end if
|
||||||
if nooutput=0 then
|
if nooutput=0 then
|
||||||
tw=termwidth
|
tw=termwidth
|
||||||
fixedWidth = UWidth(state) + UWidth(progress)
|
fixedwidth=uwidth(state)+uwidth(progress)
|
||||||
maxTitleWidth = tw - fixedWidth - 2
|
maxtitlewidth=tw-fixedwidth-2
|
||||||
currentSongWidth = UWidth(songname)
|
currentsongwidth=uwidth(songname)
|
||||||
|
|
||||||
if currentSongWidth > maxTitleWidth and maxTitleWidth > 4 then
|
if currentsongwidth>maxtitlewidth and maxtitlewidth>4 then
|
||||||
paddedTitle = songname + " "
|
paddedtitle=songname+" "
|
||||||
paddedLength = ulen(paddedTitle)
|
paddedlength=ulen(paddedtitle)
|
||||||
visibleTitle = ""
|
visibletitle=""
|
||||||
addedWidth = 0
|
addedwidth=0
|
||||||
idx=0
|
idx=0
|
||||||
while addedWidth < maxTitleWidth
|
while addedwidth<maxtitlewidth
|
||||||
charIdx = ((marqueeOffset + idx) mod paddedLength) + 1
|
charidx=((marqueeoffset+idx) mod paddedlength)+1
|
||||||
nextChar = umid(paddedTitle, charIdx, 1)
|
nextchar=umid(paddedtitle,charidx,1)
|
||||||
if addedWidth + UWidth(nextChar) > maxTitleWidth then exit while
|
if addedwidth+uwidth(nextchar)>maxtitlewidth then exit while
|
||||||
visibleTitle = visibleTitle + nextChar
|
visibletitle=visibletitle+nextchar
|
||||||
addedWidth = addedWidth + UWidth(nextChar)
|
addedwidth=addedwidth+uwidth(nextchar)
|
||||||
idx=idx+1
|
idx=idx+1
|
||||||
wend
|
wend
|
||||||
|
|
||||||
if addedWidth < maxTitleWidth then
|
if addedwidth<maxtitlewidth then
|
||||||
visibleTitle = visibleTitle + space$(maxTitleWidth - addedWidth)
|
visibletitle=visibletitle+space$(maxtitlewidth-addedwidth)
|
||||||
end if
|
end if
|
||||||
|
|
||||||
marqueeFrame = marqueeFrame + 1
|
marqueeframe=marqueeframe+1
|
||||||
if marqueeFrame mod 4 = 0 then
|
if marqueeframe mod 4=0 then
|
||||||
marqueeOffset = marqueeOffset + 1
|
marqueeoffset=marqueeoffset+1
|
||||||
if marqueeOffset >= paddedLength then marqueeOffset = 0
|
if marqueeoffset>=paddedlength then marqueeoffset=0
|
||||||
end if
|
end if
|
||||||
else
|
else
|
||||||
' Terminal is wide enough, no scrolling needed
|
' Terminal is wide enough, no scrolling needed
|
||||||
visibleTitle = songname
|
visibletitle=songname
|
||||||
marqueeOffset = 0
|
marqueeoffset=0
|
||||||
end if
|
end if
|
||||||
|
|
||||||
' Reset marquee offset if song changes
|
' Reset marquee offset if song changes
|
||||||
if playnext <> 0 then marqueeOffset = 0
|
if playnext<>0 then marqueeoffset=0
|
||||||
|
|
||||||
' Print the text line
|
' Print the text line
|
||||||
if nyan=-1 then
|
if nyan=-1 then
|
||||||
print termcolor(7); state; AnimatedRainbowText(visibleTitle); termcolor(7); progress; clearrest
|
print termcolor(7); state; animatedrainbowtext(visibletitle); termcolor(7); progress; clearrest
|
||||||
else
|
else
|
||||||
print termcolor(7); state; termcolor(3); visibleTitle; termcolor(7); progress; clearrest
|
print termcolor(7); state; termcolor(3); visibletitle; termcolor(7); progress; clearrest
|
||||||
end if
|
end if
|
||||||
|
|
||||||
' Generate and print progress bar matching the layout width
|
' Generate and print progress bar matching the layout width
|
||||||
progressbar = bar(UWidth(state) + UWidth(visibleTitle) + UWidth(progress), (_sndgetpos(musichandle) / _sndlen(musichandle)) * 100, 11, 7)
|
progressbar=bar(uwidth(state)+uwidth(visibletitle)+uwidth(progress),(_sndgetpos(musichandle)/_sndlen(musichandle))*100,11,7)
|
||||||
print progressbar; clearrest; cursorback;
|
print progressbar; clearrest; cursorback;
|
||||||
end if
|
end if
|
||||||
|
|
||||||
|
|
@ -262,12 +286,12 @@ sub shufflearray (stringarray() as string)
|
||||||
next
|
next
|
||||||
end sub
|
end sub
|
||||||
|
|
||||||
sub ParseM3U (filename$, array$())
|
sub parsem3u (filename$,array$())
|
||||||
dim i as long,f as long,count as long
|
dim i as long,f as long,count as long
|
||||||
dim basePath$, l$, resolvedPath$
|
dim basepath$,l$,resolvedpath$
|
||||||
for i=len(filename$) to 1 step -1
|
for i=len(filename$) to 1 step -1
|
||||||
if mid$(filename$,i,1)="/"or mid$(filename$,i,1)="\"then
|
if mid$(filename$,i,1)="/"or mid$(filename$,i,1)="\"then
|
||||||
basePath$ = left$(filename$, i)
|
basepath$=left$(filename$,i)
|
||||||
exit for
|
exit for
|
||||||
end if
|
end if
|
||||||
next
|
next
|
||||||
|
|
@ -278,12 +302,12 @@ sub ParseM3U (filename$, array$())
|
||||||
line input #f,l$
|
line input #f,l$
|
||||||
l$=_trim$(l$)
|
l$=_trim$(l$)
|
||||||
if len(l$)>0 and left$(l$,1)<>"#"then
|
if len(l$)>0 and left$(l$,1)<>"#"then
|
||||||
resolvedPath$ = l$
|
resolvedpath$=l$
|
||||||
if not _fileexists(resolvedPath$) then
|
if not _fileexists(resolvedpath$) then
|
||||||
resolvedPath$ = basePath$ + l$
|
resolvedpath$=basepath$+l$
|
||||||
end if
|
end if
|
||||||
if _fileexists(resolvedPath$) then
|
if _fileexists(resolvedpath$) then
|
||||||
array$(ubound(array$)) = resolvedPath$
|
array$(ubound(array$))=resolvedpath$
|
||||||
redim _preserve array$(ubound(array$)+1)
|
redim _preserve array$(ubound(array$)+1)
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
|
@ -359,22 +383,22 @@ function beforelast$ (delim as string, strng as string)
|
||||||
beforelast=left$(strng,_instrrev(strng,delim)-1)
|
beforelast=left$(strng,_instrrev(strng,delim)-1)
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function AnimatedRainbowText$ (text$)
|
function animatedrainbowtext$ (text$)
|
||||||
static offset as double
|
static offset as double
|
||||||
dim result as string
|
dim result as string
|
||||||
dim L as long, i as long
|
dim l as long,i as long
|
||||||
dim r as integer,g as integer,b as integer
|
dim r as integer,g as integer,b as integer
|
||||||
dim hue as double,f as double
|
dim hue as double,f as double
|
||||||
dim sector as integer,v as integer,p as integer,q as integer,t as integer
|
dim sector as integer,v as integer,p as integer,q as integer,t as integer
|
||||||
dim rgbPart$
|
dim rgbpart$
|
||||||
|
|
||||||
L = ulen(text$)
|
l=ulen(text$)
|
||||||
if L = 0 then exit function
|
if l=0 then exit function
|
||||||
offset=offset+5.0
|
offset=offset+5.0
|
||||||
if offset>=360 then offset=offset-360
|
if offset>=360 then offset=offset-360
|
||||||
|
|
||||||
for i = 1 to L
|
for i=1 to l
|
||||||
hue = MOD_Double(offset + ((i - 1) / L) * 360, 360)
|
hue=mod_double(offset+((i-1)/l)*360,360)
|
||||||
sector=int(hue/60)
|
sector=int(hue/60)
|
||||||
f=(hue/60)-sector
|
f=(hue/60)-sector
|
||||||
v=255:p=0:q=255*(1-f):t=255*f
|
v=255:p=0:q=255*(1-f):t=255*f
|
||||||
|
|
@ -386,14 +410,14 @@ function AnimatedRainbowText$ (text$)
|
||||||
case 4:r=t:g=p:b=v
|
case 4:r=t:g=p:b=v
|
||||||
case 5:r=v:g=p:b=q
|
case 5:r=v:g=p:b=q
|
||||||
end select
|
end select
|
||||||
rgbPart$ = _trim$(str$(r)) + ";" + _trim$(str$(g)) + ";" + _trim$(str$(b))
|
rgbpart$=_trim$(str$(r))+";"+_trim$(str$(g))+";"+_trim$(str$(b))
|
||||||
result = result + chr$(27) + "[38;2;" + rgbPart$ + "m" + umid$(text$, i, 1)
|
result=result+chr$(27)+"[38;2;"+rgbpart$+"m"+umid$(text$,i,1)
|
||||||
next i
|
next i
|
||||||
AnimatedRainbowText$ = result + chr$(27) + "[0m"
|
animatedrainbowtext$=result+chr$(27)+"[0m"
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function MOD_Double (value as double, m as double)
|
function mod_double (value as double,m as double)
|
||||||
MOD_Double = value - (m * int(value / m))
|
mod_double=value-(m*int(value/m))
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function ulen% (txt$)
|
function ulen% (txt$)
|
||||||
|
|
@ -401,81 +425,81 @@ function ulen% (txt$)
|
||||||
count%=0
|
count%=0
|
||||||
for i%=1 to len(txt$)
|
for i%=1 to len(txt$)
|
||||||
b%=asc(txt$,i%)
|
b%=asc(txt$,i%)
|
||||||
if (b% and &H80) = 0 or (b% and &HC0) = &HC0 then
|
if (b% and &h80)=0 or (b% and &hc0)=&hc0 then
|
||||||
count%=count%+1
|
count%=count%+1
|
||||||
end if
|
end if
|
||||||
next
|
next
|
||||||
ulen%=count%
|
ulen%=count%
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function umid$ (txt$, startChar%, numChars%)
|
function umid$ (txt$,startchar%,numchars%)
|
||||||
if startChar% < 1 or numChars% <= 0 or txt$ = "" then exit function
|
if startchar%<1 or numchars%<=0 or txt$=""then exit function
|
||||||
|
|
||||||
dim byteIdx%, charCount%, startByte%, endByte%, b%
|
dim byteidx%,charcount%,startbyte%,endbyte%,b%
|
||||||
byteIdx% = 1
|
byteidx%=1
|
||||||
charCount% = 0
|
charcount%=0
|
||||||
|
|
||||||
while byteIdx% <= len(txt$)
|
while byteidx%<=len(txt$)
|
||||||
b% = asc(txt$, byteIdx%)
|
b%=asc(txt$,byteidx%)
|
||||||
if (b% and &H80) = 0 or (b% and &HC0) = &HC0 then
|
if (b% and &h80)=0 or (b% and &hc0)=&hc0 then
|
||||||
charCount% = charCount% + 1
|
charcount%=charcount%+1
|
||||||
if charCount% = startChar% then startByte% = byteIdx%
|
if charcount%=startchar% then startbyte%=byteidx%
|
||||||
end if
|
end if
|
||||||
if startByte% > 0 then exit while
|
if startbyte%>0 then exit while
|
||||||
byteIdx% = byteIdx% + 1
|
byteidx%=byteidx%+1
|
||||||
wend
|
wend
|
||||||
|
|
||||||
if startByte% = 0 then exit function
|
if startbyte%=0 then exit function
|
||||||
|
|
||||||
byteIdx% = startByte%
|
byteidx%=startbyte%
|
||||||
dim charsFound%
|
dim charsfound%
|
||||||
charsFound% = 0
|
charsfound%=0
|
||||||
|
|
||||||
while byteIdx% <= len(txt$)
|
while byteidx%<=len(txt$)
|
||||||
b% = asc(txt$, byteIdx%)
|
b%=asc(txt$,byteidx%)
|
||||||
if (b% and &H80) = 0 or (b% and &HC0) = &HC0 then
|
if (b% and &h80)=0 or (b% and &hc0)=&hc0 then
|
||||||
charsFound% = charsFound% + 1
|
charsfound%=charsfound%+1
|
||||||
end if
|
end if
|
||||||
if charsFound% > numChars% then exit while
|
if charsfound%>numchars% then exit while
|
||||||
byteIdx% = byteIdx% + 1
|
byteidx%=byteidx%+1
|
||||||
wend
|
wend
|
||||||
|
|
||||||
umid$ = mid$(txt$, startByte%, byteIdx% - startByte%)
|
umid$=mid$(txt$,startbyte%,byteidx%-startbyte%)
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function UWidth% (txt$)
|
function uwidth% (txt$)
|
||||||
dim totalWidth%, i%, char$, cp&
|
dim totalwidth%,i%,char$,cp&
|
||||||
totalWidth% = 0
|
totalwidth%=0
|
||||||
for i%=1 to ulen(txt$)
|
for i%=1 to ulen(txt$)
|
||||||
char$=umid(txt$,i%,1)
|
char$=umid(txt$,i%,1)
|
||||||
cp& = GetCodePoint&(char$)
|
cp&=getcodepoint&(char$)
|
||||||
|
|
||||||
if cp& > &H1100 then
|
if cp&>&h1100 then
|
||||||
totalWidth% = totalWidth% + 2
|
totalwidth%=totalwidth%+2
|
||||||
else
|
else
|
||||||
totalWidth% = totalWidth% + 1
|
totalwidth%=totalwidth%+1
|
||||||
end if
|
end if
|
||||||
next
|
next
|
||||||
UWidth% = totalWidth%
|
uwidth%=totalwidth%
|
||||||
end function
|
end function
|
||||||
|
|
||||||
function GetCodePoint& (utf8Char$)
|
function getcodepoint& (utf8char$)
|
||||||
dim lLength as integer
|
dim llength as integer
|
||||||
lLength = len(utf8Char$)
|
llength=len(utf8char$)
|
||||||
dim b1 as _unsigned _byte,b2 as _unsigned _byte
|
dim b1 as _unsigned _byte,b2 as _unsigned _byte
|
||||||
dim b3 as _unsigned _byte,b4 as _unsigned _byte
|
dim b3 as _unsigned _byte,b4 as _unsigned _byte
|
||||||
|
|
||||||
select case lLength
|
select case llength
|
||||||
case 1
|
case 1
|
||||||
GetCodePoint& = asc(utf8Char$, 1)
|
getcodepoint&=asc(utf8char$,1)
|
||||||
case 2
|
case 2
|
||||||
b1 = asc(utf8Char$, 1): b2 = asc(utf8Char$, 2)
|
b1=asc(utf8char$,1):b2=asc(utf8char$,2)
|
||||||
GetCodePoint& = (b1 and &H1F) * 64 + (b2 and &H3F)
|
getcodepoint&=(b1 and &h1f)*64+(b2 and &h3f)
|
||||||
case 3
|
case 3
|
||||||
b1 = asc(utf8Char$, 1): b2 = asc(utf8Char$, 2): b3 = asc(utf8Char$, 3)
|
b1=asc(utf8char$,1):b2=asc(utf8char$,2):b3=asc(utf8char$,3)
|
||||||
GetCodePoint& = (b1 and &H0F) * 4096 + (b2 and &H3F) * 64 + (b3 and &H3F)
|
getcodepoint&=(b1 and &h0f)*4096+(b2 and &h3f)*64+(b3 and &h3f)
|
||||||
case 4
|
case 4
|
||||||
b1 = asc(utf8Char$, 1): b2 = asc(utf8Char$, 2): b3 = asc(utf8Char$, 3): b4 = asc(utf8Char$, 4)
|
b1=asc(utf8char$,1):b2=asc(utf8char$,2):b3=asc(utf8char$,3):b4=asc(utf8char$,4)
|
||||||
GetCodePoint& = (b1 and &H07) * 262144 + (b2 and &H3F) * 4096 + (b3 and &H3F) * 64 + (b4 and &H3F)
|
getcodepoint&=(b1 and &h07)*262144+(b2 and &h3f)*4096+(b3 and &h3f)*64+(b4 and &h3f)
|
||||||
end select
|
end select
|
||||||
end function
|
end function
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue