A-1. Universitas Sumatera Utara

dokumen-dokumen yang mirip
BAB VI SISTEM BILANGAN

BAB II TINJAUAN PUSTAKA

BAB II TINJAUAN PUSTAKA

BAB III DATA KOMPUTASI

SISTEM BILANGAN DAN SANDI

RANGKAIAN ARITMETIKA 2

BAB IV SISTEM SANDI (CODING)

BAB IV HASIL DAN PEMBAHASAN. Proses enkripsi dimulai dengan mengubah file input gambar RGB menjadi

menetapkan olahraga perlu makin ani bagi setiap anggota masyarakat, nasional yaitu memasyarakatkan masyarakat. Tak hanya itu saja

BAB IV SISTEM SANDI (CODING)

SISTEM BILANGAN Desimal, Biner, Oktal dan Heksadesimal

RANGKAIAN ARITMETIKA 2

PRAKTEK KOMUNIKASI DATA PENGKODEAN KARAKTER

ASCII (American Standart Code for Information Intercharge)

RANGKAIAN ARITMETIKA

CODING. Komunikasi Data

BAB-2 : TIPE DATA, VARIABEL DAN OPERATOR

BAB 2 TINJAUAN PUSTAKA

LISTING PROGRAM. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) ShowInputForm End Sub

BAB IV IMPLEMENTASI DAN PENGUJIAN

Penggunaan Sistem Bilangan dan Pengkodean -3-

BAB IV PENGUJIAN DAN ANALISIS

BAB IV IMPLEMENTASI DAN PENGUJIAN. dan tempat implementasi dari perangkat lunak ini adalah sebagai berikut :

Data Link Layer BAB 3

BAB 3 METODOLOGI PENELITIAN

STEGANOGRAFI PENYISIPAN TEKS PADA CITRA MENGGUNAKAN METODE END OF FILE

Pre Processing. Memberikan gambaran jenis-jenis pre-processing

LISTING PROGRAM. Script Menu Utama Pada Game Tebak Kata

MENGENAL DAN MEMPELAJARI BARCODE (Bagian I)

KONEKSI VB DENGAN MYSQL (Wajib, S.Pd.)

VBSCRIPT TUTORIAL. 2. MEMASUKKAN KODE VBSCRIPT KE DALAM HALAMAN HTML Kode VBScript ditulis didalam pasangan tag <SCRIPT>.

Field Tipe Data Size Keterangan userid Text 12 Primary key namauser Text 30 - password Text 8 - akses Text 10 -

1. Rancangan Input Program Form Menu Utama Form Data Barang [ Input Barang ]

LAYER FISIK TERKAIT LAYER FISIK: 1. SINKRONISASI 2. PHYSICAL ENCODING : NRZI, NRZ, MANCHESTER, AMI 3. GANGGUAN LAYER FISIK

Bab 7 Komponen Dasar Visual Basic 29 BAB VII KOMPONEN DASAR VISUAL BASIC TUJUAN PRAKTIKUM

BAB II DASAR TEORI. Gambar 2.1. Proses Enkripsi Dekripsi

Struktur Data II. Bekerja Dengan Form.

KODE ASCII 7 BIT. American Standard Code for Information Iinterchange

BAB V PROSEDUR DAN FUNGSI

Penggandaan Ke Sistem

Kartu Bimbingan Tugas Akhir Mahhasiswa

OBJECT ORIENTED PROGRAMMING. Day 3 : Operator dan Assignment

Variable. Variable (cont) Variable (cont) Tipe Data

Operator dan Assignment. Pertemuan 3 Pemrograman Berbasis Obyek

Topik. Pengodean Data Teknik Pengodean

MODUL IV PERULANGAN ( LOOPING )

1. Buka Visual Basic 6 sobat. Buat project baru, masukkan componen Microsoft Winsock Control 2. Masukkan coding berikut

BAB III Struktur Program

Menampilkan List Komputer dan User-nya dalam Jaringan Intranet Dengan Fungsi WNet API

BAB IV IMPLEMENTASI DAN PENGUJIAN. bagian dekompresi dan bagian client server yang dapat melakukan kompresi dan

Tutorial, Source code, Request Program Visual Basic

BAB 2 LANDASAN TEORI Kriptografi

Algoritma Cipher Block EZPZ

Pertemuan III MENYIMPAN REKAMAN (RECORD) KE DALAM BASIS DATA

1.1 Mengenal Visual Basic (VB) 1.2 Mengenal Integrated Development Environment (IDE) VB 6

OZ: Algoritma Cipher Blok Kombinasi Lai-Massey dengan Fungsi Hash MD5

BAB III ANALISIS SISTEM

Praktekum VB 6.0 I. KOTAK PESAN. Contoh syntax kotak pesan

BAB 2 LANDASAN TEORI

Program Enkripsi & Dekripsi sederhana menggunakan Visual Basic 6.0

Penggunaan Timing Attack Sebagai Salah Satu Jenis Serangan pada Kriptografi

DASAR PEMOGRAMAN JAVA

KARTU BIMBINGAN TUGAS AKHIR MAHASISWA

Private Sub cmdprint_click() WebBrowser1.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DODEFAULT End Sub

LISTING PROGRAM. Private Sub MDIParent1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

2.0 PERWAKILAN DATA PROGRAM LATIHAN GURU ASAS SAINS KOMPUTER TINGKATAN 1 BAHAGIAN PENDIDIKAN GURU KEMENTERIAN PENDIDIKAN MALAYSIA.

Dasar Pemrograman Java

Keterangan : Integer Long : tipe data untuk angka bulat Single, Double : tipe data untuk angka pecahan/desimal Currency : tipe data untuk angka mata

Standard IEEE 754 & Big Endian Litle Endian

Teori Algoritma TIPE DATA

Listing Program. 1. Loading. 2. Home. Option Explicit. Dim isplash As Integer. Private Sub Timer1_Timer() On Error Resume Next. isplash = isplash + 5

Gambar 1 Table Petugas. Gambar 2 Penambahan Komonen Pada Form

PROSEDUR & PARAMETER PROSEDUR

Algoritma Pemrograman 2 B

DAFTAR PUSTAKA. Multimedia Control, Steven Holzner. Diakses pada tanggal 14/09/2011 Dari

BAB III PERENCANAAN DAN REALISASI

Tujuan Instruksional. Mahasiswa mampu :

Modifikasi Blok Cipher

BAHASA PEMROGRAMAN C

Blox: Algoritma Block Cipher

SCROLL BAR, PROGRESS BAR, MESSAGE BOX, DAN INPUT BOX SCROLL BAR

Imam Fahrur Rozi. Algoritma dan Pemrograman. Pengantar C++

Struktur kontrol terbagi dalam dua jenis yaitu : Struktur pengambilan keputusan Struktur pengulangan (Loooping)

Copyright by : ipi-leppindo jambi all reserved 2014 (japikinfo.com)

PRAKTIKUM 4 ARRAY DAN SUB ROUTINE

Me.Picture = LoadPicture(App.Path & "\pakar.jpg") App.HelpFile = App.Path & "\Help.hlp" End Sub

FPGA DAN VHDL TEORI, ANTARMUKA DAN APLIKASI

Set Instruksi. Set Instruksi. Set Instruksi adalah kumpulan

OPERATOR-OPERATOR DALAM JAVA

BAB 3 ANALISIS DAN PERANCANGAN

FILE URUT (Sequential File)

Basic Programing Visual Basic

MODUL D :// Mahasiswa memahami konsep pembuatan database. Mahasiswa memahami konsep pembuatan program dasar aplikasi database

PHP mendukung komentar yang digunakan pada C, C++ dan Shell Unix. Sebagai contoh:

MODUL 2 Variabel, Val, If tunggal dan If bersarang + case

1. Kompetensi Memahami berbagai teknologi pemrograman basis data, khususnya MySQL, pada Visual Basic 6.0.

