Public Class Form1
Dim N_DISTINCT_CHARACTERS = 32
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim a(,) As Long = { _
{&H630, &HFEAC, &HFEAB, &HFEAC, &HFEAB}, _
{&H62F, &HFEAA, &HFEA9, &HFEAA, &HFEA9}, _
{&H62C, &HFE9E, &HFE9F, &HFEA0, &HFE9D}, _
{&H62D, &HFEA2, &HFEA3, &HFEA4, &HFEA1}, _
{&H62E, &HFEA6, &HFEA7, &HFEA8, &HFEA5}, _
{&H647, &HFEEA, &HFEEB, &HFEEC, &HFEE9}, _
{&H639, &HFECA, &HFECB, &HFECC, &HFEC9}, _
{&H63A, &HFECE, &HFECF, &HFED0, &HFECD}, _
{&H641, &HFED2, &HFED3, &HFED4, &HFED1}, _
{&H642, &HFED6, &HFED7, &HFED8, &HFED5}, _
{&H62B, &HFE9A, &HFE9B, &HFE9C, &HFE99}, _
{&H635, &HFEBA, &HFEBB, &HFEBC, &HFEB9}, _
{&H636, &HFEBE, &HFEBF, &HFEC0, &HFEBD}, _
{&H637, &HFEC2, &HFEC3, &HFEC4, &HFEC1}, _
{&H643, &HFEDA, &HFEDB, &HFEDC, &HFED9}, _
{&H645, &HFEE2, &HFEE3, &HFEE4, &HFEE1}, _
{&H646, &HFEE6, &HFEE7, &HFEE8, &HFEE5}, _
{&H62A, &HFE96, &HFE97, &HFE98, &HFE95}, _
{&H627, &HFE8E, &HFE8D, &HFE8E, &HFE8D}, _
{&H644, &HFEDE, &HFEDF, &HFEE0, &HFEDD}, _
{&H628, &HFE90, &HFE91, &HFE92, &HFE8F}, _
{&H64A, &HFEF2, &HFEF3, &HFEF4, &HFEF1}, _
{&H633, &HFEB2, &HFEB3, &HFEB4, &HFEB1}, _
{&H634, &HFEB6, &HFEB7, &HFEB8, &HFEB5}, _
{&H638, &HFEC6, &HFEC7, &HFEC8, &HFEC5}, _
{&H632, &HFEB0, &HFEAF, &HFEB0, &HFEAF}, _
{&H648, &HFEEE, &HFEED, &HFEEE, &HFEED}, _
{&H629, &HFE94, &HFE93, &HFE93, &HFE93}, _
{&H649, &HFEF0, &HFEEF, &HFEF0, &HFEEF}, _
{&H631, &HFEAE, &HFEAD, &HFEAE, &HFEAD}, _
{&H624, &HFE86, &HFE85, &HFE86, &HFE85}, _
{&H621, &HFE80, &HFE80, &HFE80, &HFE7F}, _
{&H626, &HFE8A, &HFE8B, &HFE8C, &HFE89}, _
{&H623, &HFE84, &HFE83, &HFE84, &HFE83}, _
{&H622, &HFE82, &HFE81, &HFE82, &HFE81}, _
{&H625, &HFE88, &HFE87, &HFE88, &HFE87} _
}
Dim linkBefore, linkAfter As Boolean
linkAfter = 0
linkBefore = 0
Dim out() As Long
Dim in_() As Long = {1587, 1604, 1575, 1605}
out = in_
Dim ch As Long
For i = 0 To in_.Length - 1
ch = in_(i)
If ch.CompareTo(&H621) > -1 And ch.CompareTo(&H64A) < 1 Then
Dim idx = 0
Do While idx < N_DISTINCT_CHARACTERS
If a(idx, 0) = in_(i) Then Exit Do
idx += 1
Loop
If (i = in_.Length - 1) Then
linkAfter = 0
Else
linkAfter = (isFromTheSet1(in_(i + 1)) Or isFromTheSet2(in_(i + 1)))
End If
If (i = 0) Then
linkBefore = 0
Else
linkBefore = isFromTheSet1(in_(i - 1))
End If
If (linkBefore And linkAfter) Then out(i) = a(idx, 3)
If (linkBefore And (Not linkAfter)) Then out(i) = a(idx, 1)
If ((Not linkBefore) And linkAfter) Then out(i) = a(idx, 2)
If ((Not linkBefore) And (Not linkAfter)) Then out(i) = a(idx, 4)
End If
Next
ArabicReverse(out) Dim outs = ""
For ip = 0 To out.Length - 1
outs = outs & out(ip) & " "
Next
MsgBox(outs)
End Sub
Private Sub ArabicReverse(ByRef arstr() As Long)
Dim r = arstr.Length - 1
Dim tempstr(arstr.Length) As Long
For i = 0 To arstr.Length - 1
tempstr(i) = arstr(r - i)
Next
arstr = tempstr
End Sub
Private Function isFromTheSet1(ByVal ccc As Long)
Static theSet1() As Long = { _
&H62C, &H62D, &H62E, &H647, &H639, &H63A, &H641, &H642, _
&H62B, &H635, &H636, &H637, &H643, &H645, &H646, &H62A, _
&H644, &H628, &H64A, &H633, &H634, &H638}
Dim i = 0
Do While (i < 22)
If (ccc = theSet1(i)) Then Return True
i += 1
Loop
Return False
End Function
Private Function isFromTheSet2(ByVal ccc As Long)
Static theSet2() As Long = { _
&H627, &H623, &H625, &H622, &H62F, &H630, &H631, &H632, _
&H648, &H624, &H629, &H649}
Dim i = 0
Do While (i < 12)
If (ccc = theSet2(i)) Then Return True
i += 1
Loop
Return False
End Function
End Class
|