-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathURL.bas
121 lines (96 loc) · 2.62 KB
/
URL.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
B4R=true
Group=Default Group
ModulesStructureVersion=1
Type=StaticCode
Version=3.9
@EndOfDesignText@
Private Sub Process_Globals
Private bc As ByteConverter
End Sub
Sub Encode(StringToURLEncode() As Byte, EncodedURL() As Byte)
Dim buffer(StringToURLEncode.Length * 3) As Byte
Dim length As Int = UrlEncode(StringToURLEncode, buffer)
bc.ArrayCopy(bc.SubString2(buffer, 0, length), EncodedURL)
End Sub
Sub Decode(StringToURLDecode() As Byte, DecodedURL() As Byte)
Dim buffer(StringToURLDecode.Length) As Byte
Dim length As Int = UrlDecode(StringToURLDecode, buffer)
bc.ArrayCopy(bc.SubString2(buffer, 0, length), DecodedURL)
End Sub
#if C
void yld(B4R::Object* o){
yield();
}
#End If
Private Sub UrlEncode (s() As Byte, Buffer() As Byte) As Int
Dim index As Int = 0
For i = 0 To s.Length - 1
Dim c As Byte = s(i)
If c = 32 Then
Buffer(index) = Asc("+")
index = index + 1
Else if (c >= Asc("0") And c <= Asc("9")) Or (c >= Asc("A") And c <= Asc("Z")) Or (c >= Asc("a") And c <= Asc("z")) Then
Buffer(index) = c
index = index + 1
Else
Dim code1 As Byte = Bit.And(c, 0xf) + Asc("0")
If Bit.And(c, 0xf) > 9 Then
code1 = Bit.And(c, 0xf) - 10 + Asc("A")
End If
c = Bit.And(Bit.ShiftRight(c, 4), 0xf)
Dim code0 As Byte = c + Asc("0")
If c > 9 Then
code0 = c - 10 + Asc("A")
End If
Buffer(index) = Asc("%")
index = index + 1
Buffer(index) = code0
index = index + 1
Buffer(index) = code1
index = index + 1
End If
Next
Return index
End Sub
Private Sub UrlDecode(s() As Byte, Buffer() As Byte) As Int
Dim index As Int = 0
For i = 0 To s.Length - 1
If i Mod 5 = 0 Then
RunNative("yld", Null)
End If
Dim c As Byte = s(i)
If c = Asc("+") Then
Buffer(index) = Asc(" ")
index = index + 1
Else If c=Asc("%") Then
i = i + 1
Dim code0 As Byte = s(i)
i = i + 1
Dim code1 As Byte = s(i)
If code0 >= Asc("0") And code0 <= Asc("9") Then
code0 = code0 - Asc("0")
else if code0 >= Asc("a") And code0 <= Asc("f") Then
code0 = code0 - Asc("a") + 10
else if code0 >= Asc("A") And code0 <= Asc("F") Then
code0 = code0 - Asc("A") + 10
Else
code0 = 0
End If
If code1 >= Asc("0") And code1 <= Asc("9") Then
code1 = code1 - Asc("0")
else if code1 >= Asc("a") And code1 <= Asc("f") Then
code1 = code1 - Asc("a") + 10
else if code1 >= Asc("A") And code1 <= Asc("F") Then
code1 = code1 - Asc("A") + 10
Else
code1 = 0
End If
Buffer(index) = Bit.Or(Bit.ShiftLeft(code0,4), code1)
index = index + 1
Else
Buffer(index) = c
index = index + 1
End If
Next
Return index
End Sub