VARIABEL & TIPE DATA PEMROGRAMAN C++

Mobile Programming. Python Script SL4A & Basic Python Script

BAB IV PERANCANGAN. Gambar diatas adalah tampilang awal ketika ingin memulai project baru. Pilih Standart EXE untuk memulai project.

FORM LOGIN. Option Explicit. Private Sub cmdexit_click() End End Sub

Transkripsi:

A-1 A. ASCII CONTROL CHARACTERS (0-31) (http://www.ascii-code.com/) DEC OCT HEX BIN Simbol No HTML Deskripsi 0 000 00 00000000 NUL &#000; Null Char 1 001 01 00000001 SOH &#001; Start of Heading 2 002 02 00000010 STX &#002; Start of Text 3 003 03 00000011 ETX &#003; End of Text 4 004 04 00000100 EOT &#004; End of Transmission 5 005 05 00000101 ENQ &#005; Enquiry 6 006 06 00000110 ACK &#006; Acknowledgment 7 007 07 00000111 BEL &#007; Bell 8 010 08 00001000 BS &#008; Back Space 9 011 09 00001001 HT Horizontal Tab 10 012 0A 00001010 LF Line Feed 11 013 0B 00001011 VT &#011; Vertical Tab 12 014 0C 00001100 FF &#012; Form Feed 13 015 0D 00001101 CR Carriage Return 14 016 0E 00001110 SO &#014; Shift Out / X-On 15 017 0F 00001111 SI &#015; Shift In / X-Off 16 020 10 00010000 DLE &#016; Data Line Escape 17 021 11 00010001 DC1 &#017; Device Control 1 (oft. XON) 18 022 12 00010010 DC2 &#018; Device Control 2 19 023 13 00010011 DC3 &#019; Device Control 3 (oft. XOFF) 20 024 14 00010100 DC4 &#020; Device Control 4 21 025 15 00010101 NAK &#021; Negative Acknowledgement 22 026 16 00010110 SYN &#022; Synchronous Idle 23 027 17 00010111 ETB &#023; End of Transmit Block 24 030 18 00011000 CAN &#024; Cancel 25 031 19 00011001 EM &#025; End of Medium 26 032 1A 00011010 SUB &#026; Substitute 27 033 1B 00011011 ESC &#027; Escape 28 034 1C 00011100 FS &#028; Berkas Separator 29 035 1D 00011101 GS &#029; Group Separator 30 036 1E 00011110 RS &#030; Record Separator 31 037 1F 00011111 US &#031; Unit Separator

B-1 B. ASCII PRINTABEL CHARACTERS (32-127) (http://www.ascii-code.com/) DEC OCT HEX BIN Simbol No HTML Nama HTML Deskripsi 32 040 20 00100000 Space 33 041 21 00100001!! Exclamation mark 34 042 22 00100010 " " Double quotes (or speech marks) 35 043 23 00100011 # # Number 36 044 24 00100100 $ $ Dollar 37 045 25 00100101 % % Procenttecken 38 046 26 00100110 & & & Ampersand 39 047 27 00100111 &#39; Single quote 40 050 28 00101000 ( ( Open parenthesis (or open bracket) 41 051 29 00101001 ) ) Close parenthesis (or close bracket) 42 052 2A 00101010 * * Asterisk 43 053 2B 00101011 + + Plus 44 054 2C 00101100,, Comma 45 055 2D 00101101 - - Hyphen 46 056 2E 00101110.. Period, dot or full stop 47 057 2F 00101111 / / Slash or divide 48 060 30 00110000 0 0 Zero 49 061 31 00110001 1 1 One 50 062 32 00110010 2 2 Two 51 063 33 00110011 3 3 Three 52 064 34 00110100 4 4 Four 53 065 35 00110101 5 5 Five 54 066 36 00110110 6 6 Six 55 067 37 00110111 7 7 Seven 56 070 38 00111000 8 8 Eight 57 071 39 00111001 9 9 Nine 58 072 3A 00111010 : : Colon 59 073 3B 00111011 ; ; Semicolon 60 074 3C 00111100 < < < Less than (or open angled bracket) 61 075 3D 00111101 = = Equals 62 076 3E 00111110 > > > Greater than (or close angled bracket) 63 077 3F 00111111?? Question mark 64 100 40 01000000 @ @ At symbol 65 101 41 01000001 A A Uppercase A 66 102 42 01000010 B B Uppercase B 67 103 43 01000011 C C Uppercase C 68 104 44 01000100 D D Uppercase D

B-2 69 105 45 01000101 E E Uppercase E 70 106 46 01000110 F F Uppercase F 71 107 47 01000111 G G Uppercase G 72 110 48 01001000 H H Uppercase H 73 111 49 01001001 I I Uppercase I 74 112 4A 01001010 J J Uppercase J 75 113 4B 01001011 K K Uppercase K 76 114 4C 01001100 L L Uppercase L 77 115 4D 01001101 M M Uppercase M 78 116 4E 01001110 N N Uppercase N 79 117 4F 01001111 O O Uppercase O 80 120 50 01010000 P P Uppercase P 81 121 51 01010001 Q Q Uppercase Q 82 122 52 01010010 R R Uppercase R 83 123 53 01010011 S S Uppercase S 84 124 54 01010100 T T Uppercase T 85 125 55 01010101 U U Uppercase U 86 126 56 01010110 V V Uppercase V 87 127 57 01010111 W W Uppercase W 88 130 58 01011000 X X Uppercase X 89 131 59 01011001 Y Y Uppercase Y 90 132 5A 01011010 Z Z Uppercase Z 91 133 5B 01011011 [ [ Opening bracket 92 134 5C 01011100 \ \ Backslash 93 135 5D 01011101 ] ] Closing bracket 94 136 5E 01011110 ^ ^ Caret - circumflex 95 137 5F 01011111 Underscore 96 140 60 01100000 ` ` Grave accent 97 141 61 01100001 a a Lowercase a 98 142 62 01100010 b b Lowercase b 99 143 63 01100011 c c Lowercase c 100 144 64 01100100 d d Lowercase d 101 145 65 01100101 e e Lowercase e 102 146 66 01100110 f f Lowercase f 103 147 67 01100111 g g Lowercase g 104 150 68 01101000 h h Lowercase h 105 151 69 01101001 i i Lowercase i 106 152 6A 01101010 j j Lowercase j 107 153 6B 01101011 k k Lowercase k 108 154 6D 01101100 l l Lowercase l 109 155 6C 01101101 m m Lowercase m 110 156 6E 01101110 n n Lowercase n 111 157 6F 01101111 o o Lowercase o 112 160 70 01110000 p p Lowercase p 113 161 71 01110001 q q Lowercase q 114 162 72 01110010 r r Lowercase r 115 163 73 01110011 s s Lowercase s

B-3 116 164 74 01110100 t t Lowercase t 117 165 75 01110101 u u Lowercase u 118 166 76 01110110 v v Lowercase v 119 167 77 01110111 w w Lowercase w 120 170 78 01111000 x x Lowercase x 121 171 79 01111001 y y Lowercase y 122 172 7A 01111010 z z Lowercase z 123 173 7B 01111011 { { Opening brace 124 174 7C 01111100 Vertical bar 125 175 7D 01111101 } } Closing brace 126 176 7E 01111110 ~ ~ Equivalency sign - tilde 127 177 7F 01111111 &#127; Delete

C-1 C. THE EXTENDED ASCII CODES (128-255) (http://www.ascii-code.com/) DEC OCT HEX BIN Simbol No HTML Nama HTML Deskripsi 128 200 80 10000000 &#128; Euro sign 129 201 81 10000001 130 202 82 10000010 &#130; Single low-9 quotation mark 131 203 83 10000011 ƒ &#131; ƒ Latin small letter f with hook 132 204 84 10000100 &#132; Double low-9 quotation mark 133 205 85 10000101 &#133; Horizontal ellipsis 134 206 86 10000110 &#134; Dagger 135 207 87 10000111 &#135; Double dagger 136 210 88 10001000 ˆ &#136; ˆ Modifier letter circumflex accent 137 211 89 10001001 &#137; Per mille sign 138 212 8A 10001010 Š &#138; Š Latin capital letter S with caron 139 213 8B 10001011 &#139; Single left-pointing angle quotation 140 214 8C 10001100 Œ &#140; Œ Latin capital ligature OE 141 215 8D 10001101 142 216 8E 10001110 Ž &#142; Latin captial letter Z with caron 143 217 8F 10001111 144 220 90 10010000 145 221 91 10010001 &#145; Left single quotation mark 146 222 92 10010010 &#146; Right single quotation mark 147 223 93 10010011 &#147; Left double quotation mark 148 224 94 10010100 &#148; Right double quotation mark 149 225 95 10010101 &#149; Bullet 150 226 96 10010110 &#150; En dash 151 227 97 10010111 &#151; Em dash 152 230 98 10011000 &#152; Small tilde 153 231 99 10011001 &#153; Trade mark sign 154 232 9A 10011010 š &#154; š Latin small letter S with caron 155 233 9B 10011011 &#155; Single right-pointing angle quotation

C-2 mark 156 234 9C 10011100 œ &#156; œ Latin small ligature oe 157 235 9D 10011101 158 236 9E 10011110 ž &#158; Latin small letter z with caron 159 237 9F 10011111 Ÿ &#159; ÿ Latin capital letter Y with diaeresis 160 240 A0 10100000 Non-breaking space 161 241 A1 10100001 Inverted exclamation mark 162 242 A2 10100010 Cent sign 163 243 A3 10100011 Pound sign 164 244 A4 10100100 Currency sign 165 245 A5 10100101 Yen sign 166 246 A6 10100110 Pipe, Broken vertical bar 167 247 A7 10100111 Section sign 168 250 A8 10101000 Spacing diaeresis - umlaut 169 251 A9 10101001 Copyright sign 170 252 AA 10101010 ª ª ª Feminine ordinal indicator 171 253 AB 10101011 «««Left double angle quotes 172 254 AC 10101100 Not sign 173 255 AD 10101101 Soft hyphen 174 256 AE 10101110 Registered trade mark sign 175 257 AF 10101111 Spacing macron - overline 176 260 B0 10110000 Degree sign 177 261 B1 10110001 ± ± ± Plus-or-minus sign 178 262 B2 10110010 ² ² ² Superscript two - squared 179 263 B3 10110011 ³ ³ ³ Superscript three - cubed 180 264 B4 10110100 Acute accent - spacing acute 181 265 B5 10110101 µ µ µ Micro sign 182 266 B6 10110110 Pilcrow sign - paragraph sign 183 267 B7 10110111 Middle dot - Georgian comma 184 270 B8 10111000 Spacing cedilla 185 271 B9 10111001 ¹ ¹ ¹ Superscript one 186 272 BA 10111010 º º º Masculine ordinal indicator

C-3 187 273 BB 10111011»»» Right double angle quotes 188 274 BC 10111100 ¼ ¼ ¼ Fraction one quarter 189 275 BD 10111101 ½ ½ ½ Fraction one half 190 276 BE 10111110 ¾ ¾ ¾ Fraction three quarters 191 277 BF 10111111 Inverted question mark 192 300 C0 11000000 À À À Latin capital letter A with grave 193 301 C1 11000001 Á Á Á Latin capital letter A with acute 194 302 C2 11000010 Â Â Â Latin capital letter A with circumflex 195 303 C3 11000011 Ã Ã Ã Latin capital letter A with tilde 196 304 C4 11000100 Ä Ä Ä Latin capital letter A with diaeresis 197 305 C5 11000101 Å Å Å Latin capital letter A with ring above 198 306 C6 11000110 Æ Æ Æ Latin capital letter AE 199 307 C7 11000111 Ç Ç Ç Latin capital letter C with cedilla 200 310 C8 11001000 È È È Latin capital letter E with grave 201 311 C9 11001001 É É É Latin capital letter E with acute 202 312 CA 11001010 Ê Ê Ê Latin capital letter E with circumflex 203 313 CB 11001011 Ë Ë Ë Latin capital letter E with diaeresis 204 314 CD 11001100 Ì Ì Ì Latin capital letter I with grave 205 315 CC 11001101 Í Í Í Latin capital letter I with acute 206 316 CE 11001110 Î Î Î Latin capital letter I with circumflex 207 317 CF 11001111 Ï Ï Ï Latin capital letter I with diaeresis 208 320 D0 11010000 Ð Ð Ð Latin capital letter ETH 209 321 D1 11010001 Ñ Ñ Ñ Latin capital letter N with tilde 210 322 D2 11010010 Ò Ò Ò Latin capital letter O with grave 211 323 D3 11010011 Ó Ó Ó Latin capital letter O with acute

C-4 212 324 D4 11010100 Ô Ô Ô Latin capital letter O with circumflex 213 325 D5 11010101 Õ Õ Õ Latin capital letter O with tilde 214 326 D6 11010110 Ö Ö Ö Latin capital letter O with diaeresis 215 327 D7 11010111 Multiplication sign 216 330 D8 11011000 Ø Ø Ø Latin capital letter O with slash 217 331 D9 11011001 Ù Ù Ù Latin capital letter U with grave 218 332 DA 11011010 Ú Ú Ú Latin capital letter U with acute 219 333 DB 11011011 Û Û Û Latin capital letter U with circumflex 220 334 DC 11011100 Ü Ü Ü Latin capital letter U with diaeresis 221 335 DD 11011101 Ý Ý Ý Latin capital letter Y with acute 222 336 DE 11011110 Þ Þ Þ Latin capital letter THORN 223 337 DF 11011111 ß ß ß Latin small letter sharp s - ess-zed 224 340 E0 11100000 à à à Latin small letter a with grave 225 341 E1 11100001 á á á Latin small letter a with acute 226 342 E2 11100010 â â â Latin small letter a with circumflex 227 343 E3 11100011 ã ã ã Latin small letter a with tilde 228 344 E4 11100100 ä ä ä Latin small letter a with diaeresis 229 345 E5 11100101 å å å Latin small letter a with ring above 230 346 E6 11100110 æ æ æ Latin small letter ae 231 347 E7 11100111 ç ç ç Latin small letter c with cedilla 232 350 E8 11101000 è è è Latin small letter e with grave 233 351 E9 11101001 é é é Latin small letter e with acute 234 352 EA 11101010 ê ê ê Latin small letter e with circumflex 235 353 EB 11101011 ë ë ë Latin small letter e with diaeresis 236 354 EC 11101100 ì ì ì Latin small letter i with grave

C-5 237 355 ED 11101101 í í í Latin small letter i with acute 238 356 EE 11101110 î î î Latin small letter i with circumflex 239 357 EF 11101111 ï ï ï Latin small letter i with diaeresis 240 360 F0 11110000 ð ð ð Latin small letter eth 241 361 F1 11110001 ñ ñ ñ Latin small letter n with tilde 242 362 F2 11110010 ò ò ò Latin small letter o with grave 243 363 F3 11110011 ó ó ó Latin small letter o with acute 244 364 F4 11110100 ô ô ô Latin small letter o with circumflex 245 365 F5 11110101 õ õ õ Latin small letter o with tilde 246 366 F6 11110110 ö ö ö Latin small letter o with diaeresis 247 367 F7 11110111 Division sign 248 370 F8 11111000 ø ø ø Latin small letter o with slash 249 371 F9 11111001 ù ù ù Latin small letter u with grave 250 372 FA 11111010 ú ú ú Latin small letter u with acute 251 373 FB 11111011 û û û Latin small letter u with circumflex 252 374 FC 11111100 ü ü ü Latin small letter u with diaeresis 253 375 FD 11111101 ý ý ý Latin small letter y with acute 254 376 FE 11111110 þ þ þ Latin small letter thorn 255 377 FF 11111111 ÿ ÿ ÿ Latin small letter y with diaeresis

D-1 SOURCE CODE frmmain Dim FN As String Private Sub cmdabout_click() frmabout.show End Sub Private Sub cmdexit_click() Unload Me End Sub Private Sub cmdkompres_click() Dim Tempstr$ Dim H, M, S As Integer t = Timer If CompressFile(FN, "huffman", False, Tempstr$) Then Dim Result As Integer cmdsimpan.enabled = True S = Int(Timer - t) MsgBox "Proses Kompresi Selesai...", vbokonly + vbinformation, "Kompresi Huffman" frahasil.caption = "Hasil Kompresi" If S > 60 Then M = S \ 60 If M > 60 Then H = M \ 60 M = M - (H * 60) S = S - (M * 60) H = 0 M = 0 lblwaktu.caption = Right("00" & H, 2) & ":" & Right("00" & M, 2) & ":" & Right("00" & S, 2) Result = FreeFile(0) Open TempFile For Binary As #Result lblukuran.caption = Round(LOF(Result) / 1024) Close #Result End Sub Private Sub cmddekompres_click() Dim Tempstr$ Dim H, M, S As Integer t = Timer If DecompressFile(FN, False, Tempstr$) Then Dim Result As Integer cmdsimpan.enabled = True S = Int(Timer - t)

D-2 MsgBox "Proses Dekompresi Selesai...", vbokonly + vbinformation, "Kompresi Huffman" frahasil.caption = "Hasil Dekompresi" If S > 60 Then M = S \ 60 If M > 60 Then H = M \ 60 M = M - (H * 60) S = S - (M * 60) H = 0 M = 0 lblwaktu.caption = Right("00" & H, 2) & ":" & Right("00" & M, 2) & ":" & Right("00" & S, 2) Result = FreeFile(0) Open TempFile For Binary As #Result lblukuran.caption = Round(LOF(Result) / 1024) Close #Result End Sub Private Sub cmdfile_click() cdfile.dialogtitle = "Pilih File" cdfile.filter = "Video File (FLV & MPEG) *.flv;*.mpeg;*.mp4" cdfile.showopen FN = cdfile.filename If Len(FN) <= 0 Then Exit Sub lblfile.caption = GetFileName(FN) cmdkompres.enabled = True cmddekompres.enabled = True End Sub Private Sub cmdsimpan_click() cdfile.dialogtitle = "Simpan File Sebagai" If UCase(GetExtName(TempFile)) = "FLV" Then cdfile.filter = "FLV *.flv" cdfile.filter = "MPEG *.MPEG" cdfile.filename = "" cdfile.showsave FN = cdfile.filename If Len(FN) <= 0 Then Exit Sub If CopyFile(TempFile, FN, 1) = 0 Then If MsgBox("File Lain Dengan Nama Ini Ditemukan. Timpa File Lama?", vbyesno + vbquestion, "Konfirmasi") = vbyes Then Kill FN Call CopyFile(TempFile, FN, 0) Kill TempFile MsgBox "File Berhasil Disimpan Pada Lokasi : " & FN, vbokonly + vbinformation, "Sukses" End Sub Private Sub Form_Load()

D-3 cmdkompres.enabled = False cmddekompres.enabled = False cmdsimpan.enabled = False End Sub mdlcompress Option Explicit Private Const WindowLength As Long = 1024000 Private Const WindowLengthExtension As Long = 10240 Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpbuffer As String, ByVal nsize As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvdest As Any, hpvsource As Any, ByVal cbcopy As Long) Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpexistingfilename As String, ByVal lpnewfilename As String, ByVal bfailifexists As Long) As Long Private Type CompControlStruct CallBackFormEnabledFlag As Boolean CallBackForm As Object End Type Public Type HeaderStruct GFCompressionHeaderString As String * 20 HeaderStructLength As Long BlockLengthCompressed As Long BlockLengthOriginal As Long End Type Dim CompControlStructVar As CompControlStruct Public TempFile As String Public Function CompressFile(ByVal CompressionName As String, ByVal CompressionMethodName As String, ByVal TempFileReturnEnabledFlag As Boolean, ByRef TempFileReturned As String) As Boolean On Error GoTo Error: Dim CompressionNameFileNumber As Integer Dim ByteStringLength As Long Dim ByteString() As Byte Dim BlockReadPos As Long Dim BlockLength As Long Dim BlockLengthMax As Long Dim BlockString As String Dim BlockLoop As Integer Dim TempFileNumber As Integer If (Dir$(CompressionName, vbnormal Or vbhidden Or vbsystem Or vbarchive) = "") Or (Right$(CompressionName, 1) = "\") Or (CompressionName = "") Then MsgBox "File " + CompressionName + " Tidak Ditemukan!", vbokonly + vbexclamation GoTo Error: TempFile = GetTempName(CompressionName) TempFileNumber = FreeFile(0) Open TempFile For Output As #TempFileNumber

D-4 Print #TempFileNumber, GetFileHeaderString(FileLen(CompressionName), CompressionName, CompressionMethodName); Close #TempFileNumber BlockReadPos = 1 CompressionNameFileNumber = FreeFile(0) Open CompressionName For Binary As #CompressionNameFileNumber BlockLengthMax = LOF(CompressionNameFileNumber) Do BlockLength = WindowLength If (BlockLength + BlockReadPos - 1) > BlockLengthMax Then BlockLength = (BlockLengthMax - BlockReadPos + 1) If BlockLength = 0 Then Exit Do BlockString = String(BlockLength, Chr$(0)) Get #CompressionNameFileNumber, BlockReadPos, BlockString ByteStringLength = BlockLength ReDim ByteString(1 To ByteStringLength) As Byte Call CopyMemory(ByteString(1), ByVal BlockString, BlockLength) If Huffman_CompressString(ByteStringLength, ByteString()) = False Then GoTo Error: BlockString = String$(ByteStringLength, Chr$(0)) Call CopyMemory(ByVal BlockString, ByteString(1), ByteStringLength) TempFileNumber = FreeFile(0) Open TempFile For Append As #TempFileNumber Print #TempFileNumber, BlockString; Close #TempFileNumber BlockReadPos = BlockReadPos + BlockLength BlockLoop = BlockLoop + 1 Loop Until (BlockLoop = 32767) Close #CompressionNameFileNumber Jump: CompressFile = True Exit Function Error: Close #CompressionNameFileNumber Close #TempFileNumber If Not ((Dir$(TempFile) = "") Or (Right$(TempFile, 1) = "\") Or (TempFile = "")) Then Kill TempFile 'make sure temp file is deleted CompressFile = False Exit Function Private Function GetFileHeaderString(ByVal InputNameSize As Long, ByVal InputName As String, ByVal CompressionMethodName As String) As String GetFileHeaderString = _ CompressionMethodName + String$(20 - Len(CompressionMethodName), Chr$(0)) + String$(5, Chr$(0)) Public Function DecompressFile(ByVal DecompressionName As String, ByVal TempFileReturnEnabledFlag As Boolean, ByRef TempFileReturned As String) As Boolean

D-5 On Error GoTo Error: Dim DecompressionNameFileNumber As Integer Dim CompressionMethodName As String Dim ByteStringLength As Long Dim ByteString() As Byte Dim BlockReadPos As Long Dim BlockLength As Long Dim BlockLengthMax As Long Dim BlockString As String Dim BlockLoop As Integer Dim TempFileNumber As Integer Dim BlockLengthProcessed1 As Long Dim BlockLengthProcessed2 As Long Dim BlockLengthProcessed3 As Long Dim Tempstr$ If (Dir$(DecompressionName) = "") Or (Right$(DecompressionName, 1) = "\") Or (DecompressionName = "") Then MsgBox "File " + DecompressionName + " Tidak Ditemukan!", vbokonly + vbexclamation GoTo Error: DecompressionNameFileNumber = FreeFile(0) Open DecompressionName For Binary As #DecompressionNameFileNumber Tempstr$ = String$(20, Chr$(0)) Get #DecompressionNameFileNumber, 1, Tempstr$ Close #DecompressionNameFileNumber If Not (InStr(1, Tempstr$, Chr$(0), vbbinarycompare) = 0) Then CompressionMethodName = Left$(Tempstr$, InStr(1, Tempstr$, Chr$(0), vbbinarycompare) - 1) CompressionMethodName = Tempstr$ TempFile = GetTempName(DecompressionName) TempFileNumber = FreeFile(0) Open TempFile For Output As #TempFileNumber Close #TempFileNumber BlockReadPos = 26 DecompressionNameFileNumber = FreeFile(0) Open DecompressionName For Binary As #DecompressionNameFileNumber BlockLengthMax = LOF(DecompressionNameFileNumber) Do BlockLength = MAX(WindowLength + WindowLengthExtension, 1024) If (BlockLength + BlockReadPos - 1) > BlockLengthMax Then BlockLength = (BlockLengthMax - BlockReadPos + 1) If BlockLength < 1 Then Exit Do BlockString = String$(BlockLength, Chr$(0)) Get #DecompressionNameFileNumber, BlockReadPos, BlockString ByteStringLength = BlockLength ReDim ByteString(1 To ByteStringLength) As Byte Call CopyMemory(ByteString(1), ByVal BlockString, BlockLength)

D-6 If Huffman_DecompressString(ByteStringLength, ByteString(), BlockLengthProcessed1) = False Then GoTo Error: BlockLength = BlockLengthProcessed1 BlockString = String$(ByteStringLength, Chr$(0)) Call CopyMemory(ByVal BlockString, ByteString(1), ByteStringLength) TempFileNumber = FreeFile(0) Open TempFile For Append As #TempFileNumber Print #TempFileNumber, BlockString; Close #TempFileNumber BlockReadPos = BlockReadPos + BlockLength Loop Until (BlockLoop = 32767) Close #DecompressionNameFileNumber Jump: DecompressFile = True Exit Function Error: Close #DecompressionNameFileNumber Close #TempFileNumber DecompressFile = False Exit Function Public Function PresetHeader(ByRef HeaderStructVar As HeaderStruct) As Boolean HeaderStructVar.HeaderStructLength = Len(HeaderStructVar) PresetHeader = True Exit Function Public Function WriteHeader(ByRef ByteStringLength As Long, ByRef ByteString() As Byte, ByVal BlockLengthCompressed As Long, ByVal BlockLengthOriginal As Long) As Boolean Dim HeaderStructVar As HeaderStruct HeaderStructVar.HeaderStructLength = Len(HeaderStructVar) HeaderStructVar.GFCompressionHeaderString = "GFCOMPRESSIONHEADER " HeaderStructVar.BlockLengthCompressed = BlockLengthCompressed HeaderStructVar.BlockLengthOriginal = BlockLengthOriginal ByteStringLength = HeaderStructVar.HeaderStructLength + BlockLengthCompressed ReDim Preserve ByteString(1 To ByteStringLength) As Byte Call CopyMemory(ByteString(1 + HeaderStructVar.HeaderStructLength), ByteString(1), BlockLengthCompressed) If Not (ByteStringLength < HeaderStructVar.HeaderStructLength) Then Call CopyMemory(ByteString(1), HeaderStructVar, HeaderStructVar.HeaderStructLength) WriteHeader = True WriteHeader = False Public Function ReadHeader(ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByRef BlockLengthCompressed As Long, ByRef BlockLengthOriginal As Long) As Boolean

D-7 Dim HeaderStructVar As HeaderStruct HeaderStructVar.HeaderStructLength = Len(HeaderStructVar) If Not (ByteStringLength < HeaderStructVar.HeaderStructLength) Then Call CopyMemory(HeaderStructVar, ByteString(1), HeaderStructVar.HeaderStructLength) If HeaderStructVar.GFCompressionHeaderString = "GFCOMPRESSIONHEADER " Then BlockLengthCompressed = HeaderStructVar.BlockLengthCompressed BlockLengthOriginal = HeaderStructVar.BlockLengthOriginal ReadHeader = True 'ok MsgBox "internal error in ReadHeader(): wrong compression header string:" + Chr$(10) + "'" + HeaderStructVar.GFCompressionHeaderString + "'!", vbokonly + vbexclamation GoTo Error: GoTo Error: Exit Function Error: BlockLengthCompressed = 0 BlockLengthOriginal = 0 ReadHeader = False Exit Function Public Function RemoveHeader(ByRef ByteStringLength As Long, ByRef ByteString() As Byte, ByRef HeaderStructVar As HeaderStruct, ByRef BlockLengthProcessed As Long) As Boolean BlockLengthProcessed = (HeaderStructVar.BlockLengthCompressed + HeaderStructVar.HeaderStructLength) Call CopyMemory(ByteString(1), ByteString(1 + HeaderStructVar.HeaderStructLength), HeaderStructVar.BlockLengthCompressed) 'we only need the original block ByteStringLength = HeaderStructVar.BlockLengthCompressed ReDim Preserve ByteString(1 To ByteStringLength) As Byte RemoveHeader = True Exit Function Public Function CompAvailable() As Boolean Dim WinSysDir As String WinSysDir = String$(260, Chr(0)) Call GetSystemDirectory(WinSysDir, 260) If Not (InStr(1, WinSysDir, Chr(0), vbbinarycompare)) = 0 Then WinSysDir = Left$(WinSysDir, InStr(1, WinSysDir, Chr(0), vbbinarycompare) - 1) If Not (Right$(WinSysDir, 1) = "\") Then WinSysDir = WinSysDir + "\" If Not (Dir$(WinSysDir + "cmprss10.dll") = "") Then

D-8 CompAvailable = True CompAvailable = False Public Function GetFileName(ByVal FileName As String) As String Dim GetFileNameLoop As Integer GetFileName = "" For GetFileNameLoop = Len(FileName) To 1 Step (-1) If Mid$(FileName, GetFileNameLoop, 1) = "\" Then GetFileName = Right$(FileName, Len(FileName) - GetFileNameLoop) Exit For Next GetFileNameLoop Public Function GetExtName(ByVal FileName As String) As String Dim GetFileNameLoop As Integer GetExtName = "" For GetFileNameLoop = Len(FileName) To 1 Step (-1) If Mid$(FileName, GetFileNameLoop, 1) = "." Then GetExtName = Right$(FileName, Len(FileName) - GetFileNameLoop) Exit For Next GetFileNameLoop Private Function GetDirectoryName(ByVal DirectoryName As String) As String Dim GetDirectoryNameLoop As Integer GetDirectoryName = "" For GetDirectoryNameLoop = Len(DirectoryName) To 1 Step (-1) If Mid$(DirectoryName, GetDirectoryNameLoop, 1) = "\" Then GetDirectoryName = Left$(DirectoryName, GetDirectoryNameLoop) Exit For Next GetDirectoryNameLoop Private Function GetTempName(ByVal TempFilePath As String) As String GetTempName = App.Path & "\Temp." & GetExtName(TempFilePath) Private Function MIN(ByVal Value1 As Long, ByVal Value2 As Long) As Long If Value1 < Value2 Then MIN = Value1 MIN = Value2

D-9 Private Function MAX(ByVal Value1 As Long, ByVal Value2 As Long) As Long If Value1 > Value2 Then MAX = Value1 MAX = Value2 mdlhuffman Option Explicit Private Declare Function DLLHuffman_CompressString Lib "cmprss10.dll" Alias "Huffman_CompressString" (ByRef HT_CodeStringStructArray As Any, ByVal ByteStringLength As Long, ByRef ByteString As Any, ByVal CompressedStringLength As Long, ByRef CompressedString As Any) As Long Private Declare Function DLLHuffman_DecompressString Lib "cmprss10.dll" Alias "Huffman_DecompressString" (ByRef HuffmanDecompressStructArray As Any, ByVal ByteStringLength As Long, ByRef ByteString As Any, ByVal BitReadStartPos As Long, ByVal OutputByteStringLength As Long, ByRef OutputByteString As Any) As Long Public Function Huffman_CompressString(ByRef ByteStringLength As Long, ByRef ByteString() As Byte) As Boolean Dim HT_CodeStringStructNumber As Integer Dim HT_CodeStringStructArray(0 To 255) As HT_CodeStringStruct Dim HT_CharInfoStructVar As HT_CharInfoStruct Dim CompressedStringLength As Long Dim CompressedString() As Byte Dim CompressedStringIndex As Long Dim TreeByteStringLength As Long Dim TreeByteString() As Byte Dim InputByteStringLength As Long Dim ByteStringLengthUnchanged As Long Dim HeaderStructVar As HeaderStruct Dim Temp As Long Dim Tempdbl# ByteStringLengthUnchanged = ByteStringLength HT_CodeStringStructNumber = 256 Call HTCS_HT_CodeStringStruct_Define(ByteStringLength, ByteString(), HT_CharInfoStructVar, HT_CodeStringStructNumber, HT_CodeStringStructArray()) For Temp = 0 To 255 Tempdbl# = Tempdbl# + _ CDbl(HT_CharInfoStructVar.CharFrequencyArray(Temp)) * _ CDbl(HT_CodeStringStructArray(Temp).CodeLength) Next Temp CompressedStringLength = CLng(-Int(-(Tempdbl# / 8#))) If Not (CompressedStringLength = 0) Then ReDim CompressedString(1 To CompressedStringLength) As Byte GoTo Error: If CompAvailable = True Then

D-10 Call Huffman_CompressString_VC(HT_CodeStringStructArray(), ByteStringLength, ByteString(), CompressedStringLength, CompressedString()) Call Huffman_CompressString_VB(HT_CodeStringStructArray(), ByteStringLength, ByteString(), CompressedStringLength, CompressedString()) Call HTCS_TreeCodeByteString_Define(HT_CodeStringStructArray(), TreeByteStringLength, TreeByteString()) InputByteStringLength = ByteStringLength ByteStringLength = 4 + CompressedStringLength + TreeByteStringLength ReDim ByteString(1 To ByteStringLength) As Byte Call CopyMemory(ByteString(1), InputByteStringLength, 4) Call CopyMemory(ByteString(5), TreeByteString(1), TreeByteStringLength) Call CopyMemory(ByteString(5 + TreeByteStringLength), CompressedString(1), CompressedStringLength) If PresetHeader(HeaderStructVar) = False Then GoTo Error: If WriteHeader(ByteStringLength, ByteString(), ByteStringLength, ByteStringLengthUnchanged) = False Then GoTo Error: Huffman_CompressString = True Exit Function Error: Huffman_CompressString = False Exit Function Private Sub Huffman_CompressString_VC(ByRef HT_CodeStringStructArray() As HT_CodeStringStruct, ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByVal CompressedStringLength As Long, ByRef CompressedString() As Byte) Call DLLHuffman_CompressString(HT_CodeStringStructArray(0), ByteStringLength, ByteString(1), CompressedStringLength, CompressedString(1)) End Sub Private Sub Huffman_CompressString_VB(ByRef HT_CodeStringStructArray() As HT_CodeStringStruct, ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByVal CompressedStringLength As Long, ByRef CompressedString() As Byte) Dim CompressedStringBitWritePos As Long Dim CompressedStringIndex As Long Dim Temp1 As Long Dim Temp2 As Long For Temp1 = 1& To ByteStringLength For Temp2 = 1& To HT_CodeStringStructArray(ByteString(Temp1)).CodeLength CompressedStringBitWritePos = CompressedStringBitWritePos + 1& If (HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2)) Then CompressedStringIndex = ((CompressedStringBitWritePos - 1&) \ 8&) + 1&

D-11 Select Case (CompressedStringBitWritePos Mod 8&) Case 1& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 128& Case 2& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 64& Case 3& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 32& Case 4& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 16& Case 5& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 8& Case 6& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 4& Case 7& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) * 2& Case 0& CompressedString(CompressedStringIndex) = CompressedString(CompressedStringIndex) _ Or HT_CodeStringStructArray(ByteString(Temp1)).CodeArray(Temp2) End Select Next Temp2 End Sub Public Function Huffman_DecompressString(ByRef ByteStringLength As Long, ByRef ByteString() As Byte, ByRef BlockLengthProcessed As Long) As Boolean Dim HT_CodeStringStructNumber As Integer Dim HT_CodeStringStructArray(0 To 255) As HT_CodeStringStruct Dim HT_TreeStringStructVar As HT_TreeStringStruct Dim HTDC_CodeStringStructArray(0 To 255) As HTDC_CodeStringStruct Dim OutputStringStartPos As Long Dim OutputByteStringLength As Long Dim OutputByteString() As Byte

D-12 Dim HeaderStructVar As HeaderStruct If PresetHeader(HeaderStructVar) = False Then GoTo Error: If ReadHeader(ByteStringLength, ByteString(), HeaderStructVar.BlockLengthCompressed, HeaderStructVar.BlockLengthOriginal) = False Then GoTo Error: If RemoveHeader(ByteStringLength, ByteString(), HeaderStructVar, BlockLengthProcessed) = False Then GoTo Error: HT_CodeStringStructNumber = 256 Call HTDC_HT_TreeStringStructVar_Define(HT_TreeStringStructVar, ByteStringLength, ByteString()) Call HTDC_HT_CodeStringStruct_Define(HT_CodeStringStructArray(), HT_TreeStringStructVar) Call HTDC_CodeStringStruct_Define(HT_CodeStringStructArray(), HTDC_CodeStringStructArray()) Call CopyMemory(OutputByteStringLength, ByteString(1), 4) ReDim OutputByteString(1 To OutputByteStringLength) As Byte OutputStringStartPos = 4 + 4 + HT_TreeStringStructVar.TreeByteStringLength + 1 If CompAvailable = True Then Call Huffman_DecompressString_VC(HTDC_CodeStringStructArray(), ByteStringLength, ByteString(), _ (OutputStringStartPos * 8), OutputByteStringLength, OutputByteString()) Call Huffman_DecompressString_VB(HTDC_CodeStringStructArray(), ByteStringLength, ByteString(), _ (OutputStringStartPos * 8), OutputByteStringLength, OutputByteString()) ByteStringLength = OutputByteStringLength ReDim ByteString(1 To OutputByteStringLength) As Byte Call CopyMemory(ByteString(1), OutputByteString(1), OutputByteStringLength) Huffman_DecompressString = True Exit Function Error: Huffman_DecompressString = False Exit Function Private Sub Huffman_DecompressString_VC(ByRef HTDC_CodeStringStructArray() As HTDC_CodeStringStruct, ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByVal BitReadStartPos As Long, ByVal OutputByteStringLength As Long, ByRef OutputByteString() As Byte) Call DLLHuffman_DecompressString(HTDC_CodeStringStructArray(0), ByteStringLength, ByteString(1), BitReadStartPos, OutputByteStringLength, OutputByteString(1)) End Sub Private Sub Huffman_DecompressString_VB(ByRef HTDC_CodeStringStructArray() As HTDC_CodeStringStruct, ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByVal

D-13 BitReadStartPos As Long, ByVal OutputByteStringLength As Long, ByRef OutputByteString() As Byte) Dim CodeBufLength As Long Dim CodeBufArray(1 To 256) As Byte Dim ByteStringIndex As Long Dim ByteStringLong As Long Dim BitReadPos As Long Dim Temp1 As Long Dim Temp2 As Long Dim Temp3 As Long Dim Temp4 As Long BitReadPos = BitReadStartPos For Temp1 = 1& To OutputByteStringLength For Temp2 = 1& To 2048& BitReadPos = BitReadPos + 1& ByteStringIndex = ((BitReadPos - 1&) \ 8&) Select Case BitReadPos Mod 8& Case 1& If (ByteString(ByteStringIndex) And 128&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 2& If (ByteString(ByteStringIndex) And 64&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 3& If (ByteString(ByteStringIndex) And 32&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 4& If (ByteString(ByteStringIndex) And 16&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 5& If (ByteString(ByteStringIndex) And 8&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 6& If (ByteString(ByteStringIndex) And 4&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 Case 7& If (ByteString(ByteStringIndex) And 2&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0

D-14 Case 0& If (ByteString(ByteStringIndex) And 1&) Then CodeBufArray(Temp2) = 1 CodeBufArray(Temp2) = 0 End Select ' For Temp3 = HTDC_CodeStringStructArray(1).StartIndexArray(Temp2) To HTDC_CodeStringStructArray(1).EndIndexArray(Temp2) If (Temp2 = HTDC_CodeStringStructArray(Temp3).CharCodeArrayLength) Then For Temp4 = 1& To HTDC_CodeStringStructArray(Temp3).CharCodeArrayLength If Not (HTDC_CodeStringStructArray(Temp3).CharCodeArray(Temp4) = CodeBufArray(Temp4)) Then GoTo Skip: Next Temp4 OutputByteString(Temp1) = HTDC_CodeStringStructArray(Temp3).Char GoTo Jump: Skip: Next Temp3 Next Temp2 Jump: End Sub mdlhufftree Option Explicit Public Type HT_CharInfoStruct CharArray(0 To 255) As Byte CharFrequencyArray(0 To 255) As Long End Type Public Type HT_CodeStringCreationStruct ByteStringLength As Long ByteString(1 To 256) As Byte ByteStringFrequency As Long End Type Public Type HT_CodeStringStruct CodeLength As Long CodeArray(1 To 256) As Byte End Type Public Type HT_TreeStringStruct TreeByteStringBitCount As Long TreeByteStringLength As Long TreeByteString() As Byte End Type

D-15 Public Type HTDC_CodeStringStruct Char As Byte CharCodeArrayLength As Long CharCodeArray(1 To 256) As Byte StartIndexArray(0 To 255) As Long EndIndexArray(0 To 255) As Long End Type Public Sub HTCS_HT_CodeStringStruct_Define(ByVal ByteStringLength As Long, ByRef ByteString() As Byte, ByRef HT_CharInfoStructVar As HT_CharInfoStruct, ByVal HT_CodeStringStructNumber As Integer, ByRef HT_CodeStringStructArray() As HT_CodeStringStruct) Dim HuffmanCharStructArray(0 To 255) As HT_CodeStringCreationStruct Dim HuffmanCharStructVar As HT_CodeStringCreationStruct Dim CharFrequencyMax As Double Dim LastUsedIndex As Long Dim TempHuffmanCharStruct As HT_CodeStringCreationStruct Dim TempByte As Byte Dim Temp1 As Long Dim Temp2 As Long Dim tmpstr As String For Temp1 = 0& To 255& HuffmanCharStructArray(Temp1).ByteStringLength = 1& HuffmanCharStructArray(Temp1).ByteString(1) = CByte(Temp1) HT_CharInfoStructVar.CharArray(Temp1) = CByte(Temp1) For Temp1 = 1& To ByteStringLength HuffmanCharStructArray(ByteString(Temp1)).ByteStringFrequency = _ HuffmanCharStructArray(ByteString(Temp1)).ByteStringFrequency + 1& HT_CharInfoStructVar.CharFrequencyArray(ByteString(Temp1)) = _ HuffmanCharStructArray(ByteString(Temp1)).ByteStringFrequency Do Temp2 = 0& LastUsedIndex = 255& ReDo: CharFrequencyMax = 0& For Temp1 = Temp2 To 255& If HuffmanCharStructArray(Temp1).ByteStringFrequency > CharFrequencyMax Then CharFrequencyMax = HuffmanCharStructArray(Temp1).ByteStringFrequency For Temp1 = Temp2 To 255& If HuffmanCharStructArray(Temp1).ByteStringFrequency = CharFrequencyMax Then If Not (Temp1 = Temp2) Then Call CopyMemory(TempHuffmanCharStruct, HuffmanCharStructArray(Temp2), Len(TempHuffmanCharStruct)) Call CopyMemory(HuffmanCharStructArray(Temp2), HuffmanCharStructArray(Temp1), Len(HuffmanCharStructArray(Temp1)))

D-16 Call CopyMemory(HuffmanCharStructArray(Temp1), TempHuffmanCharStruct, Len(TempHuffmanCharStruct)) If CharFrequencyMax > 0& Then LastUsedIndex = Temp2 Temp2 = Temp2 + 1& If Not (Temp2 = 256&) Then GoTo ReDo: If Not (LastUsedIndex > 0&) Then Exit Do For Temp1 = 1& To HuffmanCharStructArray(LastUsedIndex).ByteStringLength HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex).Byt estring(temp1)).codelength = _ HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex).Byt estring(temp1)).codelength + 1& HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex).Byt estring(temp1)).codearray( _ HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex).Byt estring(temp1)).codelength) = 0& For Temp1 = 1& To HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringLength HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex - 1).ByteString(Temp1)).CodeLength = _ HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex - 1).ByteString(Temp1)).CodeLength + 1& HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex - 1).ByteString(Temp1)).CodeArray( _ HT_CodeStringStructArray(HuffmanCharStructArray(LastUsedIndex - 1).ByteString(Temp1)).CodeLength) = 1& Call CopyMemory(HuffmanCharStructArray(LastUsedIndex - 1&).ByteString(HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringLength + 1&), _ HuffmanCharStructArray(LastUsedIndex).ByteString(1), HuffmanCharStructArray(LastUsedIndex).ByteStringLength) HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringLength = _ HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringLength + HuffmanCharStructArray(LastUsedIndex).ByteStringLength HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringFrequency = _ HuffmanCharStructArray(LastUsedIndex - 1&).ByteStringFrequency + HuffmanCharStructArray(LastUsedIndex).ByteStringFrequency Call CopyMemory(HuffmanCharStructArray(LastUsedIndex), HuffmanCharStructVar, Len(HuffmanCharStructVar)) Loop For Temp1 = 0& To 255&

