diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d69653 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build/ +replays/ +node_modules/ +*.log \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..23d7298 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "src/StormLib"] + path = src/StormLib + url = https://github.com/ladislav-zezula/StormLib diff --git a/README.md b/README.md new file mode 100644 index 0000000..d6d8d18 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +StormLib (a NodeJS wrapper) +======== + +NodeJS wrapper for StormLib (https://github.com/ladislav-zezula/StormLib) + +# References + +* http://www.zezula.net/en/mpq/stormlib.html \ No newline at end of file diff --git a/binding.gyp b/binding.gyp new file mode 100644 index 0000000..d0876b8 --- /dev/null +++ b/binding.gyp @@ -0,0 +1,270 @@ +{ + "targets": [ + { + "target_name": "StormLib", + 'product_extension': 'node', + "sources": [ + "src/StormLib.cpp", + + "src/StormLib/src/adpcm/adpcm.cpp", + "src/StormLib/src/huffman/huff.cpp", + "src/StormLib/src/sparse/sparse.cpp", + "src/StormLib/src/FileStream.cpp", + "src/StormLib/src/SBaseCommon.cpp", + "src/StormLib/src/SBaseDumpData.cpp", + "src/StormLib/src/SBaseFileTable.cpp", + "src/StormLib/src/SBaseSubTypes.cpp", + "src/StormLib/src/SCompression.cpp", + "src/StormLib/src/SFileAddFile.cpp", + "src/StormLib/src/SFileAttributes.cpp", + "src/StormLib/src/SFileCompactArchive.cpp", + "src/StormLib/src/SFileCreateArchive.cpp", + "src/StormLib/src/SFileExtractFile.cpp", + "src/StormLib/src/SFileFindFile.cpp", + "src/StormLib/src/SFileGetFileInfo.cpp", + "src/StormLib/src/SFileListFile.cpp", + "src/StormLib/src/SFileOpenArchive.cpp", + "src/StormLib/src/SFileOpenFileEx.cpp", + "src/StormLib/src/SFilePatchArchives.cpp", + "src/StormLib/src/SFileReadFile.cpp", + "src/StormLib/src/SFileVerify.cpp", + + "src/StormLib/src/libtomcrypt/src/hashes/sha1.c", + "src/StormLib/src/libtomcrypt/src/hashes/hash_memory.c", + "src/StormLib/src/libtomcrypt/src/hashes/md5.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_hash_is_valid.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_prng_descriptor.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_register_prng.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_find_hash.c", + "src/StormLib/src/libtomcrypt/src/misc/zeromem.c", + "src/StormLib/src/libtomcrypt/src/misc/base64_decode.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_register_hash.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_find_prng.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_prng_is_valid.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_hash_descriptor.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_libc.c", + "src/StormLib/src/libtomcrypt/src/misc/crypt_argchk.c", + "src/StormLib/src/libtomcrypt/src/math/multi.c", + "src/StormLib/src/libtomcrypt/src/math/ltm_desc.c", + "src/StormLib/src/libtomcrypt/src/math/rand_prime.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_bit_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_boolean.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_choice.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_octet_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_printable_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_short_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_utctime.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_bit_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_boolean.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_octet_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_printable_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_set.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_setof.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_short_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_utctime.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_bit_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_boolean.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_ia5_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_object_identifier.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_octet_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_printable_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_sequence.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_utctime.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_sequence_free.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_utf8_string.c", + "src/StormLib/src/libtomcrypt/src/pk/asn1/der_length_short_integer.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_map.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_points.c", + "src/StormLib/src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c", + "src/StormLib/src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_make_key.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_free.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_verify_simple.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_import.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_verify_hash.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_sign_hash.c", + "src/StormLib/src/libtomcrypt/src/pk/rsa/rsa_exptmod.c", + "src/StormLib/src/libtommath/bn_mp_exptmod_fast.c", + "src/StormLib/src/libtommath/bn_mp_jacobi.c", + "src/StormLib/src/libtommath/bn_mp_mod.c", + "src/StormLib/src/libtommath/bn_mp_signed_bin_size.c", + "src/StormLib/src/libtommath/bn_mp_invmod.c", + "src/StormLib/src/libtommath/bn_mp_is_square.c", + "src/StormLib/src/libtommath/bn_mp_neg.c", + "src/StormLib/src/libtommath/bn_mp_reduce_2k.c", + "src/StormLib/src/libtommath/bn_mp_xor.c", + "src/StormLib/src/libtommath/bn_mp_karatsuba_mul.c", + "src/StormLib/src/libtommath/bn_mp_dr_setup.c", + "src/StormLib/src/libtommath/bn_mp_mul.c", + "src/StormLib/src/libtommath/bn_mp_init_multi.c", + "src/StormLib/src/libtommath/bn_mp_clear.c", + "src/StormLib/src/libtommath/bn_s_mp_sqr.c", + "src/StormLib/src/libtommath/bn_mp_rshd.c", + "src/StormLib/src/libtommath/bn_s_mp_sub.c", + "src/StormLib/src/libtommath/bn_mp_sub.c", + "src/StormLib/src/libtommath/bn_mp_toradix.c", + "src/StormLib/src/libtommath/bn_mp_reduce.c", + "src/StormLib/src/libtommath/bn_mp_prime_is_prime.c", + "src/StormLib/src/libtommath/bn_mp_prime_next_prime.c", + "src/StormLib/src/libtommath/bn_mp_exptmod.c", + "src/StormLib/src/libtommath/bn_mp_mod_2d.c", + "src/StormLib/src/libtommath/bn_reverse.c", + "src/StormLib/src/libtommath/bn_mp_init.c", + "src/StormLib/src/libtommath/bn_fast_s_mp_sqr.c", + "src/StormLib/src/libtommath/bn_mp_sqr.c", + "src/StormLib/src/libtommath/bn_mp_cnt_lsb.c", + "src/StormLib/src/libtommath/bn_mp_clear_multi.c", + "src/StormLib/src/libtommath/bn_mp_exch.c", + "src/StormLib/src/libtommath/bn_fast_s_mp_mul_digs.c", + "src/StormLib/src/libtommath/bn_mp_grow.c", + "src/StormLib/src/libtommath/bn_mp_read_radix.c", + "src/StormLib/src/libtommath/bn_mp_mul_2.c", + "src/StormLib/src/libtommath/bn_mp_shrink.c", + "src/StormLib/src/libtommath/bn_mp_div_2.c", + "src/StormLib/src/libtommath/bn_fast_mp_invmod.c", + "src/StormLib/src/libtommath/bn_mp_prime_miller_rabin.c", + "src/StormLib/src/libtommath/bn_mp_to_unsigned_bin.c", + "src/StormLib/src/libtommath/bn_mp_prime_rabin_miller_trials.c", + "src/StormLib/src/libtommath/bn_mp_2expt.c", + "src/StormLib/src/libtommath/bn_mp_cmp_mag.c", + "src/StormLib/src/libtommath/bn_mp_to_signed_bin.c", + "src/StormLib/src/libtommath/bn_mp_get_int.c", + "src/StormLib/src/libtommath/bn_mp_montgomery_reduce.c", + "src/StormLib/src/libtommath/bn_mp_dr_reduce.c", + "src/StormLib/src/libtommath/bn_mp_fwrite.c", + "src/StormLib/src/libtommath/bn_mp_and.c", + "src/StormLib/src/libtommath/bn_mp_exteuclid.c", + "src/StormLib/src/libtommath/bn_fast_mp_montgomery_reduce.c", + "src/StormLib/src/libtommath/bn_s_mp_mul_high_digs.c", + "src/StormLib/src/libtommath/bn_mp_reduce_setup.c", + "src/StormLib/src/libtommath/bn_mp_lcm.c", + "src/StormLib/src/libtommath/bn_mp_abs.c", + "src/StormLib/src/libtommath/bn_mp_cmp.c", + "src/StormLib/src/libtommath/bn_mp_submod.c", + "src/StormLib/src/libtommath/bn_mp_div_d.c", + "src/StormLib/src/libtommath/bn_s_mp_mul_digs.c", + "src/StormLib/src/libtommath/bn_mp_mul_d.c", + "src/StormLib/src/libtommath/bn_mp_to_unsigned_bin_n.c", + "src/StormLib/src/libtommath/bn_mp_prime_random_ex.c", + "src/StormLib/src/libtommath/bn_mp_rand.c", + "src/StormLib/src/libtommath/bn_mp_div_2d.c", + "src/StormLib/src/libtommath/bn_mp_addmod.c", + "src/StormLib/src/libtommath/bn_mp_init_copy.c", + "src/StormLib/src/libtommath/bn_mp_read_unsigned_bin.c", + "src/StormLib/src/libtommath/bn_mp_toradix_n.c", + "src/StormLib/src/libtommath/bn_fast_s_mp_mul_high_digs.c", + "src/StormLib/src/libtommath/bn_mp_toom_sqr.c", + "src/StormLib/src/libtommath/bn_mp_to_signed_bin_n.c", + "src/StormLib/src/libtommath/bn_mp_reduce_2k_setup_l.c", + "src/StormLib/src/libtommath/bn_mp_div.c", + "src/StormLib/src/libtommath/bn_prime_tab.c", + "src/StormLib/src/libtommath/bn_mp_karatsuba_sqr.c", + "src/StormLib/src/libtommath/bn_mp_gcd.c", + "src/StormLib/src/libtommath/bn_mp_prime_is_divisible.c", + "src/StormLib/src/libtommath/bn_mp_set_int.c", + "src/StormLib/src/libtommath/bn_mp_prime_fermat.c", + "src/StormLib/src/libtommath/bn_mp_cmp_d.c", + "src/StormLib/src/libtommath/bn_mp_add.c", + "src/StormLib/src/libtommath/bn_mp_sub_d.c", + "src/StormLib/src/libtommath/bn_s_mp_exptmod.c", + "src/StormLib/src/libtommath/bn_mp_init_size.c", + "src/StormLib/src/libtommath/bncore.c", + "src/StormLib/src/libtommath/bn_mp_radix_smap.c", + "src/StormLib/src/libtommath/bn_mp_reduce_2k_l.c", + "src/StormLib/src/libtommath/bn_mp_montgomery_calc_normalization.c", + "src/StormLib/src/libtommath/bn_mp_mod_d.c", + "src/StormLib/src/libtommath/bn_mp_set.c", + "src/StormLib/src/libtommath/bn_mp_or.c", + "src/StormLib/src/libtommath/bn_mp_sqrt.c", + "src/StormLib/src/libtommath/bn_mp_invmod_slow.c", + "src/StormLib/src/libtommath/bn_mp_count_bits.c", + "src/StormLib/src/libtommath/bn_mp_read_signed_bin.c", + "src/StormLib/src/libtommath/bn_mp_div_3.c", + "src/StormLib/src/libtommath/bn_mp_unsigned_bin_size.c", + "src/StormLib/src/libtommath/bn_mp_mulmod.c", + "src/StormLib/src/libtommath/bn_mp_clamp.c", + "src/StormLib/src/libtommath/bn_mp_reduce_2k_setup.c", + "src/StormLib/src/libtommath/bn_mp_toom_mul.c", + "src/StormLib/src/libtommath/bn_mp_montgomery_setup.c", + "src/StormLib/src/libtommath/bn_mp_expt_d.c", + "src/StormLib/src/libtommath/bn_mp_copy.c", + "src/StormLib/src/libtommath/bn_mp_dr_is_modulus.c", + "src/StormLib/src/libtommath/bn_mp_sqrmod.c", + "src/StormLib/src/libtommath/bn_mp_reduce_is_2k_l.c", + "src/StormLib/src/libtommath/bn_mp_mul_2d.c", + "src/StormLib/src/libtommath/bn_mp_fread.c", + "src/StormLib/src/libtommath/bn_mp_init_set.c", + "src/StormLib/src/libtommath/bn_mp_add_d.c", + "src/StormLib/src/libtommath/bn_mp_zero.c", + "src/StormLib/src/libtommath/bn_s_mp_add.c", + "src/StormLib/src/libtommath/bn_mp_radix_size.c", + "src/StormLib/src/libtommath/bn_mp_init_set_int.c", + "src/StormLib/src/libtommath/bn_mp_n_root.c", + "src/StormLib/src/libtommath/bn_mp_lshd.c", + "src/StormLib/src/libtommath/bn_mp_reduce_is_2k.c", + "src/StormLib/src/pklib/implode.c", + "src/StormLib/src/pklib/crc32.c", + "src/StormLib/src/pklib/explode.c", + "src/StormLib/src/zlib/crc32.c", + "src/StormLib/src/zlib/trees.c", + "src/StormLib/src/zlib/compress.c", + "src/StormLib/src/zlib/adler32.c", + "src/StormLib/src/zlib/inftrees.c", + "src/StormLib/src/zlib/inffast.c", + "src/StormLib/src/zlib/deflate.c", + "src/StormLib/src/zlib/inflate.c", + "src/StormLib/src/zlib/zutil.c", + "src/StormLib/src/jenkins/lookup3.c" + ], + 'include_dirs': [ + 'src/' + 'StormLib/src/', + "", + "license": "MIT", + "dependencies": { + "bindings": "^1.2.1", + "nan": "^2.2.0" + } +} diff --git a/src/StormLib b/src/StormLib new file mode 160000 index 0000000..f764c5a --- /dev/null +++ b/src/StormLib @@ -0,0 +1 @@ +Subproject commit f764c5a96294514559b17c3561be08cf1d304522 diff --git a/src/StormLib.cpp b/src/StormLib.cpp new file mode 100644 index 0000000..7fb3e48 --- /dev/null +++ b/src/StormLib.cpp @@ -0,0 +1,74 @@ +#include + +#include "StormLib/src/StormLib.h" +#include "StormLib/src/StormCommon.h" +#include "StormLib/src/StormPort.h" + +void get(const Nan::FunctionCallbackInfo & args) { + Nan::HandleScope scope; + // v8::Isolate* isolate = args.GetIsolate(); + + HANDLE hArchive = NULL; + HANDLE hFile = NULL; + + // Open the Archive + bool bArchive = SFileOpenArchive(*v8::String::Utf8Value(args[0]->ToString()), 0, 0, &hArchive); + + if (bArchive) { + + // Read the File + bool bFile = SFileOpenFileEx(hArchive, *v8::String::Utf8Value(args[1]->ToString()), 0, &hFile); + + if (bFile) { + + // Capture the file + char szBuffer[0xF0000]; + DWORD dwBytes = 1; + + v8::MaybeLocal buffer; + + while(dwBytes > 0) + { + SFileReadFile(hFile, szBuffer, sizeof(szBuffer), &dwBytes, NULL); + if(dwBytes > 0) { + buffer = Nan::CopyBuffer(szBuffer, dwBytes); + } + } + + args.GetReturnValue().Set(buffer.ToLocalChecked()); + +/* + // Capture the file + char inBuffer[0xF0000]; + char outBuffer[0xF0000]; + int outLength; + DWORD dwBytes = 1; + + v8::MaybeLocal buffer; + + while(dwBytes > 0) + { + SFileReadFile(hFile, inBuffer, sizeof(inBuffer), &dwBytes, NULL); + if(dwBytes > 0) { + bool bExplode = SCompExplode(outBuffer, &outLength, inBuffer, dwBytes); + buffer = Nan::CopyBuffer(outBuffer, outLength); + } + } +*/ + + + } else { + args.GetReturnValue().Set(Nan::New(bFile)); + } + + } else { + args.GetReturnValue().Set(Nan::New(bArchive)); + } + +} + +void init(v8::Handle exports) { + Nan::Export(exports, "get", get); +} + +NODE_MODULE(StormLib, init);