Compare commits

...

49 Commits

Author SHA1 Message Date
Nik
72acac1082 tests: Added lnk test data 2022-09-02 23:45:11 +02:00
Nik
a9d6c882ac patterns: Replaced tabs with spaces in lnk pattern 2022-09-02 23:21:40 +02:00
Nik
7ecfcd446d patterns: Added Microsoft Shell Link pattern 2022-09-02 23:13:43 +02:00
Nik
b094757b03 includes/type: Display size type bytes without decimal points 2022-09-02 22:49:35 +02:00
Nik
1d0b11372f includes/type: Fixed size type visualizer 2022-09-02 22:45:20 +02:00
mirusu400
f01ddec350 encodings: Add euc_kr table (#46)
* Add euc_kr table

* Fix euc_kr to numberic order, Add README to euc_kr table
2022-09-02 18:34:49 +02:00
Nik
64136ba16c tests: Added correct ntag test file 2022-09-02 17:22:40 +02:00
Nik
1e45938887 patterns: Added NTAG pattern 2022-09-02 17:14:23 +02:00
Nik
f32b162647 patterns: Added VHDX pattern 2022-08-31 15:08:32 +02:00
Nik
d2685aabf5 lib/type: Added size type 2022-08-31 15:05:10 +02:00
Nik
8027cda032 lib/std: Added std::core::formatted_value function 2022-08-31 15:02:47 +02:00
WerWolv
a178509b3c patterns: Added stl pattern 2022-08-29 15:23:43 +02:00
WerWolv
56411ae067 patterns: Added MIME type for ogg pattern 2022-08-29 15:02:42 +02:00
WerWolv
7ee489237d patterns: Added Ogg pattern 2022-08-29 15:02:08 +02:00
WerWolv
4d97e79097 lib/std: Added std::core::member_count and std::core::has_member functions 2022-08-28 22:41:43 +02:00
WerWolv
9fec10000a patterns: Fixed ZigZag encoding in protobuf pattern 2022-08-28 19:07:30 +02:00
WerWolv
b0d8b81861 patterns: Added protobuf pattern 2022-08-28 13:51:58 +02:00
ThePixelCoder
c7fbb661ae patterns: Add GNU program types to ELF (#35) 2022-08-27 12:51:45 +02:00
jz5
7e19b4cb10 patterns: Fixed chunk size issues in WAV pattern. (#44) 2022-08-27 12:50:53 +02:00
Berylskid
ff2726ce8a encodings: Added control characters to shiftjis encoding(#43)
Fixed and added control character encoding.
2022-08-27 12:43:50 +02:00
Alexander Kozlov
ed47fa65f1 encodings: Add cyrillyc cp866 encoding (#45) 2022-08-27 12:42:44 +02:00
WerWolv
f0963603bf patterns: Added bencode pattern 2022-08-27 12:41:59 +02:00
WerWolv
15548b92e2 includes/std: Added core library functions 2022-08-19 00:00:30 +02:00
WerWolv
87efc6cf54 includes/std: Fixed std::string::contains function not checking last character 2022-08-16 09:48:42 +02:00
WerWolv
5e48adcb9d scripts: Properly open legacy hexproj files as UTF-8 2022-08-16 09:27:05 +02:00
Lucy
f548643933 encodings: Add English Pokémon generation 1 character encoding (#42)
* encodings: Add English Pokémon generation 1 character encoding

Source: https://bulbapedia.bulbagarden.net/wiki/Character_encoding_(Generation_I)#English

* readme: Add `pokegen1_en.tbl`
2022-08-14 17:46:40 +02:00
WerWolv
575e4d5381 scripts: Added helper scripts to extract old project files 2022-08-14 14:47:28 +02:00
WerWolv
6b0fad199e git: Remove LR line ending requirements 2022-08-10 19:22:35 +02:00
gmestanley
ece86f1124 patterns: Added enhancements for PE pattern (#41)
The current pattern file for the PE format doesn't have a lot of the format's quirks, so I decided to code them in after I noticed that it doesn't cover the structure known as Rich Header. (Forgive the garbage code for its ProductType enum, it was the only way I found to make the values appear.)
Here are my sources for the improvements included here:

How the MZ header works and some of its variables' names: [How to determine the size of an PE executable file from headers and or footers](https://stackoverflow.com/questions/34684660/how-to-determine-the-size-of-an-pe-executable-file-from-headers-and-or-footers)
The function of some of the MZ header variables: [https://github.com/corkami/pics/blob/master/binary/pe102.png](PE102 by Corkami)
The existence of sections: [https://github.com/corkami/pics/blob/master/binary/pe101/pe101.png](PE101 by Corkami)
The Machine values for LoongArch processors, the architecture enum and how it's used in the Optional Header, Subsystem types, DLL & Section characteristics, how sections, their line numbers and relocations work: [PE Format](https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-rsrc-section)
The Machine values for DECAlphaAXP and i860: [Peering Inside the PE: A Tour of the Win32 Portable Executable File Format](https://docs.microsoft.com/en-us/previous-versions/ms809762(v=msdn.10)#the-pe-header)
How the Rich Header works: [https://www.virusbulletin.com/virusbulletin/2020/01/vb2019-paper-rich-headers-leveraging-mysterious-artifact-pe-format/](VB2019 paper: Rich Headers: leveraging this mysterious artifact of the PE format)
Values of products in the Rich Header: [https://securelist.com/the-devils-in-the-rich-header/84348/](The devil’s in the Rich header)
Every other value not found in the above source: Ghidra
2022-08-10 15:06:10 +02:00
WerWolv
ce2b4d60ca patterns: Added very basic MBR and FAT32 filesystem pattern 2022-08-10 14:36:06 +02:00
WerWolv
7c88439681 git: Output errors when ctest fails 2022-08-09 16:10:27 +02:00
WerWolv
8d3c94be8f tests: Make tests compile with latest PatternLanguage update 2022-08-07 22:55:00 +02:00
WerWolv
0b15299980 patterns: Remove [[static]] attribute from non-static struct in elf pattern 2022-08-07 21:40:54 +02:00
WerWolv
eda13b2518 includes/type: Added [[sealed]] attribute to LEB128 type 2022-08-05 13:49:26 +02:00
Oded Shapira
aa6c90fa5b includes/type: Added LEB128 type (#40)
* Implement VarInt type

* VarInts are little endian, make result u128

* Rename VarInt to LEB128

* It didn't remove the varint file
2022-08-05 13:45:34 +02:00
Oded Shapira
65f2b7821b patterns: Fix typo in pe.hexpat (#39)
Fixed a typo where it said numberOfRelactions to numberOfRelocations.
2022-08-04 23:49:26 +02:00
WerWolv
de752cdbc3 tests: Added tests for magic files 2022-08-03 16:18:18 +02:00
WerWolv
e574f8048e git: Updated ubuntu runner to latest release 2022-08-03 15:51:37 +02:00
WerWolv
874855dc1c git: Updated test workflow script 2022-08-03 15:49:32 +02:00
WerWolv
6f161f7c52 yara: Updated official rules 2022-08-03 15:45:14 +02:00
WerWolv
a6e5efbb7f includes: Added missing #pragma once to all files 2022-08-03 15:44:30 +02:00
WerWolv
72c92ce671 tests: Added tests for include libraries 2022-08-03 15:44:10 +02:00
WerWolv
5cf0daca4b includes/type: Replaced std/types.pat with the types library 2022-08-01 13:12:23 +02:00
WerWolv
c41f7479aa includes/std: Added std::time library 2022-08-01 13:11:41 +02:00
WerWolv
660da67e3b patterns: Removed [[static]] attribute from ARFile struct 2022-07-31 14:53:03 +02:00
Berylskid
9b564fe403 encodings: Change 00=() to space bar (#38)
Currently, the decode column is too wide horizontally, making it unusable. This PR is intended to solve that.
2022-07-30 21:27:39 +02:00
WerWolv
be0632fac2 encodings: Fixed readme copy-paste errors 2022-07-27 16:26:08 +02:00
WerWolv
3a4b3873d1 scripts: Added script to transform 010 editor CSV encoding files to table files 2022-07-27 15:58:03 +02:00
WerWolv
63468e543a encodings: Added various new encoding files 2022-07-27 15:57:45 +02:00
71 changed files with 1139741 additions and 487 deletions

8
.gitattributes vendored
View File

@@ -1,10 +1,2 @@
*.pat linguist-language=Rust
*.hexpat linguist-language=Rust
constants/* text eol=lf
encodings/* text eol=lf
includes/* text eol=lf
magic/* text eol=lf
patterns/* text eol=lf
structs/* text eol=lf
tips/* text eol=lf
yara/* text eol=lf

View File

@@ -9,7 +9,7 @@ on:
jobs:
tests:
name: 🧪 Unit Tests
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
actions: read
contents: read
@@ -19,7 +19,6 @@ jobs:
- name: 🧰 Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: ⬇️ Install dependencies
@@ -27,14 +26,15 @@ jobs:
sudo apt update
sudo apt install -y \
build-essential \
gcc-11 \
g++-11 \
gcc-12 \
g++-12 \
lld \
${PKGCONF:-} \
cmake \
make \
python3 \
python3-pip
python3-pip \
libmagic-dev
sudo pip install jsonschema
@@ -43,7 +43,7 @@ jobs:
cd tests
mkdir -p build
cd build
CC=gcc-11 CXX=g++-11 cmake \
CC=gcc-12 CXX=g++-12 cmake \
-DCMAKE_C_FLAGS="-fuse-ld=lld" \
-DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
-DLIBPL_ENABLE_TESTS=OFF \
@@ -53,7 +53,7 @@ jobs:
- name: 🧪 Perform Unit Tests
run: |
cd tests/build
ctest
ctest --output-on-failure
- name: 📎 Validate JSON Files
run: |
cd constants

6
.gitmodules vendored
View File

@@ -1,8 +1,4 @@
[submodule "rules"]
path = yara/official_rules
url = https://github.com/Yara-Rules/rules
branch = master
[submodule "tests/lib/pl"]
path = tests/lib/pl
url = https://github.com/WerWolv/PatternLanguage
branch = master
branch = master

View File

@@ -32,12 +32,21 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed
| VDF | | `patterns/vdf.hexpat` | Binary Value Data Format (.vdf) files |
| IP | | `patterns/ip.hexpat` | Ethernet II Frames (IP Packets) |
| UF2 | | `patterns/uf2.hexpat` | [USB Flashing Format](https://github.com/microsoft/uf2) |
| File System | | `patterns/fs.hexpat` | Drive File System |
| Bencode | `application/x-bittorrent` | `patterns/bencode.hexpat` | Bencode encoding, used by Torrent files |
| Protobuf | | `patterns/protobuf.hexpat` | Google Protobuf encoding |
| OGG | `audio/ogg` | `patterns/ogg.hexpat` | OGG Audio format |
| STL | `model/stl` | `patterns/stl.hexpat` | STL 3D Model format |
| VHDX | | `patterns/vhdx.hexpat` | Microsoft Hyper-V Virtual Hard Disk format |
| NTAG | | `patterns/ntag.hexpat` | NTAG213/NTAG215/NTAG216, NFC Forum Type 2 Tag compliant IC |
| Shell Link | `application/x-ms-shortcut` | `patterns/lnk.hexpat` | Windows Shell Link file format |
### Scripts
| Name | Path | Description |
|------|------|-------------|
| svd2pat | `scripts/svd2pat.py` | Converts a ARM .svd register MMIO definition file into a pattern |
| csv2tbl | `scripts/csv2tbl.py` | Converts a 010 editor CSV encoding file into a table file |
### Pattern Libraries
@@ -72,15 +81,39 @@ Hex patterns, include patterns and magic files for the use with the ImHex Hex Ed
| Name | Path | Description |
|------|------|-------------|
| ANSI | `encodings/ansi.tbl` | ANSI encoding |
| Arabic ISO | `encodings/arabic_iso.tbl` | Arabic ISO encoding |
| Arabic Windows | `encodings/arabic_windows.tbl` | Arabic Windows encoding |
| ASCII | `encodings/ascii.tbl` | Regular ASCII encoding |
| ASCII+ANSI | `encodings/ascii_ansi.tbl` | Extended ASCII encoding |
| ASCII+OEM | `encodings/ascii_oem.tbl` | ASCII encoding with Windows OEM characters |
| Baltic ISO | `encodings/baltic_iso.tbl` | Baltic ISO encoding |
| Baltic Windows | `encodings/baltic_windows.tbl` | Baltic Windows encoding |
| Cyrillic ISO | `encodings/cyrillic_iso.tbl` | Cyrillic ISO encoding |
| Cyrillic Windows | `encodings/cyrillic_windows.tbl` | Cyrillic Windows encoding |
| Cyrillic KOI8-R | `encodings/cyrillic_koi8_r.tbl` | Cyrillic KOI8-R encoding (Russian Characters) |
| Cyrillic KOI8-U | `encodings/cyrillic_koi8_u.tbl` | Cyrillic KOI8-U encoding (Ukranian Characters) |
| Eastern Europe ISO | `encodings/eastern_europe_iso.tbl` | Eastern Europe ISO encoding |
| Eastern Europe Windows | `encodings/eastern_europe_windows.tbl` | Eastern Europe Windows encoding |
| EBCDIC | `encodings/ebcdic.tbl` | Extended Binary Coded Decimal Interchange Code, developed by IBM for their Main Frames |
| EUC-JP | `encodings/euc_jp.tbl` | EUC-JP encoding with NEC special and IBM extended characters |
| EUC-KR | `encodings/euc_kr.tbl` | EUC-KR encoding |
| Greek ISO | `encodings/greek_iso.tbl` | Greek ISO encoding |
| Greek Windows | `encodings/greek_windows.tbl` | Greek Windows encoding |
| Hebrew ISO | `encodings/hebrew_iso.tbl` | Hebrew ISO encoding |
| Hebrew Windows | `encodings/hebrew_windows.tbl` | Hebrew Windows encoding |
| ISO/IEC 646 | `encodings/iso_646.tbl` | ISO/IEC 646 encoding, an older version of ASCII |
| ISO/IEC 6937 | `encodings/iso_6937.tbl` | ISO/IEC 6937 encoding, an extension of ASCII containing additional character |
| Shift-JIS with half-width characters | `encodings/shiftjis_halfchars.tbl` | Shift-JIS encoding including half-width characters at 0xA1 - 0xDF |
| Shift-JIS UTF-8 | `encodings/shiftjis.tbl` | Shift-JIS encoding in UTF-8 |
| JIS 0201 | `encodings/jis_x_0201.tbl` | JIS X 0201 encoding in UTF-8 |
| JIS X 0211 | `encodings/jis_x_0211.tbl` | JIS X 0211 encoding in UTF-8 |
| JIS 0213 | `encodings/jis_x_0213.tbl` | JIS X 0213 encoding in UTF-8 |
| Macintosh | `encodings/macintosh.tbl` | Macintosh character encoding used by the Kermit protocol |
| Pokémon (English, Generation 1) | `encodings/pokegen1_en.tbl` | Character encoding used by the English generation 1 Pokémon games |
| Shift-JIS UTF-8 | `encodings/shiftjis.tbl` | Shift-JIS encoding in UTF-8 |
| Thai | `encodings/thai.tbl` | Thai character encoding |
| Turkish ISO | `encodings/turkish_iso.tbl` | Turkish ISO encoding |
| Turkish Windows | `encodings/turkish_windows.tbl` | Turkish Windows encoding |
| UTF-8 | `encodings/utf8.tbl` | UTF-8 encoding |
| Vietnamese | `encodings/vietnamese.tbl` | Vietnamese character encoding |
## Contributing

View File

@@ -1,255 +0,0 @@
*0D0A
00
01
02
03
04
05
06
07
0B
0C
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
7E
7F
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
B7
08=BackSpace
09=\t
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
91='
92='
9F==<3D>
A0=
A1=<3D>
A2=<3D>
A3=<3D>
A4=<3D>
A5=<3D>
A6=<3D>
A7=<3D>
A8=<3D>
A9=<3D>
AA=<3D>
AB=<3D>
AC=<3D>
AD=<3D>
AE=<3D>
AF=<3D>
B0=<3D>
B1=<3D>
B2=<3D>
B3=<3D>
B4=<3D>
B5=<3D>
B6=<3D>
B8=<3D>
B9=<3D>
BA=<3D>
BB=<3D>
BC=<3D>
BD=<3D>
BE=<3D>
BF=<3D>
C0=A
C1=<3D>
C2=<3D>
C3=<3D>
C4=<3D>
C5=<3D>
C6=<3D>
C7=<3D>
C8=<3D>
C9=<3D>
CA=<3D>
CB=<3D>
CC=<3D>
CD=<3D>
CE=<3D>
CF=<3D>
D0=<3D>
D1=<3D>
D2=<3D>
D3=<3D>
D4=<3D>
D5=<3D>
D6=<3D>
D7=<3D>
D8=<3D>
D9=<3D>
DA=<3D>
DB=<3D>
DC=<3D>
DD=<3D>
DE=<3D>
DF=<3D>
E0=<3D>
E1=<3D>
E2=<3D>
E3=<3D>
E4=<3D>
E5=<3D>
E6=<3D>
E7=<3D>
E8=<3D>
E9=<3D>
EA=<3D>
EB=<3D>
EC=<3D>
ED=<3D>
EE=<3D>
EF=<3D>
F0=<3D>
F1=<3D>
F2=<3D>
F3=<3D>
F4=<3D>
F5=<3D>
F6=<3D>
F7=<3D>
F8=<3D>
F9=<3D>
FA=<3D>
FB=<3D>
FC=<3D>
FD=<3D>
FE=<3D>
FF=<3D>

256
encodings/arabic_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1
A2
A3
A4=¤
A5
A6
A7
A8
A9
AA
AB
AC=،
AD=­
AE
AF
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB=؛
BC
BD
BE
BF=؟
C0
C1=ء
C2=آ
C3=أ
C4=ؤ
C5=إ
C6=ئ
C7=ا
C8=ب
C9=ة
CA=ت
CB=ث
CC=ج
CD=ح
CE=خ
CF=د
D0=ذ
D1=ر
D2=ز
D3=س
D4=ش
D5=ص
D6=ض
D7=ط
D8=ظ
D9=ع
DA=غ
DB
DC
DD
DE
DF
E0=ـ
E1=ف
E2=ق
E3=ك
E4=ل
E5=م
E6=ن
E7=ه
E8=و
E9=ى
EA=ي
EB=ً
EC=ٌ
ED=ٍ
EE=َ
EF=ُ
F0=ِ
F1=ّ
F2=ْ
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=پ
82=
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=ٹ
8B=
8C=Œ
8D=چ
8E=ژ
8F=ڈ
90=گ
91=
92=
93=“
94=”
95=•
96=
97=—
98=ک
99=™
9A=ڑ
9B=
9C=œ
9D=
9E=
9F=ں
A0= 
A1=،
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=ھ
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=؛
BB=»
BC=¼
BD=½
BE=¾
BF=؟
C0=ہ
C1=ء
C2=آ
C3=أ
C4=ؤ
C5=إ
C6=ئ
C7=ا
C8=ب
C9=ة
CA=ت
CB=ث
CC=ج
CD=ح
CE=خ
CF=د
D0=ذ
D1=ر
D2=ز
D3=س
D4=ش
D5=ص
D6=ض
D7=×
D8=ط
D9=ظ
DA=ع
DB=غ
DC=ـ
DD=ف
DE=ق
DF=ك
E0=à
E1=ل
E2=â
E3=م
E4=ن
E5=ه
E6=و
E7=ç
E8=è
E9=é
EA=ê
EB=ë
EC=ى
ED=ي
EE=î
EF=ï
F0=ً
F1=ٌ
F2=ٍ
F3=َ
F4=ô
F5=ُ
F6=ِ
F7=÷
F8=ّ
F9=ù
FA=ْ
FB=û
FC=ü
FD=
FE=
FF=ے

256
encodings/ascii.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB
BC
BD
BE
BF
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF

256
encodings/ascii_ansi.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=
8C=Œ
8D
8E=Ž
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98=˜
99=™
9A=š
9B=
9C=œ
9D
9E=ž
9F=Ÿ
A0= 
A1=¡
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=ª
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=º
BB=»
BC=¼
BD=½
BE=¾
BF=¿
C0=À
C1=Á
C2=Â
C3=Ã
C4=Ä
C5=Å
C6=Æ
C7=Ç
C8=È
C9=É
CA=Ê
CB=Ë
CC=Ì
CD=Í
CE=Î
CF=Ï
D0=Ð
D1=Ñ
D2=Ò
D3=Ó
D4=Ô
D5=Õ
D6=Ö
D7=×
D8=Ø
D9=Ù
DA=Ú
DB=Û
DC=Ü
DD=Ý
DE=Þ
DF=ß
E0=à
E1=á
E2=â
E3=ã
E4=ä
E5=å
E6=æ
E7=ç
E8=è
E9=é
EA=ê
EB=ë
EC=ì
ED=í
EE=î
EF=ï
F0=ð
F1=ñ
F2=ò
F3=ó
F4=ô
F5=õ
F6=ö
F7=÷
F8=ø
F9=ù
FA=ú
FB=û
FC=ü
FD=ý
FE=þ
FF=ÿ

256
encodings/ascii_oem.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=Ç
81=ü
82=é
83=â
84=ä
85=à
86=å
87=ç
88=ê
89=ë
8A=è
8B=ï
8C=î
8D=ì
8E=Ä
8F=Å
90=É
91=æ
92=Æ
93=ô
94=ö
95=ò
96=û
97=ù
98=ÿ
99=Ö
9A=Ü
9B=¢
9C=£
9D=¥
9E=₧
9F=ƒ
A0=á
A1=í
A2=ó
A3=ú
A4=ñ
A5=Ñ
A6=ª
A7=º
A8=¿
A9=⌐
AA=¬
AB=½
AC=¼
AD=¡
AE=«
AF=»
B0=░
B1=▒
B2=▓
B3=│
B4=┤
B5=╡
B6=╢
B7=╖
B8=╕
B9=╣
BA=║
BB=╗
BC=╝
BD=╜
BE=╛
BF=┐
C0=└
C1=┴
C2=┬
C3=├
C4=─
C5=┼
C6=╞
C7=╟
C8=╚
C9=╔
CA=╩
CB=╦
CC=╠
CD=═
CE=╬
CF=╧
D0=╨
D1=╤
D2=╥
D3=╙
D4=╘
D5=╒
D6=╓
D7=╫
D8=╪
D9=┘
DA=┌
DB=█
DC=▄
DD=▌
DE=▐
DF=▀
E0=α
E1=ß
E2=Γ
E3=π
E4=Σ
E5=σ
E6=µ
E7=τ
E8=Φ
E9=Θ
EA=Ω
EB=δ
EC=∞
ED=φ
EE=ε
EF=∩
F0=≡
F1=±
F2=≥
F3=≤
F4=⌠
F5=⌡
F6=÷
F7=≈
F8=°
F9=∙
FA=·
FB=√
FC=ⁿ
FD=²
FE=■
FF= 

256
encodings/baltic_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1=”
A2=¢
A3=£
A4=¤
A5=„
A6=¦
A7=§
A8=Ø
A9=©
AA=Ŗ
AB=«
AC=¬
AD=­
AE=®
AF=Æ
B0=°
B1=±
B2=²
B3=³
B4=“
B5=µ
B6=¶
B7=·
B8=ø
B9=¹
BA=ŗ
BB=»
BC=¼
BD=½
BE=¾
BF=æ
C0=Ą
C1=Į
C2=Ā
C3=Ć
C4=Ä
C5=Å
C6=Ę
C7=Ē
C8=Č
C9=É
CA=Ź
CB=Ė
CC=Ģ
CD=Ķ
CE=Ī
CF=Ļ
D0=Š
D1=Ń
D2=Ņ
D3=Ó
D4=Ō
D5=Õ
D6=Ö
D7=×
D8=Ų
D9=Ł
DA=Ś
DB=Ū
DC=Ü
DD=Ż
DE=Ž
DF=ß
E0=ą
E1=į
E2=ā
E3=ć
E4=ä
E5=å
E6=ę
E7=ē
E8=č
E9=é
EA=ź
EB=ė
EC=ģ
ED=ķ
EE=ī
EF=ļ
F0=š
F1=ń
F2=ņ
F3=ó
F4=ō
F5=õ
F6=ö
F7=÷
F8=ų
F9=ł
FA=ś
FB=ū
FC=ü
FD=ż
FE=ž
FF=

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83
84=„
85=…
86=†
87=‡
88
89=‰
8A
8B=
8C
8D=¨
8E=ˇ
8F=¸
90
91=
92=
93=“
94=”
95=•
96=
97=—
98
99=™
9A
9B=
9C
9D=¯
9E=˛
9F
A0= 
A1
A2=¢
A3=£
A4=¤
A5
A6=¦
A7=§
A8=Ø
A9=©
AA=Ŗ
AB=«
AC=¬
AD=­
AE=®
AF=Æ
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=ø
B9=¹
BA=ŗ
BB=»
BC=¼
BD=½
BE=¾
BF=æ
C0=Ą
C1=Į
C2=Ā
C3=Ć
C4=Ä
C5=Å
C6=Ę
C7=Ē
C8=Č
C9=É
CA=Ź
CB=Ė
CC=Ģ
CD=Ķ
CE=Ī
CF=Ļ
D0=Š
D1=Ń
D2=Ņ
D3=Ó
D4=Ō
D5=Õ
D6=Ö
D7=×
D8=Ų
D9=Ł
DA=Ś
DB=Ū
DC=Ü
DD=Ż
DE=Ž
DF=ß
E0=ą
E1=į
E2=ā
E3=ć
E4=ä
E5=å
E6=ę
E7=ē
E8=č
E9=é
EA=ź
EB=ė
EC=ģ
ED=ķ
EE=ī
EF=ļ
F0=š
F1=ń
F2=ņ
F3=ó
F4=ō
F5=õ
F6=ö
F7=÷
F8=ų
F9=ł
FA=ś
FB=ū
FC=ü
FD=ż
FE=ž
FF=˙

View File

@@ -0,0 +1,256 @@
00=NUL
01=☺
02=☻
03=♥
04=♦
05=♣
06=♠
07=•
08=◘
09=○
0A=◙
0B=♂
0C=♀
0D=♪
0E=♫
0F=☼
10=►
11=◄
12=↕
13=‼
14=¶
15=§
16=▬
17=↨
18=↑
19=↓
1A=→
1B=←
1C=∟
1D=↔
1E=▲
1F=▼
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=⌂
80=А
81=Б
82=В
83=Г
84=Д
85=Е
86=Ж
87=З
88=И
89=Й
8A=К
8B=Л
8C=М
8D=Н
8E=О
8F=П
90=Р
91=С
92=Т
93=У
94=Ф
95=Х
96=Ц
97=Ч
98=Ш
99=Щ
9A=Ъ
9B=Ы
9C=Ь
9D=Э
9E=Ю
9F=Я
A0=а
A1=б
A2=в
A3=г
A4=д
A5=е
A6=ж
A7=з
A8=и
A9=й
AA=к
AB=л
AC=м
AD=н
AE=о
AF=п
B0=░
B1=▒
B2=▓
B3=│
B4=┤
B5=╡
B6=╢
B7=╖
B8=╕
B9=╣
BA=║
BB=╗
BC=╝
BD=╜
BE=╛
BF=┐
C0=└
C1=┴
C2=┬
C3=├
C4=─
C5=┼
C6=╞
C7=╟
C8=╚
C9=╔
CA=╩
CB=╦
CC=╠
CD=═
CE=╬
CF=╧
D0=╨
D1=╤
D2=╥
D3=╙
D4=╘
D5=╒
D6=╓
D7=╫
D8=╪
D9=┘
DA=┌
DB=█
DC=▄
DD=▌
DE=▐
DF=▀
E0=р
E1=с
E2=т
E3=у
E4=ф
E5=х
E6=ц
E7=ч
E8=ш
E9=щ
EA=ъ
EB=ы
EC=ь
ED=э
EE=ю
EF=я
F0=Ё
F1=ё
F2=Є
F3=є
F4=Ї
F5=ї
F6=Ў
F7=ў
F8=°
F9=∙
FA=·
FB=√
FC=№
FD=¤
FE=■
FF= 

256
encodings/cyrillic_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1=Ё
A2=Ђ
A3=Ѓ
A4=Є
A5=Ѕ
A6=І
A7=Ї
A8=Ј
A9=Љ
AA=Њ
AB=Ћ
AC=Ќ
AD=­
AE=Ў
AF=Џ
B0=А
B1=Б
B2=В
B3=Г
B4=Д
B5=Е
B6=Ж
B7=З
B8=И
B9=Й
BA=К
BB=Л
BC=М
BD=Н
BE=О
BF=П
C0=Р
C1=С
C2=Т
C3=У
C4=Ф
C5=Х
C6=Ц
C7=Ч
C8=Ш
C9=Щ
CA=Ъ
CB=Ы
CC=Ь
CD=Э
CE=Ю
CF=Я
D0=а
D1=б
D2=в
D3=г
D4=д
D5=е
D6=ж
D7=з
D8=и
D9=й
DA=к
DB=л
DC=м
DD=н
DE=о
DF=п
E0=р
E1=с
E2=т
E3=у
E4=ф
E5=х
E6=ц
E7=ч
E8=ш
E9=щ
EA=ъ
EB=ы
EC=ь
ED=э
EE=ю
EF=я
F0=№
F1=ё
F2=ђ
F3=ѓ
F4=є
F5=ѕ
F6=і
F7=ї
F8=ј
F9=љ
FA=њ
FB=ћ
FC=ќ
FD=§
FE=ў
FF=џ

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=─
81=│
82=┌
83=┐
84=└
85=┘
86=├
87=┤
88=┬
89=┴
8A=┼
8B=▀
8C=▄
8D=█
8E=▌
8F=▐
90=░
91=▒
92=▓
93=⌠
94=■
95=∙
96=√
97=≈
98=≤
99=≥
9A= 
9B=⌡
9C=°
9D=²
9E=·
9F=÷
A0=═
A1=║
A2=╒
A3=ё
A4=╓
A5=╔
A6=╕
A7=╖
A8=╗
A9=╘
AA=╙
AB=╚
AC=╛
AD=╜
AE=╝
AF=╞
B0=╟
B1=╠
B2=╡
B3=Ё
B4=╢
B5=╣
B6=╤
B7=╥
B8=╦
B9=╧
BA=╨
BB=╩
BC=╪
BD=╫
BE=╬
BF=©
C0=ю
C1=а
C2=б
C3=ц
C4=д
C5=е
C6=ф
C7=г
C8=х
C9=и
CA=й
CB=к
CC=л
CD=м
CE=н
CF=о
D0=п
D1=я
D2=р
D3=с
D4=т
D5=у
D6=ж
D7=в
D8=ь
D9=ы
DA=з
DB=ш
DC=э
DD=щ
DE=ч
DF=ъ
E0=Ю
E1=А
E2=Б
E3=Ц
E4=Д
E5=Е
E6=Ф
E7=Г
E8=Х
E9=И
EA=Й
EB=К
EC=Л
ED=М
EE=Н
EF=О
F0=П
F1=Я
F2=Р
F3=С
F4=Т
F5=У
F6=Ж
F7=В
F8=Ь
F9=Ы
FA=З
FB=Ш
FC=Э
FD=Щ
FE=Ч
FF=Ъ

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=─
81=│
82=┌
83=┐
84=└
85=┘
86=├
87=┤
88=┬
89=┴
8A=┼
8B=▀
8C=▄
8D=█
8E=▌
8F=▐
90=░
91=▒
92=▓
93=⌠
94=■
95=∙
96=√
97=≈
98=≤
99=≥
9A= 
9B=⌡
9C=°
9D=²
9E=·
9F=÷
A0=═
A1=║
A2=╒
A3=ё
A4=є
A5=╔
A6=і
A7=ї
A8=╗
A9=╘
AA=╙
AB=╚
AC=╛
AD=ґ
AE=╝
AF=╞
B0=╟
B1=╠
B2=╡
B3=Ё
B4=Є
B5=╣
B6=І
B7=Ї
B8=╦
B9=╧
BA=╨
BB=╩
BC=╪
BD=Ґ
BE=╬
BF=©
C0=ю
C1=а
C2=б
C3=ц
C4=д
C5=е
C6=ф
C7=г
C8=х
C9=и
CA=й
CB=к
CC=л
CD=м
CE=н
CF=о
D0=п
D1=я
D2=р
D3=с
D4=т
D5=у
D6=ж
D7=в
D8=ь
D9=ы
DA=з
DB=ш
DC=э
DD=щ
DE=ч
DF=ъ
E0=Ю
E1=А
E2=Б
E3=Ц
E4=Д
E5=Е
E6=Ф
E7=Г
E8=Х
E9=И
EA=Й
EB=К
EC=Л
ED=М
EE=Н
EF=О
F0=П
F1=Я
F2=Р
F3=С
F4=Т
F5=У
F6=Ж
F7=В
F8=Ь
F9=Ы
FA=З
FB=Ш
FC=Э
FD=Щ
FE=Ч
FF=Ъ

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=Ђ
81=Ѓ
82=
83=ѓ
84=„
85=…
86=†
87=‡
88=€
89=‰
8A=Љ
8B=
8C=Њ
8D=Ќ
8E=Ћ
8F=Џ
90=ђ
91=
92=
93=“
94=”
95=•
96=
97=—
98
99=™
9A=љ
9B=
9C=њ
9D=ќ
9E=ћ
9F=џ
A0= 
A1=Ў
A2=ў
A3=Ј
A4=¤
A5=Ґ
A6=¦
A7=§
A8=Ё
A9=©
AA=Є
AB=«
AC=¬
AD=­
AE=®
AF=Ї
B0=°
B1=±
B2=І
B3=і
B4=ґ
B5=µ
B6=¶
B7=·
B8=ё
B9=№
BA=є
BB=»
BC=ј
BD=Ѕ
BE=ѕ
BF=ї
C0=А
C1=Б
C2=В
C3=Г
C4=Д
C5=Е
C6=Ж
C7=З
C8=И
C9=Й
CA=К
CB=Л
CC=М
CD=Н
CE=О
CF=П
D0=Р
D1=С
D2=Т
D3=У
D4=Ф
D5=Х
D6=Ц
D7=Ч
D8=Ш
D9=Щ
DA=Ъ
DB=Ы
DC=Ь
DD=Э
DE=Ю
DF=Я
E0=а
E1=б
E2=в
E3=г
E4=д
E5=е
E6=ж
E7=з
E8=и
E9=й
EA=к
EB=л
EC=м
ED=н
EE=о
EF=п
F0=р
F1=с
F2=т
F3=у
F4=ф
F5=х
F6=ц
F7=ч
F8=ш
F9=щ
FA=ъ
FB=ы
FC=ь
FD=э
FE=ю
FF=я

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1=Ą
A2=˘
A3=Ł
A4=¤
A5=Ľ
A6=Ś
A7=§
A8=¨
A9=Š
AA=Ş
AB=Ť
AC=Ź
AD=­
AE=Ž
AF=Ż
B0=°
B1=ą
B2=˛
B3=ł
B4=´
B5=ľ
B6=ś
B7=ˇ
B8=¸
B9=š
BA=ş
BB=ť
BC=ź
BD=˝
BE=ž
BF=ż
C0=Ŕ
C1=Á
C2=Â
C3=Ă
C4=Ä
C5=Ĺ
C6=Ć
C7=Ç
C8=Č
C9=É
CA=Ę
CB=Ë
CC=Ě
CD=Í
CE=Î
CF=Ď
D0=Đ
D1=Ń
D2=Ň
D3=Ó
D4=Ô
D5=Ő
D6=Ö
D7=×
D8=Ř
D9=Ů
DA=Ú
DB=Ű
DC=Ü
DD=Ý
DE=Ţ
DF=ß
E0=ŕ
E1=á
E2=â
E3=ă
E4=ä
E5=ĺ
E6=ć
E7=ç
E8=č
E9=é
EA=ę
EB=ë
EC=ě
ED=í
EE=î
EF=ď
F0=đ
F1=ń
F2=ň
F3=ó
F4=ô
F5=ő
F6=ö
F7=÷
F8=ř
F9=ů
FA=ú
FB=ű
FC=ü
FD=ý
FE=ţ
FF=˙

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83
84=„
85=…
86=†
87=‡
88
89=‰
8A=Š
8B=
8C=Ś
8D=Ť
8E=Ž
8F=Ź
90
91=
92=
93=“
94=”
95=•
96=
97=—
98
99=™
9A=š
9B=
9C=ś
9D=ť
9E=ž
9F=ź
A0= 
A1=ˇ
A2=˘
A3=Ł
A4=¤
A5=Ą
A6=¦
A7=§
A8=¨
A9=©
AA=Ş
AB=«
AC=¬
AD=­
AE=®
AF=Ż
B0=°
B1=±
B2=˛
B3=ł
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=ą
BA=ş
BB=»
BC=Ľ
BD=˝
BE=ľ
BF=ż
C0=Ŕ
C1=Á
C2=Â
C3=Ă
C4=Ä
C5=Ĺ
C6=Ć
C7=Ç
C8=Č
C9=É
CA=Ę
CB=Ë
CC=Ě
CD=Í
CE=Î
CF=Ď
D0=Đ
D1=Ń
D2=Ň
D3=Ó
D4=Ô
D5=Ő
D6=Ö
D7=×
D8=Ř
D9=Ů
DA=Ú
DB=Ű
DC=Ü
DD=Ý
DE=Ţ
DF=ß
E0=ŕ
E1=á
E2=â
E3=ă
E4=ä
E5=ĺ
E6=ć
E7=ç
E8=č
E9=é
EA=ę
EB=ë
EC=ě
ED=í
EE=î
EF=ď
F0=đ
F1=ń
F2=ň
F3=ó
F4=ô
F5=ő
F6=ö
F7=÷
F8=ř
F9=ů
FA=ú
FB=ű
FC=ü
FD=ý
FE=ţ
FF=˙

256
encodings/ebcdic.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=œ
05=TAB
06=†
07=DEL
08=—
09=
0A=Ž
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=
15=…
16=BS
17=‡
18=CAN
19=EM
1A=’
1B=
1C=FS
1D=GS
1E=RS
1F=US
20=€
21=
22=‚
23=ƒ
24=„
25=LF
26=ETB
27=ESC
28=ˆ
29=‰
2A=Š
2B=‹
2C=Œ
2D=ENQ
2E=ACK
2F=BEL
30=
31=‘
32=SYN
33=“
34=”
35=•
36=–
37=EOT
38=˜
39=™
3A=š
3B=›
3C=DC4
3D=NAK
3E=ž
3F=SUB
40=
41= 
42=â
43=ä
44=à
45=á
46=ã
47=å
48=ç
49=ñ
4A=¢
4B=.
4C=<
4D=(
4E=+
4F=|
50=&
51=é
52=ê
53=ë
54=è
55=í
56=î
57=ï
58=ì
59=ß
5A=!
5B=$
5C=*
5D=)
5E=;
5F=¬
60=-
61=/
62=Â
63=Ä
64=À
65=Á
66=Ã
67=Å
68=Ç
69=Ñ
6A=¦
6B=,
6C=%
6D=_
6E=>
6F=?
70=ø
71=É
72=Ê
73=Ë
74=È
75=Í
76=Î
77=Ï
78=Ì
79=`
7A=:
7B=#
7C=@
7D='
7E==
7F="
80=Ø
81=a
82=b
83=c
84=d
85=e
86=f
87=g
88=h
89=i
8A=«
8B=»
8C=ð
8D=ý
8E=þ
8F=±
90=°
91=j
92=k
93=l
94=m
95=n
96=o
97=p
98=q
99=r
9A=ª
9B=º
9C=æ
9D=¸
9E=Æ
9F=¤
A0=µ
A1=~
A2=s
A3=t
A4=u
A5=v
A6=w
A7=x
A8=y
A9=z
AA=¡
AB=¿
AC=Ð
AD=Ý
AE=Þ
AF=®
B0=^
B1=£
B2=¥
B3=·
B4=©
B5=§
B6=¶
B7=¼
B8=½
B9=¾
BA=[
BB=]
BC=¯
BD=¨
BE=´
BF=×
C0={
C1=A
C2=B
C3=C
C4=D
C5=E
C6=F
C7=G
C8=H
C9=I
CA=­
CB=ô
CC=ö
CD=ò
CE=ó
CF=õ
D0=}
D1=J
D2=K
D3=L
D4=M
D5=N
D6=O
D7=P
D8=Q
D9=R
DA=¹
DB=û
DC=ü
DD=ù
DE=ú
DF=ÿ
E0=\
E1=÷
E2=S
E3=T
E4=U
E5=V
E6=W
E7=X
E8=Y
E9=Z
EA=²
EB=Ô
EC=Ö
ED=Ò
EE=Ó
EF=Õ
F0=0
F1=1
F2=2
F3=3
F4=4
F5=5
F6=6
F7=7
F8=8
F9=9
FA=³
FB=Û
FC=Ü
FD=Ù
FE=Ú
FF=Ÿ

16674
encodings/euc_kr.tbl Normal file

File diff suppressed because it is too large Load Diff

256
encodings/greek_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1=
A2=
A3=£
A4
A5
A6=¦
A7=§
A8=¨
A9=©
AA
AB=«
AC=¬
AD=­
AE
AF=―
B0=°
B1=±
B2=²
B3=³
B4=΄
B5=΅
B6=Ά
B7=·
B8=Έ
B9=Ή
BA=Ί
BB=»
BC=Ό
BD=½
BE=Ύ
BF=Ώ
C0=ΐ
C1=Α
C2=Β
C3=Γ
C4=Δ
C5=Ε
C6=Ζ
C7=Η
C8=Θ
C9=Ι
CA=Κ
CB=Λ
CC=Μ
CD=Ν
CE=Ξ
CF=Ο
D0=Π
D1=Ρ
D2
D3=Σ
D4=Τ
D5=Υ
D6=Φ
D7=Χ
D8=Ψ
D9=Ω
DA=Ϊ
DB=Ϋ
DC=ά
DD=έ
DE=ή
DF=ί
E0=ΰ
E1=α
E2=β
E3=γ
E4=δ
E5=ε
E6=ζ
E7=η
E8=θ
E9=ι
EA=κ
EB=λ
EC=μ
ED=ν
EE=ξ
EF=ο
F0=π
F1=ρ
F2=ς
F3=σ
F4=τ
F5=υ
F6=φ
F7=χ
F8=ψ
F9=ω
FA=ϊ
FB=ϋ
FC=ό
FD=ύ
FE=ώ
FF

256
encodings/greek_windows.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83=ƒ
84=„
85=…
86=†
87=‡
88
89=‰
8A
8B=
8C
8D
8E
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98
99=™
9A
9B=
9C
9D
9E
9F
A0= 
A1=΅
A2=Ά
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA
AB=«
AC=¬
AD=­
AE=®
AF=―
B0=°
B1=±
B2=²
B3=³
B4=΄
B5=µ
B6=¶
B7=·
B8=Έ
B9=Ή
BA=Ί
BB=»
BC=Ό
BD=½
BE=Ύ
BF=Ώ
C0=ΐ
C1=Α
C2=Β
C3=Γ
C4=Δ
C5=Ε
C6=Ζ
C7=Η
C8=Θ
C9=Ι
CA=Κ
CB=Λ
CC=Μ
CD=Ν
CE=Ξ
CF=Ο
D0=Π
D1=Ρ
D2
D3=Σ
D4=Τ
D5=Υ
D6=Φ
D7=Χ
D8=Ψ
D9=Ω
DA=Ϊ
DB=Ϋ
DC=ά
DD=έ
DE=ή
DF=ί
E0=ΰ
E1=α
E2=β
E3=γ
E4=δ
E5=ε
E6=ζ
E7=η
E8=θ
E9=ι
EA=κ
EB=λ
EC=μ
ED=ν
EE=ξ
EF=ο
F0=π
F1=ρ
F2=ς
F3=σ
F4=τ
F5=υ
F6=φ
F7=χ
F8=ψ
F9=ω
FA=ϊ
FB=ϋ
FC=ό
FD=ύ
FE=ώ
FF

256
encodings/hebrew_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=×
AB=«
AC=¬
AD=­
AE=®
AF=‾
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=÷
BB=»
BC=¼
BD=½
BE=¾
BF
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF=‗
E0=א
E1=ב
E2=ג
E3=ד
E4=ה
E5=ו
E6=ז
E7=ח
E8=ט
E9=י
EA=ך
EB=כ
EC=ל
ED=ם
EE=מ
EF=ן
F0=נ
F1=ס
F2=ע
F3=ף
F4=פ
F5=ץ
F6=צ
F7=ק
F8=ר
F9=ש
FA=ת
FB
FC
FD
FE
FF

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A
8B=
8C
8D
8E
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98=˜
99=™
9A
9B=
9C
9D
9E
9F
A0= 
A1=¡
A2=¢
A3=£
A4=₪
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=×
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=÷
BB=»
BC=¼
BD=½
BE=¾
BF=¿
C0=ְ
C1=ֱ
C2=ֲ
C3=ֳ
C4=ִ
C5=ֵ
C6=ֶ
C7=ַ
C8=ָ
C9=ֹ
CA
CB=ֻ
CC=ּ
CD=ֽ
CE=־
CF=ֿ
D0=׀
D1=ׁ
D2=ׂ
D3=׃
D4=װ
D5=ױ
D6=ײ
D7=׳
D8=״
D9
DA
DB
DC
DD
DE
DF
E0=א
E1=ב
E2=ג
E3=ד
E4=ה
E5=ו
E6=ז
E7=ח
E8=ט
E9=י
EA=ך
EB=כ
EC=ל
ED=ם
EE=מ
EF=ן
F0=נ
F1=ס
F2=ע
F3=ף
F4=פ
F5=ץ
F6=צ
F7=ק
F8=ר
F9=ש
FA=ת
FB
FC
FD=
FE=
FF

256
encodings/macintosh.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=Ä
81=Å
82=Ç
83=É
84=Ñ
85=Ö
86=Ü
87=á
88=à
89=â
8A=ä
8B=ã
8C=å
8D=ç
8E=é
8F=è
90=ê
91=ë
92=í
93=ì
94=î
95=ï
96=ñ
97=ó
98=ò
99=ô
9A=ö
9B=õ
9C=ú
9D=ù
9E=û
9F=ü
A0=†
A1=°
A2=¢
A3=£
A4=§
A5=•
A6=¶
A7=ß
A8=®
A9=©
AA=™
AB=´
AC=¨
AD=≠
AE=Æ
AF=Ø
B0=∞
B1=±
B2=≤
B3=≥
B4=¥
B5=µ
B6=∂
B7=∑
B8=∏
B9=π
BA=∫
BB=ª
BC=º
BD=Ω
BE=æ
BF=ø
C0=¿
C1=¡
C2=¬
C3=√
C4=ƒ
C5=≈
C6=∆
C7=«
C8=»
C9=…
CA= 
CB=À
CC=Ã
CD=Õ
CE=Œ
CF=œ
D0=
D1=—
D2=“
D3=”
D4=
D5=
D6=÷
D7=◊
D8=ÿ
D9=Ÿ
DA=
DB=€
DC=
DD=
DE=fi
DF=fl
E0=‡
E1=·
E2=
E3=„
E4=‰
E5=Â
E6=Ê
E7=Á
E8=Ë
E9=È
EA=Í
EB=Î
EC=Ï
ED=Ì
EE=Ó
EF=Ô
F0=
F1=Ò
F2=Ú
F3=Û
F4=Ù
F5=ı
F6=ˆ
F7=˜
F8=¯
F9=˘
FA=˙
FB=˚
FC=¸
FD=˝
FE=˛
FF=ˇ

255
encodings/pokegen1_en.tbl Normal file
View File

@@ -0,0 +1,255 @@
00=NUL
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49=page
4A=PkMn
4B=_cont
4C=autocont
4D
4E=next line
4F=bottom line
50=end
51=paragraph
52=player name
53=rival name
54=Poké
55=cont
56=......
57=done
58=prompt
59=target
5A=user
5B=PC
5C=TM
5D=TRAINER
5E=ROCKET
5F=dex
60=A
61=B
62=C
63=D
64=E
65=F
66=G
67=H
68=I
69=V
6A=S
6B=L
6C=M
6D=:
6E=ぃ
6F=ぅ
70=
71=
72=“
73=”
74=・
75=⋯
76=ぁ
77=ぇ
78=ぉ
79
7A
7B
7C
7D
7E
7F
80=A
81=B
82=C
83=D
84=E
85=F
86=G
87=H
88=I
89=J
8A=K
8B=L
8C=M
8D=N
8E=O
8F=P
90=Q
91=R
92=S
93=T
94=U
95=V
96=W
97=X
98=Y
99=Z
9A=(
9B=)
9C=
9D=;
9E=[
9F=]
A0=a
A1=b
A2=c
A3=d
A4=e
A5=f
A6=g
A7=h
A8=i
A9=j
AA=k
AB=l
AC=m
AD=n
AE=o
AF=p
B0=q
B1=r
B2=s
B3=t
B4=u
B5=v
B6=w
B7=x
B8=y
B9=z
BA=é
BB='d
BC='l
BD='s
BE='t
BF='v
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0='
E1=Pk
E2=Mn
E3=-
E4='r
E5='m
E6=?
E7=!
E8=.
E9=ァ
EA=ゥ
EB=ェ
EC=▷
ED=▶
EE=▼
EF=♂
F0=$
F1=×
F2=.
F3=/
F4=,
F5=♀
F6=0
F7=1
F8=2
F9=3
FA=4
FB=5
FC=6
FD=7
FE=8
FF=9

View File

@@ -1,6 +1,10 @@
00=()
090D=(R)
0A=(BR)
00=
08=\b
09=\t
0A=\n
0B=\v
0C=\f
0D=\r
20=
21=!
22="

256
encodings/thai.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82
83
84
85=…
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98
99
9A
9B
9C
9D
9E
9F
A0
A1=ก
A2=ข
A3=ฃ
A4=ค
A5=ฅ
A6=ฆ
A7=ง
A8=จ
A9=ฉ
AA=ช
AB=ซ
AC=ฌ
AD=ญ
AE=ฎ
AF=ฏ
B0=ฐ
B1=ฑ
B2=ฒ
B3=ณ
B4=ด
B5=ต
B6=ถ
B7=ท
B8=ธ
B9=น
BA=บ
BB=ป
BC=ผ
BD=ฝ
BE=พ
BF=ฟ
C0=ภ
C1=ม
C2=ย
C3=ร
C4=ฤ
C5=ล
C6=ฦ
C7=ว
C8=ศ
C9=ษ
CA=ส
CB=ห
CC=ฬ
CD=อ
CE=ฮ
CF=ฯ
D0=ะ
D1=ั
D2=า
D3=ำ
D4=ิ
D5=ี
D6=ึ
D7=ื
D8=ุ
D9=ู
DA=ฺ
DB
DC
DD
DE
DF=฿
E0=เ
E1=แ
E2=โ
E3=ใ
E4=ไ
E5=ๅ
E6=ๆ
E7=็
E8=่
E9=้
EA=๊
EB=๋
EC=์
ED=ํ
EE=๎
EF=๏
F0=
F1=๑
F2=๒
F3=๓
F4=๔
F5=๕
F6=๖
F7=๗
F8=๘
F9=๙
FA=๚
FB=๛
FC
FD
FE
FF

256
encodings/turkish_iso.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81=
82=‚
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=‹
8C=Œ
8D=
8E=Ž
8F=
90=
91=‘
92=’
93=“
94=”
95=•
96=–
97=—
98=˜
99=™
9A=š
9B=›
9C=œ
9D=
9E=ž
9F=Ÿ
A0= 
A1=¡
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=ª
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=º
BB=»
BC=¼
BD=½
BE=¾
BF=¿
C0=À
C1=Á
C2=Â
C3=Ã
C4=Ä
C5=Å
C6=Æ
C7=Ç
C8=È
C9=É
CA=Ê
CB=Ë
CC=Ì
CD=Í
CE=Î
CF=Ï
D0=Ğ
D1=Ñ
D2=Ò
D3=Ó
D4=Ô
D5=Õ
D6=Ö
D7=×
D8=Ø
D9=Ù
DA=Ú
DB=Û
DC=Ü
DD=İ
DE=Ş
DF=ß
E0=à
E1=á
E2=â
E3=ã
E4=ä
E5=å
E6=æ
E7=ç
E8=è
E9=é
EA=ê
EB=ë
EC=ì
ED=í
EE=î
EF=ï
F0=ğ
F1=ñ
F2=ò
F3=ó
F4=ô
F5=õ
F6=ö
F7=÷
F8=ø
F9=ù
FA=ú
FB=û
FC=ü
FD=ı
FE=ş
FF=ÿ

View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A=Š
8B=
8C=Œ
8D
8E
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98=˜
99=™
9A=š
9B=
9C=œ
9D
9E
9F=Ÿ
A0= 
A1=¡
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=ª
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=º
BB=»
BC=¼
BD=½
BE=¾
BF=¿
C0=À
C1=Á
C2=Â
C3=Ã
C4=Ä
C5=Å
C6=Æ
C7=Ç
C8=È
C9=É
CA=Ê
CB=Ë
CC=Ì
CD=Í
CE=Î
CF=Ï
D0=Ğ
D1=Ñ
D2=Ò
D3=Ó
D4=Ô
D5=Õ
D6=Ö
D7=×
D8=Ø
D9=Ù
DA=Ú
DB=Û
DC=Ü
DD=İ
DE=Ş
DF=ß
E0=à
E1=á
E2=â
E3=ã
E4=ä
E5=å
E6=æ
E7=ç
E8=è
E9=é
EA=ê
EB=ë
EC=ì
ED=í
EE=î
EF=ï
F0=ğ
F1=ñ
F2=ò
F3=ó
F4=ô
F5=õ
F6=ö
F7=÷
F8=ø
F9=ù
FA=ú
FB=û
FC=ü
FD=ı
FE=ş
FF=ÿ

1114111
encodings/utf8.tbl Normal file

File diff suppressed because it is too large Load Diff

256
encodings/vietnamese.tbl Normal file
View File

@@ -0,0 +1,256 @@
00=NUL
01=SOH
02=STX
03=ETX
04=EOT
05=ENQ
06=ACK
07=BEL
08=BS
09=TAB
0A=LF
0B=VT
0C=FF
0D=CR
0E=SO
0F=SI
10=DLE
11=DC1
12=DC2
13=DC3
14=DC4
15=NAK
16=SYN
17=ETB
18=CAN
19=EM
1A=SUB
1B=ESC
1C=FS
1D=GS
1E=RS
1F=US
20=
21=!
22="
23=#
24=$
25=%
26=&
27='
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3B=;
3C=<
3D==
3E=>
3F=?
40=@
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B=[
5C=\
5D=]
5E=^
5F=_
60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z
7B={
7C=|
7D=}
7E=~
7F=DEL
80=€
81
82=
83=ƒ
84=„
85=…
86=†
87=‡
88=ˆ
89=‰
8A
8B=
8C=Œ
8D
8E
8F
90
91=
92=
93=“
94=”
95=•
96=
97=—
98=˜
99=™
9A
9B=
9C=œ
9D
9E
9F=Ÿ
A0= 
A1=¡
A2=¢
A3=£
A4=¤
A5=¥
A6=¦
A7=§
A8=¨
A9=©
AA=ª
AB=«
AC=¬
AD=­
AE=®
AF=¯
B0=°
B1=±
B2=²
B3=³
B4=´
B5=µ
B6=¶
B7=·
B8=¸
B9=¹
BA=º
BB=»
BC=¼
BD=½
BE=¾
BF=¿
C0=À
C1=Á
C2=Â
C3=Ă
C4=Ä
C5=Å
C6=Æ
C7=Ç
C8=È
C9=É
CA=Ê
CB=Ë
CC=̀
CD=Í
CE=Î
CF=Ï
D0=Đ
D1=Ñ
D2=̉
D3=Ó
D4=Ô
D5=Ơ
D6=Ö
D7=×
D8=Ø
D9=Ù
DA=Ú
DB=Û
DC=Ü
DD=Ư
DE=̃
DF=ß
E0=à
E1=á
E2=â
E3=ă
E4=ä
E5=å
E6=æ
E7=ç
E8=è
E9=é
EA=ê
EB=ë
EC=́
ED=í
EE=î
EF=ï
F0=đ
F1=ñ
F2=̣
F3=ó
F4=ô
F5=ơ
F6=ö
F7=÷
F8=ø
F9=ù
FA=ú
FB=û
FC=ü
FD=ư
FE=₫
FF=ÿ

61
includes/std/core.pat Normal file
View File

@@ -0,0 +1,61 @@
#pragma once
namespace std::core {
enum Endian : u8 {
Native = 0,
Big = 1,
Little = 2
};
enum BitfieldOrder : u8 {
LeftToRight = 0,
RightToLeft = 1
};
fn has_attribute(auto pattern, str attribute) {
return builtin::std::core::has_attribute(pattern, attribute);
};
fn get_attribute_value(auto pattern, str attribute) {
return builtin::std::core::get_attribute_value(pattern, attribute);
};
fn set_endian(Endian endian) {
builtin::std::core::set_endian(endian);
};
fn get_endian() {
return builtin::std::core::get_endian();
};
fn set_bitfield_order(BitfieldOrder order) {
builtin::std::core::set_bitfield_order(order);
};
fn get_bitfield_order() {
return builtin::std::core::get_bitfield_order();
};
fn array_index() {
return builtin::std::core::array_index();
};
fn member_count(auto pattern) {
return builtin::std::core::member_count(pattern);
};
fn has_member(auto pattern, str name) {
return builtin::std::core::has_member(pattern, name);
};
fn formatted_value(auto pattern) {
return builtin::std::core::formatted_value(pattern);
};
}

View File

@@ -39,15 +39,12 @@ namespace std::string {
};
fn contains(str a, str b) {
s32 a_len, b_len;
a_len = std::string::length(a);
b_len = std::string::length(b);
s32 a_len = std::string::length(a);
s32 b_len = std::string::length(b);
s32 i;
while (i < a_len - b_len) {
for (s32 i = 0, i <= (a_len - b_len), i += 1) {
if (std::string::substr(a, i, b_len) == b)
return true;
i = i + 1;
}
return false;

71
includes/std/time.pat Normal file
View File

@@ -0,0 +1,71 @@
#pragma once
#include <std/io.pat>
namespace std::time {
struct Time {
u8 sec;
u8 min;
u8 hour;
u8 mday;
u8 mon;
u16 year;
u8 wday;
u16 yday;
bool isdst;
} [[sealed]];
union TimeConverter {
Time time;
u128 value;
};
using EpochTime = u128;
enum TimeZone : u8 {
Local,
UTC
};
fn epoch() {
return builtin::std::time::epoch();
};
fn to_local(EpochTime epoch_time) {
TimeConverter converter;
converter.value = builtin::std::time::to_local(epoch_time);
return converter.time;
};
fn to_utc(EpochTime epoch_time) {
TimeConverter converter;
converter.value = builtin::std::time::to_utc(epoch_time);
return converter.time;
};
fn now(TimeZone time_zone = TimeZone::Local) {
TimeConverter converter;
if (time_zone == TimeZone::Local)
converter.value = builtin::std::time::to_local(std::time::epoch());
else if (time_zone == TimeZone::UTC)
converter.value = builtin::std::time::to_utc(std::time::epoch());
else
converter.value = 0x00;
return converter.time;
};
fn format(Time time, str format_string = "%c") {
TimeConverter converter;
converter.time = time;
return builtin::std::time::format(format_string, converter.value);
};
}

View File

@@ -1,100 +0,0 @@
#include <std/io.pat>
#include <std/math.pat>
namespace std::type {
struct GUID {
u32 time_low;
u16 time_mid;
u16 time_high_and_version;
u8 clock_seq_and_reserved;
u8 clock_seq_low;
u8 node[6];
} [[format("std::type::guid_formatter"), single_color]];
fn guid_formatter(GUID guid) {
bool valid = ((le u16(guid.time_high_and_version) >> 12) <= 5) && (((guid.clock_seq_and_reserved >> 4) >= 8) || ((guid.clock_seq_and_reserved >> 4) == 0));
return std::format("{}{{{:08X}-{:04X}-{:04X}-{:02X}{:02X}-{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}}}",
valid ? "" : "Invalid ",
le u32(guid.time_low),
le u16(guid.time_mid),
le u16(guid.time_high_and_version),
guid.clock_seq_and_reserved,
guid.clock_seq_low,
guid.node[0],
guid.node[1],
guid.node[2],
guid.node[3],
guid.node[4],
guid.node[5]);
};
using float16 = u16 [[format("std::type::float16_formatter")]];
fn float16_formatter(float16 value) {
float sign = (value >> 15) == 0b01 ? -1.0 : 1.0;
float exponent = std::math::pow(2.0, float((value >> 10) & 0x1F) - 14);
u16 mantissa = value & 0x3FF;
float fraction = 0;
for (s8 i = 9, i >= 0, i -= 1) {
if ((mantissa & (1 << i)) != 0) {
fraction += 1.0 / std::math::pow(2.0, (10.0 - i));
}
}
return std::format("{:f}", sign * exponent * fraction);
};
bitfield Bits {
bit0 : 1;
bit1 : 1;
bit2 : 1;
bit3 : 1;
bit4 : 1;
bit5 : 1;
bit6 : 1;
bit7 : 1;
} [[format("std::type::bits_formatter"), right_to_left]];
bitfield Nibbles {
low : 4;
high : 4;
} [[format("std::type::nibble_formatter")]];
union Byte {
u8 value;
Bits bits;
Nibbles nibbles;
} [[format("std::type::byte_formatter"), single_color]];
fn byte_formatter(Byte byte) {
return std::format("0x{0:02X} (0b{1:08b}) LSB:{2}, MSB:{3}",
byte.value,
byte.value,
byte.bits.bit0,
byte.bits.bit7);
};
fn bits_formatter(Bits bits) {
return std::format("0b{}{}{}{}{}{}{}{}",
bits.bit7,
bits.bit6,
bits.bit5,
bits.bit4,
bits.bit6,
bits.bit2,
bits.bit1,
bits.bit0);
};
fn nibble_formatter(Nibbles nibbles) {
return std::format("{{ {0:0X}, {1:0X} }}", nibbles.high, nibbles.low);
};
}

58
includes/type/byte.pat Normal file
View File

@@ -0,0 +1,58 @@
#pragma once
#include <std/io.pat>
namespace type {
bitfield Bits {
bit0 : 1;
bit1 : 1;
bit2 : 1;
bit3 : 1;
bit4 : 1;
bit5 : 1;
bit6 : 1;
bit7 : 1;
} [[format("type::impl::format_bits"), right_to_left]];
bitfield Nibbles {
low : 4;
high : 4;
} [[format("type::impl::format_nibbles")]];
union Byte {
u8 value;
Bits bits;
Nibbles nibbles;
} [[format("type::impl::format_byte"), single_color]];
namespace impl {
fn format_byte(Byte byte) {
return std::format("0x{0:02X} (0b{1:08b}) LSB:{2}, MSB:{3}",
byte.value,
byte.value,
byte.bits.bit0,
byte.bits.bit7);
};
fn format_bits(Bits bits) {
return std::format("0b{}{}{}{}{}{}{}{}",
bits.bit7,
bits.bit6,
bits.bit5,
bits.bit4,
bits.bit6,
bits.bit2,
bits.bit1,
bits.bit0);
};
fn format_nibbles(Nibbles nibbles) {
return std::format("{{ {0:0X}, {1:0X} }}", nibbles.high, nibbles.low);
};
}
}

29
includes/type/float16.pat Normal file
View File

@@ -0,0 +1,29 @@
#pragma once
#include <std/io.pat>
#include <std/math.pat>
namespace type {
using float16 = u16 [[format("type::impl::format_float16")]];
namespace impl {
fn format_float16(float16 value) {
float sign = (value >> 15) == 0b01 ? -1.0 : 1.0;
float exponent = std::math::pow(2.0, float((value >> 10) & 0x1F) - 14);
u16 mantissa = value & 0x3FF;
float fraction = 0;
for (s8 i = 9, i >= 0, i -= 1) {
if ((mantissa & (1 << i)) != 0) {
fraction += 1.0 / std::math::pow(2.0, (10.0 - i));
}
}
return std::format("{:f}", sign * exponent * fraction);
};
}
}

38
includes/type/guid.pat Normal file
View File

@@ -0,0 +1,38 @@
#pragma once
#include <std/io.pat>
namespace type {
struct GUID {
u32 time_low;
u16 time_mid;
u16 time_high_and_version;
u8 clock_seq_and_reserved;
u8 clock_seq_low;
u8 node[6];
} [[sealed, format("type::impl::format_guid")]];
namespace impl {
fn format_guid(GUID guid) {
bool valid = ((le u16(guid.time_high_and_version) >> 12) <= 5) && (((guid.clock_seq_and_reserved >> 4) >= 8) || ((guid.clock_seq_and_reserved >> 4) == 0));
return std::format("{}{{{:08X}-{:04X}-{:04X}-{:02X}{:02X}-{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}}}",
valid ? "" : "Invalid ",
le u32(guid.time_low),
le u16(guid.time_mid),
le u16(guid.time_high_and_version),
guid.clock_seq_and_reserved,
guid.clock_seq_low,
guid.node[0],
guid.node[1],
guid.node[2],
guid.node[3],
guid.node[4],
guid.node[5]);
};
}
}

39
includes/type/ip.pat Normal file
View File

@@ -0,0 +1,39 @@
#pragma once
#include <std/io.pat>
namespace type {
struct IPv4Address {
u8 bytes[4];
} [[sealed, format("type::impl::format_ipv4_address")]];
struct IPv6Address {
u16 words[8];
} [[sealed, format("type::impl::format_ipv6_address")]];
namespace impl {
fn format_ipv4_address(IPv4Address address) {
return std::format("{}.{}.{}.{}",
address.bytes[0],
address.bytes[1],
address.bytes[2],
address.bytes[3]);
};
fn format_ipv6_address(IPv6Address address) {
return std::format("{:04X}:{:04X}:{:04X}:{:04X}:{:04X}:{:04X}:{:04X}:{:04X}",
address.words[0],
address.words[1],
address.words[2],
address.words[3],
address.words[4],
address.words[5],
address.words[6],
address.words[7]);
};
}
}

33
includes/type/leb128.pat Normal file
View File

@@ -0,0 +1,33 @@
#pragma once
#include <std/io.pat>
#include <std/mem.pat>
namespace type {
struct LEB128 {
u8 array[while($ == addressof(this) || std::mem::read_unsigned($-1, 1) & 0x80 != 0)] [[hidden]];
} [[sealed, format("type::impl::format_leb128"), transform("type::impl::transform_leb128")]];
namespace impl {
fn transform_leb128_array(auto array) {
u128 res = array[0] & 0x7f;
for(u8 i = 1, array[i-1] & 0x80 != 0, i+=1) {
res |= u64(array[i] & 0x7f) << 7 * i;
}
return res;
};
fn format_leb128(auto leb128) {
u128 res = type::impl::transform_leb128_array(leb128.array);
return std::format("{} ({:#x})", res, res);
};
fn transform_leb128(auto leb128) {
return type::impl::transform_leb128_array(leb128.array);
};
}
}

25
includes/type/mac.pat Normal file
View File

@@ -0,0 +1,25 @@
#pragma once
#include <std/io.pat>
namespace type {
struct MACAddress {
u8 bytes[6];
} [[sealed, format("type::impl::format_mac_address")]];
namespace impl {
fn format_mac_address(MACAddress address) {
return std::format("{:02X}:{:02X}:{:02X}:{:02X}:{:02X}:{:02X}",
address.bytes[0],
address.bytes[1],
address.bytes[2],
address.bytes[3],
address.bytes[4],
address.bytes[5]);
};
}
}

32
includes/type/path.pat Normal file
View File

@@ -0,0 +1,32 @@
#include <std/mem.pat>
namespace type {
struct UnixPathSegment {
char string[while(std::mem::read_unsigned($, 1) != '/' && std::mem::read_unsigned($, 1) != 0x00)];
char separator [[hidden]];
if (separator == 0x00) {
$ -= 1;
break;
}
} [[sealed, format("type::impl::format_unix_path_segment")]];
struct UnixPath {
UnixPathSegment segments[while(true)];
} [[format("type::impl::format_unix_path")]];
namespace impl {
fn format_unix_path_segment(UnixPathSegment segment) {
return segment.string;
};
fn format_unix_path(UnixPath path) {
return std::mem::read_string($, sizeof(path));
};
}
}

45
includes/type/size.pat Normal file
View File

@@ -0,0 +1,45 @@
namespace type {
using Size8 = u8 [[format("type::impl::size_formatter")]];
using Size16 = u16 [[format("type::impl::size_formatter")]];
using Size32 = u32 [[format("type::impl::size_formatter")]];
using Size64 = u64 [[format("type::impl::size_formatter")]];
using Size128 = u128 [[format("type::impl::size_formatter")]];
namespace impl {
fn size_formatter(u128 size) {
double sizeFloat = size;
u32 i = 0;
while (sizeFloat >= 1024 && i <= 6) {
i += 1;
sizeFloat /= 1024;
}
if (i == 0) {
if (size == 1)
return std::format("{} Byte", size);
else
return std::format("{} Bytes", size);
} else {
str result = std::format("{:.3f} ", sizeFloat);
if (i == 1)
return result + "kiB";
else if (i == 2)
return result + "MiB";
else if (i == 3)
return result + "GiB";
else if (i == 4)
return result + "TiB";
else if (i == 5)
return result + "PiB";
else
return result + "EiB";
}
};
}
}

18
includes/type/time.pat Normal file
View File

@@ -0,0 +1,18 @@
#pragma once
#include <std/io.pat>
#include <std/time.pat>
namespace type {
using time_t = u16 [[format("type::impl::format_time_t")]];
namespace impl {
fn format_time_t(time_t value) {
return std::time::format(std::time::to_utc(value));
};
}
}

View File

@@ -17,9 +17,9 @@ struct ARFile {
u8 data[std::string::parse_int(this.file_size, 10)];
padding[sizeof(data) & 1];
}
} [[static]];
};
char signature[8] @ 0x00;
std::assert(signature == "!<arch>\n", "File is not a valid archive!");
ARFile files[while($ < std::mem::size())] @ $;
ARFile files[while($ < std::mem::size())] @ $;

73
patterns/bencode.hexpat Normal file
View File

@@ -0,0 +1,73 @@
#pragma MIME application/x-bittorrent
#include <std/ctype.pat>
#include <std/mem.pat>
#include <std/string.pat>
namespace bencode {
struct ASCIIDecimal {
char value[while(std::ctype::isdigit(std::mem::read_unsigned($, 1)))];
} [[sealed, format("bencode::format_ascii_decimal"), transform("bencode::format_ascii_decimal")]];
fn format_ascii_decimal(ASCIIDecimal adsasd) {
return std::string::parse_int(adsasd.value, 10);
};
enum Type : u8 {
Integer = 'i',
Dictionary = 'd',
List = 'l',
String0 = '0',
String1 = '1',
String2 = '2',
String3 = '3',
String4 = '4',
String5 = '5',
String6 = '6',
String7 = '7',
String8 = '8',
String9 = '9'
};
struct String {
ASCIIDecimal length;
char separator [[hidden]];
char value[length];
} [[sealed, format("bencode::format_string"), transform("bencode::format_string")]];
fn format_string(String string) {
return string.value;
};
using Bencode;
using Value;
struct DictionaryEntry {
String key;
Value value;
};
struct Value {
Type type;
if (type == Type::Dictionary) {
DictionaryEntry entry[while(std::mem::read_unsigned($, 1) != 'e')];
} else if (type == Type::Integer) {
ASCIIDecimal value;
char end;
} else {
$ -= 1;
String value;
}
};
struct Bencode {
Value value[while(!std::mem::eof())] [[inline]];
char end;
};
}
bencode::Bencode bencode @ 0x00;

View File

@@ -158,7 +158,11 @@ namespace program {
LOOS = 0x60000000,
HIOS = 0x6FFFFFFF,
LOPROC = 0x70000000,
HIPROC = 0x7FFFFFFF
HIPROC = 0x7FFFFFFF,
GNU_EH_FRAME = program::Type::LOOS + 0x474E550,
GNU_STACK = program::Type::LOOS + 0x474E551,
GNU_RELRO = program::Type::LOOS + 0x474E552,
GNU_PROPERTY = program::Type::LOOS + 0x474E553
};
struct Header {
@@ -181,7 +185,7 @@ namespace program {
u64 memory_size;
u64 alignment;
}
} [[static]];
};
}
@@ -251,7 +255,7 @@ namespace section {
u64 address_alignment;
u64 entry_size;
}
} [[static]];
};
}

168
patterns/fs.hexpat Normal file
View File

@@ -0,0 +1,168 @@
#include <std/io.pat>
struct DiskTimeStamp {
u8 seconds, minutes, hours;
};
enum DiskProtection : u16 {
None = 0x0000,
CopyProtected = 0x5A5A
};
bitfield CHS {
h : 8;
s : 6;
c : 10;
} [[right_to_left, format("chs_formatter")]];
fn chs_formatter(CHS chs) {
return std::format("({:X}, {:X}, {:X}) | 0x{:X}", chs.c, chs.h, chs.s, (chs.c * 16 + chs.h) * 63 + (chs.s - 1));
};
enum PartitionStatus : u8 {
None = 0x00,
Active = 0x80
};
enum PartitionType : u8 {
EmptyPartitionEntry = 0x00,
FAT32_CHS = 0x0B,
FAT32_LBA = 0x0C
};
namespace fat32 {
u64 bytesPerCluster;
struct FSInfo {
u32 leadSignature;
padding[480];
u32 structSignature;
u32 freeClusterCount;
u32 nextFreeCluster;
padding[12];
u32 trailSignature;
};
bitfield SequenceNumber {
padding : 1;
lastLogical : 1;
padding : 1;
number : 5;
} [[left_to_right]];
enum EntryStatus : u8 {
Regular = 0x00,
DotEntry = 0x2E,
DeletedEntry = 0xE5
};
union EntryStatusOrSequenceNumber {
EntryStatus entryStatus;
SequenceNumber sequenceNumber;
};
bitfield Attributes {
readOnly : 1;
hidden : 1;
systemFile : 1;
volumeLabel : 1;
subdirectory : 1;
archive : 1;
padding : 2;
} [[right_to_left]];
struct DirEntry {
char fileName[8];
char extension[3];
Attributes attributes;
u8 reserved[10];
u16 time, date;
u16 startingCluster;
u32 fileSize;
u8 data[fileSize] @ startingCluster * bytesPerCluster;
};
struct VFATDirEntry {
EntryStatusOrSequenceNumber entryStatusOrSequenceNumber;
char16 name1[5];
Attributes attributes;
u8 type;
u8 nameChecksum;
char16 name2[6];
u16 startingCluster;
char16 name3[2];
if (entryStatusOrSequenceNumber.sequenceNumber.number > 1)
VFATDirEntry nextLogicalEntry;
else
DirEntry physicalEntry;
};
struct Partition {
u8 jmpCode[3];
char oemName[8];
u16 bytesPerSector;
u8 sectorsPerCluster;
u16 reservedAreaSize;
u8 numFats;
u16 rootEntryCount;
u16 numSectors;
u8 mediaType;
u16 fatSize;
u16 sectorsPerTrack;
u16 numHeads;
u32 numHiddenSectors;
u32 numFsSectors;
u32 numFatSectors;
u16 extFlags;
u16 fsVersion;
u32 rootCluster;
u16 fsInfoSector;
u16 backupBootSector;
padding[12];
u8 driveNumber;
padding[1];
u8 bootSignature;
u32 volumeID;
char volumeLabel[11];
char fsType[8];
u8 bootstrapCode[420];
u16 signature;
bytesPerCluster = (sectorsPerCluster * 1024) * bytesPerSector;
FSInfo fsInfo @ addressof(this) + fsInfoSector * bytesPerSector;
VFATDirEntry rootDirEntry @ addressof(this) + rootCluster * bytesPerCluster;
};
}
struct PartitionEntry {
PartitionStatus status;
CHS chsFirstSectorAddress;
PartitionType type;
CHS chsLastSectorAddress;
u32 lbaFirstSectorAddress;
u32 numSectors;
if (type == PartitionType::EmptyPartitionEntry)
continue;
else if (type == PartitionType::FAT32_CHS || type == PartitionType::FAT32_LBA)
fat32::Partition partition @ lbaFirstSectorAddress * 512;
};
struct MasterBootRecord {
u8 bootstrapCodeArea1[218];
padding[2];
u8 originalPhysicalDrive;
DiskTimeStamp diskTimeStamp;
u8 bootstrapCodeArea2[216];
u32 diskSignature;
DiskProtection diskProtection;
PartitionEntry partitionEntries[4];
u16 bootSignature;
};
MasterBootRecord mbr @ 0x00;

459
patterns/lnk.hexpat Normal file
View File

@@ -0,0 +1,459 @@
#pragma MIME application/x-ms-shortcut
#include <type/guid.pat>
#include <type/size.pat>
bitfield LinkFlags {
HasLinkTargetIDList : 1;
HasLinkInfo : 1;
HasName : 1;
HasRelativePath : 1;
HasWorkingDir : 1;
HasArguments : 1;
HasIconLocation : 1;
IsUnicode : 1;
ForceNoLinkInfo : 1;
HasExpString : 1;
RunInSeparateProcess : 1;
padding : 1;
HasDarwinID : 1;
RunAsUser : 1;
HasExpIcon : 1;
NoPidlAlias : 1;
padding : 1;
RunWithShimLayer : 1;
ForceNoLinkTrack : 1;
EnableTargetMetadata : 1;
DisableLinkPathTracking : 1;
DisableKnownFolderTracking : 1;
DisableKnownFolderAlias : 1;
AllowLinkToLink : 1;
UnaliasOnSave : 1;
PreferEnvironmentPath : 1;
KeepLocalIDListForUNCTarget : 1;
padding : 5;
} [[right_to_left]];
bitfield FileAttributesFlags {
FILE_ATTRIBUTE_READONLY : 1;
FILE_ATTRIBUTE_HIDDEN : 1;
FILE_ATTRIBUTE_SYSTEM : 1;
padding : 1;
FILE_ATTRIBUTE_DIRECTORY : 1;
FILE_ATTRIBUTE_ARCHIVE : 1;
padding : 1;
FILE_ATTRIBUTE_NORMAL : 1;
FILE_ATTRIBUTE_TEMPORARY : 1;
FILE_ATTRIBUTE_SPARSE_FILE : 1;
FILE_ATTRIBUTE_REPARSE_POINT : 1;
FILE_ATTRIBUTE_COMPRESSED : 1;
FILE_ATTRIBUTE_OFFLINE : 1;
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED : 1;
FILE_ATTRIBUTE_ENCRYPTED : 1;
padding : 17;
} [[right_to_left]];
bitfield ModifierKeys {
HOTKEYF_SHIFT : 1;
HOTKEYF_CONTROL : 1;
HOTKEYF_ALT : 1;
padding : 5;
} [[right_to_left]];
enum Keys : u8 {
KEY_NONE = 0x00,
KEY_0 = 0x30,
KEY_1 = 0x31,
KEY_2 = 0x32,
KEY_3 = 0x33,
KEY_4 = 0x34,
KEY_5 = 0x35,
KEY_6 = 0x36,
KEY_7 = 0x37,
KEY_8 = 0x38,
KEY_9 = 0x39,
KEY_A = 0x41,
KEY_B = 0x42,
KEY_C = 0x43,
KEY_D = 0x44,
KEY_E = 0x45,
KEY_F = 0x46,
KEY_G = 0x47,
KEY_H = 0x48,
KEY_I = 0x49,
KEY_J = 0x4A,
KEY_K = 0x4B,
KEY_L = 0x4C,
KEY_M = 0x4D,
KEY_N = 0x4E,
KEY_O = 0x4F,
KEY_P = 0x50,
KEY_Q = 0x51,
KEY_R = 0x52,
KEY_S = 0x53,
KEY_T = 0x54,
KEY_U = 0x55,
KEY_V = 0x56,
KEY_W = 0x57,
KEY_X = 0x58,
KEY_Y = 0x59,
KEY_Z = 0x5A,
VK_F1 = 0x70,
VK_F2 = 0x71,
VK_F3 = 0x72,
VK_F4 = 0x73,
VK_F5 = 0x74,
VK_F6 = 0x75,
VK_F7 = 0x76,
VK_F8 = 0x77,
VK_F9 = 0x78,
VK_F10 = 0x79,
VK_F11 = 0x7A,
VK_F12 = 0x7B,
VK_F13 = 0x7C,
VK_F14 = 0x7D,
VK_F15 = 0x7E,
VK_F16 = 0x7F,
VK_F17 = 0x80,
VK_F18 = 0x81,
VK_F19 = 0x82,
VK_F20 = 0x83,
VK_F21 = 0x84,
VK_F22 = 0x85,
VK_F23 = 0x86,
VK_F24 = 0x87,
VK_NUMLOCK = 0x90,
VK_SCROLL = 0x91,
};
struct HotKeyFlags {
Keys Key;
ModifierKeys ModifierKeys;
};
struct FILETIME {
u32 dwLowDateTime;
u32 dwHighDateTime;
};
enum SHOWWINDOW_FLAGS : u32 {
SW_SHOWNORMAL = 0x00000001,
SW_SHOWMAXIMIZED = 0x00000003,
SW_SHOWMINNOACTIVE = 0x00000007
};
struct ShellLinkHeader {
type::Size32 HeaderSize;
type::GUID LinkCLSID;
LinkFlags LinkFlags;
FileAttributesFlags FileAttributes;
FILETIME CreationTime, AccessTime, WriteTime;
type::Size32 FileSize;
u32 IconIndex;
SHOWWINDOW_FLAGS ShowCommand;
HotKeyFlags HotKey;
padding[2];
padding[4];
padding[4];
};
struct ItemID {
type::Size16 ItemIDSize;
if (ItemIDSize == 0x00)
break;
else
u8 Data[ItemIDSize - sizeof(ItemIDSize)];
};
struct IDList {
ItemID ItemIDList[while(true)];
};
struct LinkTargetIDList {
type::Size16 IDListSize;
IDList IDList[while($ < (addressof(IDListSize) + IDListSize))];
};
bitfield LinkInfoFlags {
VolumeIDAndLocalBasePath : 1;
CommonNetworkRelativeLinkAndPathSuffix : 1;
padding : 30;
};
enum DriveType : u32 {
DRIVE_UNKNOWN = 0x00000000,
DRIVE_NO_ROOT_DIR = 0x00000001,
DRIVE_REMOVABLE = 0x00000002,
DRIVE_FIXED = 0x00000003,
DRIVE_REMOTE = 0x00000004,
DRIVE_CDROM = 0x00000005,
DRIVE_RAMDISK = 0x00000006
};
struct VolumeID {
type::Size32 VolumeIDSize;
DriveType DriveType;
u32 DriveSerialNumber;
u32 VolumeLabelOffset;
if (VolumeLabelOffset == 0x14)
u32 VolumeLabelOffsetUnicode;
char Data[VolumeIDSize - ($ - addressof(this))];
};
bitfield CommonNetworkRelativeLinkFlags {
ValidDevice : 1;
ValidNetType : 1;
padding : 30;
} [[right_to_left]];
enum NetworkProviderType : u32 {
WNNC_NET_AVID = 0x001A0000,
WNNC_NET_DOCUSPACE = 0x001B0000,
WNNC_NET_MANGOSOFT = 0x001C0000,
WNNC_NET_SERNET = 0x001D0000,
WNNC_NET_RIVERFRONT1 = 0x001E0000,
WNNC_NET_RIVERFRONT2 = 0x001F0000,
WNNC_NET_DECORB = 0x00200000,
WNNC_NET_PROTSTOR = 0x00210000,
WNNC_NET_FJ_REDIR = 0x00220000,
WNNC_NET_DISTINCT = 0x00230000,
WNNC_NET_TWINS = 0x00240000,
WNNC_NET_RDR2SAMPLE = 0x00250000,
WNNC_NET_CSC = 0x00260000,
WNNC_NET_3IN1 = 0x00270000,
WNNC_NET_EXTENDNET = 0x00290000,
WNNC_NET_STAC = 0x002A0000,
WNNC_NET_FOXBAT = 0x002B0000,
WNNC_NET_YAHOO = 0x002C0000,
WNNC_NET_EXIFS = 0x002D0000,
WNNC_NET_DAV = 0x002E0000,
WNNC_NET_KNOWARE = 0x002F0000,
WNNC_NET_OBJECT_DIRE = 0x00300000,
WNNC_NET_MASFAX = 0x00310000,
WNNC_NET_HOB_NFS = 0x00320000,
WNNC_NET_SHIVA = 0x00330000,
WNNC_NET_IBMAL = 0x00340000,
WNNC_NET_LOCK = 0x00350000,
WNNC_NET_TERMSRV = 0x00360000,
WNNC_NET_SRT = 0x00370000,
WNNC_NET_QUINCY = 0x00380000,
WNNC_NET_OPENAFS = 0x00390000,
WNNC_NET_AVID1 = 0x003A0000,
WNNC_NET_DFS = 0x003B0000,
WNNC_NET_KWNP = 0x003C0000,
WNNC_NET_ZENWORKS = 0x003D0000,
WNNC_NET_DRIVEONWEB = 0x003E0000,
WNNC_NET_VMWARE = 0x003F0000,
WNNC_NET_RSFX = 0x00400000,
WNNC_NET_MFILES = 0x00410000,
WNNC_NET_MS_NFS = 0x00420000,
WNNC_NET_GOOGLE = 0x00430000
};
struct CommonNetworkRelativeLink {
type::Size32 CommonNetworkRelativeLinkSize;
CommonNetworkRelativeLinkFlags CommonNetworkRelativeLinkFlags;
u32 NetNameOffset;
u32 DeviceNameOffset;
NetworkProviderType NetworkProviderType;
if (NetNameOffset > 0x14) {
u32 NetNameOffsetUnicode;
u32 DeviceNameOffsetUnicode;
}
char NetName[];
char DeviceName[];
if (NetNameOffset > 0x14) {
char16 NetNameUnicode[];
char16 DeviceNameUnicode[];
}
};
struct LinkInfo {
type::Size32 LinkInfoSize;
type::Size32 LinkInfoHeaderSize;
LinkInfoFlags LinkInfoFlags;
u32 VolumeIDOffset;
u32 LocalBasePathOffset;
u32 CommonNetworkRelativeLinkOffset;
u32 CommonPathSuffixOffset;
if (LinkInfoHeaderSize >= 0x24) {
u32 LocalBasePathOffsetUnicode;
u32 CommonPathSuffixOffsetUnicode;
}
if (LinkInfoFlags.VolumeIDAndLocalBasePath) {
VolumeID VolumeID;
char LocalBasePath[];
}
if (LinkInfoFlags.CommonNetworkRelativeLinkAndPathSuffix)
CommonNetworkRelativeLink CommonNetworkRelativeLink;
char CommonPathSuffix[];
if (LinkInfoHeaderSize >= 0x24) {
if (LinkInfoFlags.VolumeIDAndLocalBasePath)
char16 LocalBasePathUnicode[];
char16 CommonPathSuffixUnicode[];
}
};
struct String {
u16 CountCharacters;
char16 String[CountCharacters];
};
struct StringData {
if (parent.ShellLinkHeader.LinkFlags.HasName)
String NAME_STRING;
if (parent.ShellLinkHeader.LinkFlags.HasRelativePath)
String RELATIVE_PATH;
if (parent.ShellLinkHeader.LinkFlags.HasWorkingDir)
String WORKING_DIR;
if (parent.ShellLinkHeader.LinkFlags.HasArguments)
String COMMAND_LINE_ARGUMENTS;
if (parent.ShellLinkHeader.LinkFlags.HasIconLocation)
String ICON_LOCATION;
};
bitfield FillAttributes {
FOREGROUND_BLUE : 1;
FOREGROUND_GREEN : 1;
FOREGROUND_RED : 1;
FOREGROUND_INTENSITY : 1;
BACKGROUND_BLUE : 1;
BACKGROUND_GREEN : 1;
BACKGROUND_RED : 1;
BACKGROUND_INTENSITY : 1;
padding : 8;
} [[right_to_left]];
struct ConsoleDataBlock {
FillAttributes FillAttributes;
FillAttributes PopupFillAttributes;
u16 ScreenBufferSizeX, ScreenBufferSizeY;
u16 WindowSizeX, WindowSizeY;
u16 WindowOriginX, WindowOriginY;
padding[4];
padding[4];
u32 FontSize;
u32 FontFamily;
u32 FontWeight;
char16 FaceName[32];
u32 CursorSize;
u32 FullScreen;
u32 QuickEdit;
u32 InsertMode;
u32 AutoPosition;
u32 HistoryBufferSize;
u32 NumberOfHistoryBuffers;
u32 HistoryNoDup;
u32 ColorTable[16];
};
struct ConsoleFEDataBlock {
u32 CodePage;
};
struct DarwinDataBlock {
char DarwinDataAnsi[260];
char16 DarwinDataUnicode[260];
};
struct EnvironmentVariableDataBlock {
char TargetAnsi[260];
char16 TargetUnicode[260];
};
struct IconEnvironmentDataBlock {
char TargetAnsi[260];
char16 TargetUnicode[260];
};
struct KnownFolderDataBlock {
type::GUID KnownFolderID;
u32 Offset;
};
struct PropertyStoreDataBlock {
u8 Bytes[parent.BlockSize - sizeof(parent.BlockSize) - sizeof(parent.BlockSignature)];
std::warning("PropertyStoreDataBlock is not yet implemented!");
};
struct ShimDataBlock {
char16 LayerName[(parent.BlockSize - sizeof(parent.BlockSize) - sizeof(parent.BlockSignature)) / sizeof(char16)];
};
struct SpecialFolderDataBlock {
u32 SpecialFolderID;
u32 Offset;
};
struct TrackerDataBlock {
type::Size32 Length;
u32 Version;
char MachineID[16];
type::GUID Droid[2];
type::GUID DroidBirth[2];
};
struct VistaAndAboveIDListDataBlock {
IDList IDList;
};
struct ExtraDataBlock {
type::Size32 BlockSize;
if (BlockSize < 0x04)
break;
else {
u32 BlockSignature;
if (BlockSignature == 0xA000'0002)
ConsoleDataBlock CONSOLE_PROPS;
else if (BlockSignature == 0xA000'0004)
ConsoleFEDataBlock CONSOLE_FE_PROPS;
else if (BlockSignature == 0xA000'0006)
DarwinDataBlock DARWIN_PROPS;
else if (BlockSignature == 0xA000'0001)
EnvironmentVariableDataBlock ENVIRONMENT_PROPS;
else if (BlockSignature == 0xA000'0007)
IconEnvironmentDataBlock ICON_ENVIRONMENT_PROPS;
else if (BlockSignature == 0xA000'000B)
KnownFolderDataBlock KNOWN_FOLDER_PROPS;
else if (BlockSignature == 0xA000'0009)
PropertyStoreDataBlock PROPERTY_STORE_PROPS;
else if (BlockSignature == 0xA000'0008)
ShimDataBlock SHIM_PROPS;
else if (BlockSignature == 0xA000'0005)
SpecialFolderDataBlock SPECIAL_FOLDER_PROPS;
else if (BlockSignature == 0xA000'0003)
TrackerDataBlock TRACKER_PROPS;
else if (BlockSignature == 0xA000'000C)
VistaAndAboveIDListDataBlock VISTA_AND_ABOVE_IDLIST_PROPS;
}
};
struct ExtraData {
ExtraDataBlock ExtraDataBlock[while(true)];
};
struct LNK {
ShellLinkHeader ShellLinkHeader;
if (ShellLinkHeader.LinkFlags.HasLinkTargetIDList)
LinkTargetIDList LinkTargetIDList;
if (ShellLinkHeader.LinkFlags.HasLinkInfo)
LinkInfo LinkInfo;
StringData StringData;
ExtraData ExtraData;
};
LNK lnk @ 0x00;

161
patterns/ntag.hexpat Normal file
View File

@@ -0,0 +1,161 @@
bitfield AccessCapability {
Read : 4;
Write : 4;
} [[left_to_right]];
struct CapabilityContainer {
u8 magic;
u8 version;
u8 memorySize;
AccessCapability accessCapability;
};
bitfield NDEFFlags {
MB : 1;
ME : 1;
CF : 1;
SR : 1;
IL : 1;
TNF : 3;
} [[left_to_right]];
enum TNFType : u8 {
Empty = 0x00,
NFCForumWellKnownType = 0x01,
MediaType = 0x02,
AbsoluteURI = 0x03,
NFCForumExternalType = 0x04,
Unknown = 0x05,
Unchanged = 0x06,
Reserved = 0x07
};
struct NDEF {
NDEFFlags flags;
u8 typeLength;
if (flags.SR)
u8 payloadLength;
else
u32 payloadLength;
if (flags.IL)
u8 idLength;
char type[typeLength];
if (flags.IL)
u8 id[idLength];
u8 payload[payloadLength];
if (flags.ME)
break;
};
struct LockControl {
u8 dynamicLockByteOffset;
u8 numBits;
u8 pageControlInfo;
};
struct MemoryControl {
u8 reservedBytesOffset;
u8 numBytes;
u8 pageSize;
};
struct Length {
u8 byte [[hidden, no_unique_address]];
if (byte == 0xFF)
u24 length;
else
u8 length;
} [[sealed, transform("transform_length"), format("transform_length")]];
fn transform_length(Length length) {
return length.length;
};
enum Tag : u8 {
NULL = 0x00,
LockControl = 0x01,
MemoryControl = 0x02,
NDEFMessage = 0x03,
Proprietary = 0xFD,
TerminatorTLV = 0xFE
};
struct TLV {
Tag tag;
if (tag == Tag::TerminatorTLV) {
break;
} else if (tag == Tag::NULL) {
// Empty
} else {
Length length;
if (length > 0) {
if (tag == Tag::LockControl) {
LockControl lockControl;
} else if (tag == Tag::MemoryControl) {
LockControl lockControl;
} else if (tag == Tag::NDEFMessage) {
NDEF ndef[while(true)];
} else {
u8 value[length];
}
}
}
};
struct ManufacturerData {
u8 serial1[3];
u8 checkByte0;
u8 serial2[4];
u8 checkByte1;
u8 internal;
u16 lockBytes;
};
struct DynamicLockBytes {
u8 bytes[3];
u8 RFUI;
};
bitfield MIRROR {
MIRROR_CONF : 2;
MIRROR_BYTE : 2;
RFUI : 1;
STRG_MOD_EN : 1;
RFUI : 2;
} [[left_to_right]];
bitfield ACCESS {
PROT : 1;
CFGLCK : 1;
RFUI : 1;
NFC_CNT_EN : 1;
NFC_CNT_PWD_PROT : 1;
AUTHLIM : 3;
};
struct Config {
MIRROR MIRROR;
u8 MIRROR_PAGE;
u8 AUTH0;
ACCESS ACCESS;
u32 PWD;
u16 PACK;
};
struct NTAG {
ManufacturerData manufacturerData;
CapabilityContainer cc;
TLV tlv[while(true)];
padding[addressof(tlv) + cc.memorySize * 8 - sizeof(tlv)];
DynamicLockBytes dynamicLockBytes;
Config config;
};
NTAG ntag @ 0x00;

29
patterns/ogg.hexpat Normal file
View File

@@ -0,0 +1,29 @@
#pragma MIME audio/ogg
#include <std/core.pat>
#include <std/mem.pat>
bitfield HeaderType {
Continuation : 1;
BeginOfStream : 1;
EndOfStream : 1;
};
struct SegmentData {
u8 data[parent.segmentTable[std::core::array_index()]];
};
struct Ogg {
char capturePattern[4];
u8 version;
HeaderType headerType;
u64 granulePosition;
u32 bitstreamSerialNumber;
u32 pageSequenceNumber;
u32 checksum;
u8 pageSegments;
u8 segmentTable[pageSegments];
SegmentData data[pageSegments];
};
Ogg ogg[while(!std::mem::eof())] @ 0x00;

View File

@@ -1,4 +1,10 @@
#pragma MIME application/x-dosexec
#pragma MIME application/x-msdownload
#pragma pattern_limit 100000
#pragma array_limit 10000
#include <std/mem.pat>
#include <std/string.pat>
#include <std/ctype.pat>
#include <std/io.pat>
enum MachineType : u16 {
Unknown = 0x00,
@@ -7,9 +13,13 @@ enum MachineType : u16 {
ARM = 0x1C0,
ARM64 = 0xAA64,
ARMNT = 0x1C4,
DECAlphaAXP = 0x183,
EBC = 0xEBC,
I386 = 0x14C,
I860 = 0x14D,
IA64 = 0x200,
LOONGARCH32 = 0x6232,
LOONGARCH64 = 0x6264,
M32R = 0x9041,
MIPS16 = 0x266,
MIPSFPU = 0x366,
@@ -28,32 +38,99 @@ enum MachineType : u16 {
WCEMIPSV2 = 0x169
};
enum PEFormat : u16 {
PE32 = 0x10B,
PE32Plus = 0x20B
};
enum SubsystemType : u16 {
Unknown = 0x00,
Native = 0x01,
WindowsGUI = 0x02,
WindowsCUI = 0x03,
OS2CUI = 0x05,
POSIXCUI = 0x07,
Windows9xNative = 0x08,
WindowsCEGUI = 0x09,
EFIApplication = 0x0A,
EFIBootServiceDriver = 0x0B,
EFIRuntimeDriver = 0x0C,
EFIROM = 0x0D,
Xbox = 0x0E,
WindowsBootApplication = 0x10
};
bitfield Characteristics {
stripped : 1;
relocationsStripped : 1;
executableImage : 1;
lineNumsStripped : 1;
localSymsStripped : 1;
lineNumbersStripped : 1;
localSymbolsStripped : 1;
aggressiveWsTrim : 1;
largeAddressAware : 1;
reserved : 1;
bytesReversedLo : 1;
is32BitMachine : 1;
debugStripped : 1;
debugInfoStripped : 1;
removableRunFromSwap : 1;
netRunFromSwap : 1;
system : 1;
dll : 1;
upSystemOnly : 1;
uniprocessorMachineOnly : 1;
bytesReversedHi : 1;
};
} [[right_to_left]];
bitfield DLLCharacteristics {
reserved : 4;
padding : 1;
highEntropyVA : 1;
dynamicBase : 1;
forceIntegrity : 1;
nxCompatible : 1;
noIsolation : 1;
noSEH : 1;
doNotBind : 1;
appContainer : 1;
wdmDriver : 1;
cfGuard : 1;
terminalServerAware : 1;
} [[right_to_left]];
bitfield SectionFlags {
reserved : 3;
doNotPad : 1;
reserved : 1;
containsCode : 1;
containsInitializedData : 1;
containsUninitializedData : 1;
linkOther : 1;
comments : 1;
reserved : 1;
remove : 1;
comdat : 1;
padding : 2;
globalPointerRelocation : 1;
purgeable : 1;
is16Bit : 1;
locked : 1;
preloaded : 1;
dataAlignment : 4;
extendedRelocations : 1;
discardable : 1;
notCacheable : 1;
notPageable : 1;
shared : 1;
executed : 1;
read : 1;
writtenTo : 1;
} [[right_to_left]];
struct DataDirectory {
u32 virtualAddress;
u32 size;
};
struct OptionalHeader32 {
u16 magic;
struct OptionalHeader {
PEFormat magic;
u8 majorLinkerVersion;
u8 minorLinkerVersion;
u32 sizeOfCode;
@@ -61,8 +138,13 @@ struct OptionalHeader32 {
u32 sizeOfUninitializedData;
u32 addressOfEntryPoint;
u32 baseOfCode;
u32 baseOfData;
u32 imageBase;
if (magic == PEFormat::PE32) {
u32 baseOfData;
u32 imageBase;
}
else if (magic == PEFormat::PE32Plus) {
u64 imageBase;
}
u32 sectionAlignment;
u32 fileAlignment;
u16 majorOperatingSystemVersion;
@@ -75,103 +157,527 @@ struct OptionalHeader32 {
u32 sizeOfImage;
u32 sizeOfHeaders;
u32 checksum;
u16 subsystem;
u16 dllCharacteristics;
u32 sizeOfStackReserve;
u32 sizeOfStackCommit;
u32 sizeOfHeapReserve;
u32 sizeOfHeapCommit;
SubsystemType subsystem;
DLLCharacteristics dllCharacteristics;
if (magic == PEFormat::PE32) {
u32 sizeOfStackReserve;
u32 sizeOfStackCommit;
u32 sizeOfHeapReserve;
u32 sizeOfHeapCommit;
}
else if (magic == PEFormat::PE32Plus) {
u64 sizeOfStackReserve;
u64 sizeOfStackCommit;
u64 sizeOfHeapReserve;
u64 sizeOfHeapCommit;
}
u32 loaderFlags;
u32 numberOfRvaAndSizes;
DataDirectory directories[numberOfRvaAndSizes];
u32 numberOfRVAsAndSizes;
DataDirectory directories[numberOfRVAsAndSizes];
};
struct OptionalHeader64 {
u16 magic;
u8 majorLinkerVersion;
u8 minorLinkerVersion;
u32 sizeOfCode;
u32 sizeOfInitializedData;
u32 sizeOfUninitializedData;
u32 addressOfEntryPoint;
u32 baseOfCode;
u64 imageBase;
u32 sectionAlignment;
u32 fileAlignment;
u16 majorOperatingSystemVersion;
u16 minorOperatingSystemVersion;
u16 majorImageVersion;
u16 minorImageVersion;
u16 majorSubsystemVersion;
u16 minorSubSystemVersion;
u32 win32VersionValue;
u32 sizeOfImage;
u32 sizeOfHeaders;
u32 checksum;
u16 subsystem;
u16 dllCharacteristics;
u64 sizeOfStackReserve;
u64 sizeOfStackCommit;
u64 sizeOfHeapReserve;
u64 sizeOfHeapCommit;
u32 loaderFlags;
u32 numberOfRvaAndSizes;
DataDirectory directories[numberOfRvaAndSizes];
};
struct COFFHeader {
u32 signature;
struct COFFHeader {
char signature[4];
MachineType machine;
u16 numberOfSections;
u32 timeDateStamp;
u32 pointerToSymbolTable;
u32 numberOfSymbolTable;
u32 numberOfSymbols;
u16 sizeOfOptionalHeader;
Characteristics characteristics;
if (machine == MachineType::AMD64) {
OptionalHeader64 optionalHeader;
} else {
OptionalHeader32 optionalHeader;
if (sizeOfOptionalHeader > 0x00) {
OptionalHeader optionalHeader;
}
};
struct DOSHeader {
u16 signature;
u8 header[0x3A];
COFFHeader *coffHeaderPointer : u32;
char signature[2];
u16 lastPageSize;
u16 numberOfPages;
u16 relocations;
u16 headerSizeInParagraphs;
u16 minimumAllocatedParagraphs;
u16 maximumAllocatedParagraphs;
u16 initialSSValue;
u16 initialRelativeSPValue;
u16 checksum;
u16 initialRelativeIPValue;
u16 initialCSValue;
u16 relocationsTablePointer;
u16 overlayNumber;
u16 reservedWords[4];
u16 oemIdentifier;
u16 oemInformation;
u16 reservedWords[10];
u32 coffHeaderPointer;
};
fn isdosmessage(char c) {
return std::ctype::isalnum(c) || c == '.' || c == ' ';
};
struct DOSStub {
u8 code[14];
s8 message[0x27];
u8 data[11];
u8 code[while(std::mem::read_string($, 4) != "This")];
char message[while(isdosmessage(std::mem::read_unsigned($, 1)))];
char data[while(std::mem::read_unsigned($, 1) != 0x00)];
};
union SectionMisc {
u32 physicalAddress;
u32 virtualSize;
struct PEHeader {
DOSHeader dosHeader;
if (dosHeader.headerSizeInParagraphs * 16 < std::mem::size()) {
DOSStub dosStub @ dosHeader.headerSizeInParagraphs * 16;
}
};
struct Section {
PEHeader peHeader @ 0x00;
COFFHeader coffHeader @ peHeader.dosHeader.coffHeaderPointer;
struct SectionHeader {
char name[8];
SectionMisc misc;
if (coffHeader.characteristics.executableImage) {
u32 virtualSize;
} else {
u32 physicalAddress;
}
u32 virtualAddress;
u32 sizeOfRawData;
u32 ptrRawData;
u32 ptrRelocations;
u32 ptrLineNumbers;
u16 numberOfRelactions;
u16 numberOfRelocations;
u16 numberOfLineNumbers;
SectionFlags characteristics;
};
SectionHeader sectionTable[coffHeader.numberOfSections] @ (addressof(coffHeader.characteristics) + 2) + coffHeader.sizeOfOptionalHeader;
u16 currentSectionIndex;
fn updateSectionIndex() {
currentSectionIndex = currentSectionIndex + 1;
};
struct NullTerminatedString {
char string[while(std::mem::read_unsigned($, 1) != 0x00)];
padding[1];
} [[inline]];
// Declarations of sections and variables used by it
// Imports + Readonly Data Section
struct DirectoryTable {
u32 lookupTableRVA;
u32 timeDateStamp;
u32 forwarderChain;
u32 dllNameRVA;
u32 addressTableRVA;
};
struct ImportsSection {
DirectoryTable directoryTables[while(std::mem::read_unsigned($, 16) != 0x00)];
DirectoryTable nullDirectoryTable;
};
struct ReadonlyDataSection {
u8 readonlyDataStart[while($ < coffHeader.optionalHeader.directories[1].virtualAddress - (sectionTable[currentSectionIndex].virtualAddress - sectionTable[currentSectionIndex].ptrRawData))];
ImportsSection importsSection;
u8 readonlyDataEnd[while($ < sectionTable[currentSectionIndex+1].ptrRawData)];
};
// Resource Section
struct ResourceDirectoryTable {
u32 characteristics;
u32 timeDateStamp;
u16 majorVersion;
u16 minorVersion;
u16 nameEntriesAmount;
u16 idEntriesAmount;
};
enum ResourceID : u32 {
Bitmap = 0x02,
Icon = 0x03,
Menu = 0x04,
Dialog = 0x05,
String = 0x06,
GroupIcon = 0x0D,
Version = 0x10,
Manifest = 0x18
};
struct IdDirectoryEntry {
ResourceID id;
u32 relativeOffsetToData;
};
struct ResourceDirectory {
ResourceDirectoryTable resourceDirectoryTable;
IdDirectoryEntry idEntries[resourceDirectoryTable.idEntriesAmount];
};
struct ResourceSection {
ResourceDirectory rootDirectory;
};
// Exports Section
struct ExportDirectoryTable {
u32 exportFlags;
u32 timeDateStamp;
u16 majorVersion;
u16 minorVersion;
u32 nameRVA;
u32 ordinalBase;
u32 addressTableEntries;
u32 numberOfNamePointers;
u32 exportAddressTableRVA;
u32 namePointerRVA;
u32 ordinalTableRVA;
};
struct ExportAddress {
if (std::mem::read_unsigned($, 4) > sectionTable[currentSectionIndex].sizeOfRawData && std::mem::read_unsigned($, 4) < sectionTable[currentSectionIndex].ptrRawData) {
u32 exportRVA;
}
else {
u32 forwarderRVA;
}
};
struct ExportsSection {
ExportDirectoryTable exportDirectoryTable;
ExportAddress exportAddressTable[exportDirectoryTable.addressTableEntries];
u32 exportNamePointerTable[exportDirectoryTable.numberOfNamePointers];
};
// Exception Section
bitfield ExceptionSectionBits {
functionLength : 22;
instructions32Bit : 1;
exceptionHandler : 1;
} [[right_to_left]];
struct FunctionTableEntry {
if (coffHeader.machine == MachineType::MIPSFPU) {
u32 beginVA;
u32 endVA;
u32 exceptionHandlerPointer;
u32 handlerDataPointer;
u32 prologEndVA;
} else if (coffHeader.machine == MachineType::ARM || MachineType::ARM64 || MachineType::ARMNT || MachineType::POWERPC || MachineType::POWERPCFP || MachineType::SH3 || MachineType::SH4) {
u32 beginVA;
u8 prologLength;
ExceptionSectionBits miscellaneousBits;
} else if (coffHeader.machine == MachineType::AMD64 || MachineType::IA64) {
u32 beginRVA;
u32 endRVA;
u32 unwindInformationRVA;
}
};
struct ExceptionSection {
FunctionTableEntry functionTableEntries[while($ < sectionTable[currentSectionIndex].ptrRawData + sectionTable[currentSectionIndex].sizeOfRawData)];
};
// TLS Section
struct TLSSection {
if (coffHeader.optionalHeader.magic == PEFormat::PE32) {
u32 rawDataStartVA;
u32 rawDataEndVA;
u32 indexAddress;
u32 callbacksAddress;
}
else if (coffHeader.optionalHeader.magic == PEFormat::PE32Plus) {
u64 rawDataStartVA;
u64 rawDataEndVA;
u64 indexAddress;
u64 callbacksAddress;
}
u32 zeroFillSize;
u32 characteristics;
};
struct PEHeader {
DOSHeader dosHeader;
DOSStub dosStub;
// Relocations Section
bitfield RelocationWord {
type : 4;
offset : 12;
};
PEHeader peHeader @ 0x00;
struct BaseRelocationBlock {
u32 pageRVA;
u32 blockSize;
RelocationWord word;
};
Section sectionsTable[peHeader.dosHeader.coffHeaderPointer.numberOfSections]
@ addressof(peHeader.dosHeader.coffHeaderPointer) + sizeof(peHeader.dosHeader.coffHeaderPointer);
struct BaseRelocationTable {
BaseRelocationBlock baseRelocationBlocks[while(std::mem::read_unsigned($, 8) != 0x00)];
};
// General Section things
enum I386Relocations : u16 {
Absolute = 0x00,
Dir16 = 0x01,
Rel16 = 0x02,
Dir32 = 0x06
};
struct Relocation {
u32 virtualAddress;
u32 symbolTableIndex;
if (coffHeader.machine == MachineType::I386) {
I386Relocations type;
}
else {
u16 type;
}
};
struct LineNumber {
u32 lineNumber @ $ + 4;
if (lineNumber > 0x00) {
u32 virtualAddress @ $ - 8;
} else {
u32 symbolTableIndex @ $ - 8;
}
$ += 8;
};
fn importsSectionExists() {
bool returnedValue = false;
std::print("Checking which section is .idata for read-only data section");
for (u16 i = 0, i < coffHeader.numberOfSections, i = i + 1) {
std::print("Checking section " + std::string::to_string(i));
if (sectionTable[i].name == ".idata") {
std::print("Check successful. Section " + std::string::to_string(i) + " is .idata, so the read-only data section won't have an imports section in it");
returnedValue = true;
break;
}
}
if (!returnedValue) {
std::print("Check failed! This means there is no separate imports section");
}
return returnedValue;
};
struct Section {
if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".pdata")) { // Exception section
ExceptionSection exceptionSection;
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".rdata")) {// Read-only data section
if (importsSectionExists() || coffHeader.optionalHeader.directories[1].size == 0) {
u8 readonlyDataSection[sectionTable[currentSectionIndex].sizeOfRawData];
}
else {
ReadonlyDataSection readonlyDataSection;
}
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".idata")) {// Imports section
ImportsSection importsSection;
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".edata")) {// Exports section
ExportsSection exportsSection;
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".rsrc")) { // Resource section
ResourceSection resourceSection;
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".tls")) { // Thread-local storage section
TLSSection tlsSection;
}
else if (std::string::starts_with(sectionTable[currentSectionIndex].name, ".reloc")) {// Thread-local storage section
BaseRelocationTable relocationsSection;
}
else {
u8 freeformSection[sectionTable[currentSectionIndex].sizeOfRawData]; // Freeform data section
}
// Additional things
//Relocation relocations[sectionTable[currentSectionIndex].numberOfRelocations] @ sectionTable[currentSectionIndex].ptrRelocations;
LineNumber lineNumbers[sectionTable[currentSectionIndex].numberOfLineNumbers] @ sectionTable[currentSectionIndex].ptrLineNumbers;
// Next section
if (currentSectionIndex < coffHeader.numberOfSections-1) { // If it's not the last section (to avoid problems this code would have with it)
updateSectionIndex(); // Make the current section index the next section's index
if (sectionTable[currentSectionIndex].sizeOfRawData > 0) { // If the size of this section is bigger than 0
$ = sectionTable[currentSectionIndex].ptrRawData; // Put the current offset at the start of the next section
}
}
} [[inline]];
Section sections[coffHeader.numberOfSections] @ sectionTable[0].ptrRawData;
// Symbol & String Tables
enum SectionNumberType : s16 {
Undefined = 0,
Absolute = -1,
Debug = -2
};
enum SymbolTypeMSB : u8 {
Null = 0x00,
Pointer = 0x10,
Function = 0x20,
Array = 0x30
};
enum SymbolTypeLSB : u8 {
Null = 0x00,
Void = 0x01,
Char = 0x02,
Short = 0x03,
Integer = 0x04,
Long = 0x05,
Float = 0x06,
Double = 0x07,
Struct = 0x08,
Union = 0x09,
Enum = 0x0A,
MemberOfEnum = 0x0B,
Byte = 0x0C,
Word = 0x0D,
UInt = 0x0E,
DWord = 0x0F
};
enum StorageClassType : s8 {
EndOfFunction = -1,
Null = 0,
Automatic = 1,
External = 2,
Static = 3,
Register = 4,
DefinedExternally = 5,
Label = 6,
UndefinedLabel = 7,
MemberOfStruct = 8,
Argument = 9,
StructTag = 10,
MemberOfUnion = 11,
UnionTag = 12,
TypeDefinition = 13,
UndefinedStatic = 14,
EnumTag = 15,
MemberOfEnum = 16,
RegisterParameter = 17,
Bitfield = 18,
Block = 100,
BlockFunction = 101,
EndOfStruct = 102,
File = 103,
Section = 104,
WeakExternal = 105,
CLRToken = 107
};
struct SymbolNameAddress {
u32 zeroes;
u32 offset;
};
struct SymbolName {
if (std::mem::read_unsigned($, 4) == 0) {
SymbolNameAddress nameAddress;
}
else {
char shortName[8];
}
};
struct SymbolType {
SymbolTypeMSB msb;
SymbolTypeLSB lsb;
};
struct Symbol {
SymbolName name;
u32 value;
SectionNumberType sectionNumber;
SymbolType type;
StorageClassType storageClass;
u8 numberOfAuxSymbols;
};
Symbol symbolTable[coffHeader.numberOfSymbols] @ coffHeader.pointerToSymbolTable;
struct StringTable {
u32 size;
NullTerminatedString strings[while($ < addressof(this) + size)];
} [[inline]];
StringTable stringTable[coffHeader.numberOfSymbols > 0] @ addressof(symbolTable) + sizeof(symbolTable);
// Rich Header
enum ProductType : u16 {
Unmarked = 0x00 ^ richHeaderEnd[0].mask.maskArray[1],
Imports = 0x01 ^ richHeaderEnd[0].mask.maskArray[1],
STDLIBDLL = 0x04 ^ richHeaderEnd[0].mask.maskArray[1],
VC6CVTRes = 0x06 ^ richHeaderEnd[0].mask.maskArray[1],
VC6CCompiler = 0x0A ^ richHeaderEnd[0].mask.maskArray[1],
VC6CPPCompiler = 0x0B ^ richHeaderEnd[0].mask.maskArray[1],
OldNames = 0x0C ^ richHeaderEnd[0].mask.maskArray[1],
MASM613 = 0x0E ^ richHeaderEnd[0].mask.maskArray[1],
VC2003Assembler = 0x0F ^ richHeaderEnd[0].mask.maskArray[1],
VC2002Linker = 0x19 ^ richHeaderEnd[0].mask.maskArray[1],
VC2002CCompiler = 0x1C ^ richHeaderEnd[0].mask.maskArray[1],
VC2002CPPCompiler = 0x1D ^ richHeaderEnd[0].mask.maskArray[1],
VC2003SDKIMP = 0x5D ^ richHeaderEnd[0].mask.maskArray[1],
VC2003CPPCompiler = 0x60 ^ richHeaderEnd[0].mask.maskArray[1],
VC2008SDKIMP = 0x93 ^ richHeaderEnd[0].mask.maskArray[1],
Linker12 = 0x9D ^ richHeaderEnd[0].mask.maskArray[1],
MASM10 = 0x9E ^ richHeaderEnd[0].mask.maskArray[1],
VC2010CCompiler = 0xAA ^ richHeaderEnd[0].mask.maskArray[1],
VC2010CPPCompiler = 0xAB ^ richHeaderEnd[0].mask.maskArray[1]
};
union RichHeaderMask {
u32 maskVariable;
u16 maskArray[2];
};
struct RichHeaderEnd {
char signature[4];
RichHeaderMask mask;
} [[inline]];
u8 richHeaderAmount;
u8 richHeaderEndPosition;
u8 richHeaderCorpusPosition;
fn initializeRichHeader() {
$ = sizeof(peHeader);
while ($ < peHeader.dosHeader.coffHeaderPointer) {
if (std::mem::read_string($, 4) == "Rich") {
richHeaderAmount = 1;
richHeaderEndPosition = $;
break;
}
$ += 1;
}
};
initializeRichHeader();
RichHeaderEnd richHeaderEnd[richHeaderAmount] @ richHeaderEndPosition;
struct Product {
u16 buildNumber;
ProductType productID;
u32 objectCount;
};
struct RichHeaderCorpus {
char maskedSignature[4];
u32 nullPadding[3];
Product products[while($ != richHeaderEndPosition)];
} [[inline]];
fn setupRichHeader() {
if (richHeaderAmount > 0) {
//0x20 is the size of a Rich Header with one product
for (u8 richCursor = $ - 0x20, richCursor > sizeof(peHeader), richCursor = richCursor - 0x01) {
if (str(std::mem::read_unsigned(richCursor, 4) ^ richHeaderEnd[0].mask.maskVariable) == "DanS") {
richHeaderCorpusPosition = richCursor;
break;
}
}
}
};
setupRichHeader();
RichHeaderCorpus richHeaderCorpus[richHeaderAmount] @ richHeaderCorpusPosition;

66
patterns/protobuf.hexpat Normal file
View File

@@ -0,0 +1,66 @@
#include <std/mem.pat>
#include <type/leb128.pat>
struct ZigZag32 {
u32 value;
} [[sealed, format("format_zigzag32")]];
fn format_zigzag32(ZigZag32 zigzag) {
return s32((s32(zigzag.value) << 1) ^ (s32(zigzag.value) >> 31));
};
struct ZigZag64 {
u64 value;
} [[sealed, format("format_zigzag64")]];
fn format_zigzag64(ZigZag64 zigzag) {
return s64((s64(zigzag.value) << 1) ^ (s64(zigzag.value) >> 63));
};
enum WireType : u8 {
Varint = 0,
_64Bit = 1,
LengthDelimited = 2,
StartGroup = 3,
EndGroup = 4,
_32Bit = 5
};
bitfield Key {
field_number : 5;
wire_type : 3;
} [[left_to_right]];
union _64Bit {
u64 fixed64;
ZigZag64 sfixed64;
double dbl;
};
union _32Bit {
u32 fixed32;
ZigZag32 sfixed32;
float flt;
};
struct LengthDelimited {
type::LEB128 length;
char data[length];
};
struct Entry {
Key key;
if (key.wire_type == WireType::Varint)
type::LEB128 value;
else if (key.wire_type == WireType::_64Bit)
_64Bit value;
else if (key.wire_type == WireType::LengthDelimited)
LengthDelimited value;
else if (key.wire_type == WireType::_32Bit)
_32Bit value;
};
Entry entries[while(!std::mem::eof())] @ 0x00;

38
patterns/stl.hexpat Normal file
View File

@@ -0,0 +1,38 @@
#pragma MIME model/stl
#pragma MIME model/x.stl-binary
#pragma MIME model/x.stl-ascii
#pragma MIME application/sla
#include <std/sys.pat>
#include <std/mem.pat>
struct Vector3f {
float x, y, z;
} [[static, format("format_vector3f")]];
fn format_vector3f(Vector3f vec) {
return std::format("[ {}, {}, {} ]", vec.x, vec.y, vec.z);
};
struct Triangle {
Vector3f normal;
Vector3f points[3];
u16 flags;
} [[static]];
struct BinarySTLHeader {
char caption[];
padding[80 - sizeof(caption)];
u32 triangleCount;
};
struct STL {
if (std::mem::read_string(0, 6) == "solid ")
std::warning("ASCII STL file!");
else {
BinarySTLHeader header;
Triangle triangles[header.triangleCount];
}
};
STL stl @ 0x00;

193
patterns/vhdx.hexpat Normal file
View File

@@ -0,0 +1,193 @@
#include <std/io.pat>
#include <std/ptr.pat>
#include <std/core.pat>
#include <type/guid.pat>
#include <type/size.pat>
struct FileTypeIdentifier {
char signature[8];
char16 creator[256];
padding[0x1'0000 - sizeof(signature) - sizeof(creator)];
};
struct DataSector {
u32 sequenceHigh;
u8 data[4084];
u32 sequenceLow;
} [[static]];
struct ZeroDescriptor {
padding[4];
u64 zeroLength;
DataSector *dataSector : u64;
u64 sequenceNumber;
} [[static]];
struct DataDescriptor {
u32 trailingBytes;
u64 leadingBytes;
DataSector *dataSector : u64;
u64 sequenceNumber;
} [[static]];
struct LogDescriptor {
char signature[4];
if (signature == "zero")
ZeroDescriptor descriptor [[inline]];
else if (signature == "desc")
DataDescriptor descriptor [[inline]];
};
struct LogEntry {
char signature[4];
u32 checksum;
type::Size32 entryLength;
u32 tail;
u64 sequenceNumber;
u32 descriptorCount;
padding[4];
type::GUID logGuid;
u64 flushedFileOffset;
u64 lastFileOffset;
} [[static]];
bitfield BAT {
State : 3;
padding : 17;
FileOffsetMB : 44;
} [[right_to_left]];
bitfield MetadataEntryFlags {
IsUser : 1;
IsVirtualDisk : 1;
IsRequired : 1;
padding : 29;
};
bitfield FileParameterFlags {
LeaveBlockAllocated : 1;
HasParent : 1;
padding : 30;
};
struct MetadataFileParameters {
type::Size32 blockSize;
FileParameterFlags flags;
};
struct MetadataVirtualDiskSize {
type::Size64 virtualDiskSize;
};
struct MetadataVirtualDiskID {
type::GUID virtualDiskID;
};
struct MetadataLogicalSectorSize {
type::Size32 logicalSectorSize;
};
struct MetadataPhysicalSectorSize {
type::Size32 physicalSectorSize;
};
struct ParentLocatorEntry {
u32 keyOffset;
u32 valueOffset;
u16 keyLength;
u16 valueLength;
char key[keyLength] @ addressof(parent) + keyOffset;
char value[valueLength] @ addressof(parent) + valueOffset;
};
struct MetadataParentLocator {
type::GUID locatorType;
padding[2];
u16 keyValueCount;
ParentLocatorEntry entries[keyValueCount];
};
fn metadata_relative(u128 offset) {
return addressof(parent.parent);
};
struct MetadataTableEntry {
type::GUID itemID;
if (std::core::formatted_value(itemID) == "{CAA16737-FA36-4D43-B3B6-33F0AA44E76B}")
MetadataFileParameters *data : u32 [[pointer_base("metadata_relative")]];
else if (std::core::formatted_value(itemID) == "{2FA54224-CD1B-4876-B211-5DBED83BF4B8}")
MetadataVirtualDiskSize *data : u32 [[pointer_base("metadata_relative")]];
else if (std::core::formatted_value(itemID) == "{BECA12AB-B2E6-4523-93EF-C309E000C746}")
MetadataVirtualDiskID *data : u32 [[pointer_base("metadata_relative")]];
else if (std::core::formatted_value(itemID) == "{8141BF1D-A96F-4709-BA47-F233A8FAAB5F}")
MetadataLogicalSectorSize *data : u32 [[pointer_base("metadata_relative")]];
else if (std::core::formatted_value(itemID) == "{CDA348C7-445D-4471-9CC9-E9885251C556}")
MetadataPhysicalSectorSize *data : u32 [[pointer_base("metadata_relative")]];
else if (std::core::formatted_value(itemID) == "{A8D35F2D-B30B-454D-ABF7-D3D84834AB0C}")
MetadataParentLocator *data : u32 [[pointer_base("metadata_relative")]];
else
u32 dataOffset;
type::Size32 length;
MetadataEntryFlags flags;
padding[4];
};
struct MetadataRegion {
char signature[8];
padding[2];
u16 entryCount;
padding[20];
MetadataTableEntry entries[entryCount];
};
struct RegionTableEntry {
type::GUID guid;
if (std::core::formatted_value(guid) == "{2DC27766-F623-4200-9D64-115E9BFD4A08}")
BAT *bat : u64;
else if (std::core::formatted_value(guid) == "{8B7CA206-4790-4B9A-B8FE-575F050F886E}")
MetadataRegion *metadata : u64;
else
u64 fileOffset;
type::Size32 length;
u32 required;
};
struct RegionTable {
char signature[4];
u32 checksum;
u32 entryCount;
padding[4];
RegionTableEntry entries[entryCount];
};
struct Header {
char signature[4];
u32 checksum;
u64 sequenceNumber;
type::GUID fileWriteGuid, dataWriteGuid, logGuid;
u16 logVersion;
u16 version;
type::Size32 logLength;
LogEntry *log : u64;
padding[4016];
};
struct VHDX {
FileTypeIdentifier fileTypeIdentifier;
Header header @ 0x1'0000;
Header headerBackup @ 0x2'0000;
RegionTable regionTable @ 0x3'0000;
RegionTable regionTableBackup @ 0x4'0000;
};
VHDX vhdx @ 0x00;

View File

@@ -169,7 +169,7 @@ struct WaveListItem : WaveChunk {
} else if (chunkId == "note") {
WaveNote note;
} else {
padding[chunkSize];
padding[(chunkSize + 1) >> 1 << 1];
}
};
@@ -181,36 +181,48 @@ struct WaveList {
WaveListItem item[while ($ < listEnd)];
};
u32 paddedChunkSize;
struct WavData {
WaveChunk chunk;
paddedChunkSize = (chunk.chunkSize + 1) >> 1 << 1;
if (chunk.chunkId == "fmt ") {
WaveFormat fmt;
if (fmt.formatTag == WaveFormatType::PCM) {
WaveFormatPCM pcmExtraData;
padding[paddedChunkSize - sizeof(fmt) - sizeof(pcmExtraData)];
} else if (fmt.formatTag == WaveFormatType::MS_ADPCM) {
WaveFormatMSADPCM msAdpcmExtraData;
padding[paddedChunkSize - sizeof(fmt) - sizeof(msAdpcmExtraData)];
} else if (fmt.formatTag == WaveFormatType::MPEG) {
WaveFormatMPEG mpegExtraData;
padding[paddedChunkSize - sizeof(fmt) - sizeof(mpegExtraData)];
} else if (fmt.formatTag == WaveFormatType::MPEGLAYER3) {
WaveFormatMPEGLayer3 mpegLayer3ExtraData;
padding[paddedChunkSize - sizeof(fmt) - sizeof(mpegLayer3ExtraData)];
} else {
WaveFormatExDummy unknown;
padding[paddedChunkSize - sizeof(fmt) - sizeof(unknown)];
}
} else if (chunk.chunkId == "data") {
padding[chunk.chunkSize];
padding[paddedChunkSize];
} else if (chunk.chunkId == "fact") {
WaveFact fact;
padding[paddedChunkSize - sizeof(fact)];
} else if (chunk.chunkId == "smpl") {
WaveSample smpl;
padding[paddedChunkSize - sizeof(smpl)];
} else if (chunk.chunkId == "cue ") {
WaveCue cue;
padding[paddedChunkSize - sizeof(cue)];
} else if (chunk.chunkId == "LIST") {
listEnd = $ + chunk.chunkSize;
WaveList list;
padding[paddedChunkSize % 1];
} else {
padding[chunk.chunkSize];
padding[paddedChunkSize];
}
};

31
scripts/csv2tbl.py Normal file
View File

@@ -0,0 +1,31 @@
import csv
import sys
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} <file.csv>")
exit()
fileName = sys.argv[1]
index = 0x00
with open(f"{fileName}.tbl", "w", encoding="utf-8") as outFile:
with open(fileName) as file:
reader = csv.reader(file)
for row in reader:
for cell in row:
if cell != "":
try:
number = int(cell, 16)
if number <= 0x1F:
lut = [ "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "TAB", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US"]
print(f"{index:02X}={lut[number]}", file=outFile)
elif number == 0x7F:
print(f"{index:02X}=DEL", file=outFile)
else:
if chr(number) == chr(0xFFFD):
raise Exception
print(f"{index:02X}={chr(number)}", file=outFile)
except Exception:
print(f"{index:02X}", file=outFile)
index += 1

View File

@@ -0,0 +1,35 @@
import json
import sys
from pathlib import Path
def extractData(projectName, jsonData, objectName, extension):
if objectName in jsonData:
with open(f"./{projectName}.{extension}", mode="w", encoding="utf-8") as output:
output.write(jsonData[objectName])
def main():
if len(sys.argv) != 2 or not str(sys.argv[1]).endswith(".hexproj"):
print(f"Usage: {sys.argv[0]} <filename.hexproj>")
exit(1)
projectPath = sys.argv[1]
with open(projectPath, mode="r", encoding="utf-8") as file:
jsonData = json.loads(file.read())
projectName = Path(projectPath).stem
extractData(projectName, jsonData, "dataProcessor", "hexnode")
extractData(projectName, jsonData, "pattern", "hexpat")
if "bookmarks" in jsonData:
with open(f"./{projectName}.hexbm", mode="w", encoding="utf-8") as output:
jsonOutput = {}
jsonOutput["bookmarks"] = jsonData["bookmarks"]
output.write(json.dumps(jsonOutput, indent=4))
if "filePath" in jsonData:
print(f"Project file used file {jsonData['filePath']}")
if __name__ == "__main__":
main()

View File

@@ -4,8 +4,20 @@ project(tests)
set(CMAKE_CXX_STANDARD 20)
add_subdirectory(lib/pl)
include(FetchContent)
FetchContent_Declare(
pattern_language
GIT_REPOSITORY https://github.com/WerWolv/PatternLanguage
GIT_TAG master
)
FetchContent_MakeAvailable(pattern_language)
enable_testing()
add_subdirectory(patterns)
add_subdirectory(patterns)
add_subdirectory(includes)
add_subdirectory(magic)
add_custom_target(test_all DEPENDS patterns_tests includes_test magic_test)

View File

@@ -0,0 +1,29 @@
cmake_minimum_required(VERSION 3.16)
project(includes_test)
set(TOP_LEVEL "${CMAKE_CURRENT_SOURCE_DIR}/../..")
file(GLOB INCLUDES
"${TOP_LEVEL}/includes/*/*.pat"
)
set(PATTERN_INCLUDES "${TOP_LEVEL}/includes")
add_executable(includes_test
source/main.cpp
)
target_include_directories(includes_test PRIVATE include)
target_link_libraries(includes_test libpl)
set_target_properties(includes_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
foreach (include IN LISTS INCLUDES)
file(RELATIVE_PATH INCLUDE_NAME ${PATTERN_INCLUDES} ${include})
set(TEST_NAME "Includes/${INCLUDE_NAME}")
add_test(NAME ${TEST_NAME} COMMAND includes_test "${INCLUDE_NAME}" "${include}" "${PATTERN_INCLUDES}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77)
endforeach ()

View File

@@ -0,0 +1,74 @@
#include <pl.hpp>
#include <pl/helpers/file.hpp>
#include <pl/core/errors/preprocessor_errors.hpp>
#include <pl/core/errors/evaluator_errors.hpp>
#include <fmt/format.h>
#include <cstdlib>
#define EXIT_SKIP 77
int main(int argc, char **argv) {
// Any number of arguments other than 4 are invalid
if (argc != 4)
return EXIT_FAILURE;
// Extract command line arguments
const std::string includeName = argv[1];
const std::fs::path includeFilePath = argv[2];
const std::fs::path includePath = argv[3];
fmt::print("Running test {} on test file {}\n", includeName, includeFilePath.filename().string());
// Open pattern file
pl::hlp::fs::File patternFile(includeFilePath, pl::hlp::fs::File::Mode::Read);
if (!patternFile.isValid())
return EXIT_FAILURE;
// Setup Pattern Language Runtime
pl::PatternLanguage runtime;
{
constexpr auto DummyPragmaHandler = [](const auto&, const auto&){
pl::core::err::M0006.throwError("Include files should never use this pragma!");
return false;
};
runtime.setDataSource([&](pl::u64 address, pl::u8 *data, size_t size) {
pl::core::err::E0011.throwError("Include files should never read from memory directly!");
}, 0x00, 0x100000);
runtime.setDangerousFunctionCallHandler([]{ return true; });
runtime.setIncludePaths({ includePath });
runtime.addPragma("endian", DummyPragmaHandler);
runtime.addPragma("MIME", DummyPragmaHandler);
runtime.addPragma("base_address", DummyPragmaHandler);
runtime.addPragma("eval_depth", DummyPragmaHandler);
runtime.addPragma("array_limit", DummyPragmaHandler);
runtime.addPragma("pattern_limit", DummyPragmaHandler);
}
// Execute pattern
if (!runtime.executeString(patternFile.readString())) {
fmt::print("Error during execution!\n");
if (const auto &hardError = runtime.getError(); hardError.has_value())
fmt::print("Hard error: {}:{} - {}\n\n", hardError->line, hardError->column, hardError->message);
for (const auto &[level, message] : runtime.getConsoleLog()) {
switch (level) {
using enum pl::core::LogConsole::Level;
case Debug: fmt::print(" [DEBUG] "); break;
case Info: fmt::print(" [INFO] "); break;
case Warning: fmt::print(" [WARN] "); break;
case Error: fmt::print(" [ERROR] "); break;
}
fmt::print("{}\n", message);
}
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

Submodule tests/lib/pl deleted from d399836b69

View File

@@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.16)
project(magic_test)
set(TOP_LEVEL "${CMAKE_CURRENT_SOURCE_DIR}/../..")
set(MAGIC_FOLDER "${TOP_LEVEL}/magic")
file(GLOB MAGIC_FILES
"${MAGIC_FOLDER}/*"
)
add_executable(magic_test
source/main.cpp
)
find_package(PkgConfig REQUIRED)
pkg_search_module(MAGIC libmagic>=5.39)
target_include_directories(magic_test PRIVATE include)
target_link_libraries(magic_test libpl magic)
set_target_properties(magic_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
foreach (magic_file IN LISTS MAGIC_FILES)
file(RELATIVE_PATH MAGIC_NAME ${MAGIC_FOLDER} ${magic_file})
set(TEST_NAME "Magic/${MAGIC_NAME}")
add_test(NAME ${TEST_NAME} COMMAND magic_test "${MAGIC_NAME}" "${magic_file}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77)
endforeach ()

View File

@@ -0,0 +1,34 @@
#include <pl/helpers/file.hpp>
#include <pl/helpers/guards.hpp>
#include <fmt/format.h>
#include <cstdlib>
#include <magic.h>
#define EXIT_SKIP 77
int main(int argc, char **argv) {
// Any number of arguments other than 3 are invalid
if (argc != 3)
return EXIT_FAILURE;
// Extract command line arguments
const std::string magicName = argv[1];
const std::fs::path magicFilePath = argv[2];
fmt::print("Running test {} on test file {}\n", magicName, magicFilePath.filename().string());
magic_t ctx = magic_open(MAGIC_NONE);
PL_ON_SCOPE_EXIT { magic_close(ctx); };
if (ctx == nullptr)
return EXIT_FAILURE;
if (magic_compile(ctx, magicFilePath.string().c_str()) != 0) {
fmt::print("Error during compilation: {}\n", magic_error(ctx));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

View File

@@ -8,7 +8,7 @@ file(GLOB PATTERNS
"${TOP_LEVEL}/patterns/*.hexpat"
)
set(PATTERN_INCLUDES "${TOP_LEVEL}/includes/std")
set(PATTERN_INCLUDES "${TOP_LEVEL}/includes")
add_executable(patterns_tests
source/main.cpp
@@ -24,7 +24,6 @@ foreach (pattern IN LISTS PATTERNS)
file(GLOB TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/test_data/${PATTERN_NAME}.*")
message(STATUS ${CMAKE_CURRENT_SOURCE_DIR}/test_data/${PATTERN_NAME}.*)
if (TEST_FILES)
list(GET TEST_FILES 0 TEST_FILE)
else ()

View File

@@ -1,5 +1,5 @@
#include <pl.hpp>
#include <helpers/file.hpp>
#include <pl/helpers/file.hpp>
#include <fmt/format.h>
#include <cstdlib>
@@ -27,12 +27,12 @@ int main(int argc, char **argv) {
fmt::print("Running test {} on test file {}\n", patternName, testFilePath.stem().string());
// Open pattern file
pl::fs::File patternFile(patternFilePath, pl::fs::File::Mode::Read);
pl::hlp::fs::File patternFile(patternFilePath, pl::hlp::fs::File::Mode::Read);
if (!patternFile.isValid())
return EXIT_FAILURE;
// Open test file
pl::fs::File testFile(testFilePath, pl::fs::File::Mode::Read);
pl::hlp::fs::File testFile(testFilePath, pl::hlp::fs::File::Mode::Read);
if (!testFile.isValid())
return EXIT_FAILURE;
@@ -55,14 +55,15 @@ int main(int argc, char **argv) {
fmt::print("Error during execution!\n");
if (const auto &hardError = runtime.getError(); hardError.has_value())
fmt::print("Hard error: {}\n\n", hardError.value().what());
fmt::print("Hard error: {}:{} - {}\n\n", hardError->line, hardError->column, hardError->message);
for (const auto &[level, message] : runtime.getConsoleLog()) {
switch (level) {
case pl::LogConsole::Level::Debug: fmt::print(" [DEBUG] "); break;
case pl::LogConsole::Level::Info: fmt::print(" [INFO] "); break;
case pl::LogConsole::Level::Warning: fmt::print(" [WARN] "); break;
case pl::LogConsole::Level::Error: fmt::print(" [ERROR] "); break;
using enum pl::core::LogConsole::Level;
case Debug: fmt::print(" [DEBUG] "); break;
case Info: fmt::print(" [INFO] "); break;
case Warning: fmt::print(" [WARN] "); break;
case Error: fmt::print(" [ERROR] "); break;
}
fmt::print("{}\n", message);

Binary file not shown.

Binary file not shown.