D-17 For Temp2 = 1& To (HT_CodeStringStructArray(Temp1).CodeLength \ 2&) TempByte = HT_CodeStringStructArray(Temp1).CodeArray(Temp2) HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = HT_CodeStringStructArray(Temp1).CodeArray(HT_CodeStringStructArray (Temp1).CodeLength - Temp2 + 1&) HT_CodeStringStructArray(Temp1).CodeArray(HT_CodeStringStructArray (Temp1).CodeLength - Temp2 + 1&) = TempByte Next Temp2 End Sub Public Function HTCS_TreeCodeByteString_Define(ByRef HT_CodeStringStructArray() As HT_CodeStringStruct, ByRef TreeCodeByteStringLength As Long, ByRef TreeCodeByteString() As Byte) As String Dim TreeCodeLengthTotal As Long Dim ByteStringBitWritePos As Long Dim ByteStringIndex As Long Dim Temp1 As Long Dim Temp2 As Long Dim TempByte As Byte For Temp1 = 0& To 255& TreeCodeLengthTotal = TreeCodeLengthTotal + _ HT_CodeStringStructArray(Temp1).CodeLength TreeCodeByteStringLength = 4& + 256& + (-Int(- TreeCodeLengthTotal / 8&)) ReDim TreeCodeByteString(1 To TreeCodeByteStringLength) As Byte Call CopyMemory(TreeCodeByteString(1), TreeCodeLengthTotal, 4) For Temp1 = 0& To 255& TempByte = CByte(HT_CodeStringStructArray(Temp1).CodeLength) Call CopyMemory(ByVal VarPtr(TreeCodeByteString(5 + Temp1)), TempByte, 1) ByteStringBitWritePos = (4& * 8&) + (256& * 8&) For Temp1 = 0& To 255& For Temp2 = 1& To HT_CodeStringStructArray(Temp1).CodeLength ByteStringBitWritePos = ByteStringBitWritePos + 1& If Not (HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0) Then ByteStringIndex = ((ByteStringBitWritePos - 1&) \ 8&) + 1& Select Case (ByteStringBitWritePos Mod 8&) Case 1& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 128& Case 2& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _

D-18 Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 64& Case 3& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 32& Case 4& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 16& Case 5& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 8& Case 6& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 4& Case 7& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) * 2& Case 0& TreeCodeByteString(ByteStringIndex) = TreeCodeByteString(ByteStringIndex) _ Or HT_CodeStringStructArray(Temp1).CodeArray(Temp2) End Select ' Next Temp2 Public Sub HTDC_HT_TreeStringStructVar_Define(ByRef HT_TreeStringStructVar As HT_TreeStringStruct, ByVal ByteStringLength As Long, ByRef ByteString() As Byte) If Not (ByteStringLength < 4) Then Call CopyMemory(HT_TreeStringStructVar.TreeByteStringBitCount, ByteString(5), 4) HT_TreeStringStructVar.TreeByteStringLength = 256 + -Int(- HT_TreeStringStructVar.TreeByteStringBitCount / 8) ReDim HT_TreeStringStructVar.TreeByteString(1 To HT_TreeStringStructVar.TreeByteStringLength) As Byte Call CopyMemory(HT_TreeStringStructVar.TreeByteString(1), ByteString(9), HT_TreeStringStructVar.TreeByteStringLength) HT_TreeStringStructVar.TreeByteStringLength = 0 HT_TreeStringStructVar.TreeByteStringBitCount = 0 ReDim HT_TreeStringStructVar.TreeByteString(1 To 1) As Byte End Sub

D-19 Public Sub HTDC_HT_CodeStringStruct_Define(ByRef HT_CodeStringStructArray() As HT_CodeStringStruct, ByRef HT_TreeStringStructVar As HT_TreeStringStruct) Dim ByteStringIndex As Long Dim BitReadPos As Long Dim Temp1 As Long Dim Temp2 As Long For Temp1 = 0& To 255& HT_CodeStringStructArray(Temp1).CodeLength = CLng(HT_TreeStringStructVar.TreeByteString(Temp1 + 1&)) BitReadPos = (256& * 8&) With HT_TreeStringStructVar For Temp1 = 0& To 255& For Temp2 = 1& To HT_CodeStringStructArray(Temp1).CodeLength BitReadPos = BitReadPos + 1& ByteStringIndex = ((BitReadPos - 1&) \ 8&) + 1& Select Case BitReadPos Mod 8& Case 1& If (.TreeByteString(ByteStringIndex) And 128&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 2& If (.TreeByteString(ByteStringIndex) And 64&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 3& If (.TreeByteString(ByteStringIndex) And 32&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 4& If (.TreeByteString(ByteStringIndex) And 16&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 5&

D-20 Then If (.TreeByteString(ByteStringIndex) And 8&) HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 6& If (.TreeByteString(ByteStringIndex) And 4&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 Case 7& If (.TreeByteString(ByteStringIndex) And 2&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1& HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0& Case 0& If (.TreeByteString(ByteStringIndex) And 1&) Then HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 1 HT_CodeStringStructArray(Temp1).CodeArray(Temp2) = 0 End Select Next Temp2 End With End Sub Public Sub HTDC_CodeStringStruct_Define(ByRef HT_CodeStringStructArray() As HT_CodeStringStruct, ByRef HTDC_CodeStringStructArray() As HTDC_CodeStringStruct) Dim CodeLengthMin As Long Dim CodeLengthMayBeZeroFlag As Boolean Dim NonZeroLengthCharCodeNumber As Integer Dim TempHTDC_CodeStringStruct As HTDC_CodeStringStruct Dim Temp1 As Long Dim Temp2 As Long For Temp1 = 0& To 255& HTDC_CodeStringStructArray(Temp1).Char = CByte(Temp1) HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength = HT_CodeStringStructArray(Temp1).CodeLength Call CopyMemory(HTDC_CodeStringStructArray(Temp1).CharCodeArray(1), HT_CodeStringStructArray(Temp1).CodeArray(1), 256)

D-21 Temp2 = 0& ReDo: CodeLengthMin = 256& ^ 3& For Temp1 = Temp2 To 255& If CodeLengthMayBeZeroFlag = False Then If (HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength < CodeLengthMin) And _ (HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength > 0&) Then CodeLengthMin = HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength If HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength < CodeLengthMin Then CodeLengthMin = HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength If CodeLengthMin = 256& ^ 3& Then CodeLengthMayBeZeroFlag = True GoTo ReDo: If CodeLengthMayBeZeroFlag = False Then NonZeroLengthCharCodeNumber = NonZeroLengthCharCodeNumber + 1 For Temp1 = Temp2 To 255& If HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength = CodeLengthMin Then If Not (Temp1 = Temp2) Then TempHTDC_CodeStringStruct = HTDC_CodeStringStructArray(Temp1) HTDC_CodeStringStructArray(Temp1) = HTDC_CodeStringStructArray(Temp2) HTDC_CodeStringStructArray(Temp2) = TempHTDC_CodeStringStruct Temp2 = Temp2 + 1& If Not (Temp2 = 256&) Then GoTo ReDo: For Temp1 = 0& To 255& HTDC_CodeStringStructArray(1).StartIndexArray(Temp1) = 0& HTDC_CodeStringStructArray(1).EndIndexArray(Temp1) = -1& Temp2 = 0& For Temp1 = 0& To 255& If Not (HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength = Temp2) Then HTDC_CodeStringStructArray(1).EndIndexArray(Temp2) = (Temp1-1&)

D-22 Temp2 = HTDC_CodeStringStructArray(Temp1).CharCodeArrayLength HTDC_CodeStringStructArray(1).StartIndexArray(Temp2) = Temp1 If Temp1 = 255& Then HTDC_CodeStringStructArray(1).EndIndexArray(Temp2) = 255& HTDC_CodeStringStructArray(1).StartIndexArray(0) = 0& HTDC_CodeStringStructArray(1).EndIndexArray(0) = -1& End Sub

E-1 CURRICULUM VITAE Nama : Nuzul Sakinah Lubis Tempat/Tanggal Lahir : Jakarta/3 April 1990 Alamat Sekarang : Jl. Pintu air IV, Komplek POLMED no 8, Medan Alamat Orang Tua : Jl. Pintu air IV, Komplek POLMED no 8, Medan Telp/Hp : 082166571467 Email : qinalubis@gmail.com Riwayat Pendidikan: SD Al-Azhar Medan dari Tahun 1996 s/d Tahun 2002 SMP Al-Azhar Medan dari Tahun 2002 s/d Tahun 2005 SMA Al-Azhar Medan dari Tahun 2005 s/d Tahun 2008 S1 Ilmu Komputer USU dari Tahun 2008 s/d Tahun 2013 Keahlian/Kursus yang diikuti: 1. Bahasa Inggris 2. Bahasa Pemrograman Pascal 3. Bahasa Pemrograman C++ 4. Extra kulikuler Basket Ball